on xenial help sign in
Merge trunk
0a3dad4Michał Sawicz
CMakeLists.txt+14−2
@@ -57,12 +57,24 @@ find_package(Qt5DBus 5.4 REQUIRED)
57find_package(Qt5Concurrent 5.4 REQUIRED)
57find_package(Qt5Concurrent 5.4 REQUIRED)
58find_package(Qt5Sql 5.4 REQUIRED)
58find_package(Qt5Sql 5.4 REQUIRED)
59
59
60−pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=16)
60+pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=18)
61pkg_check_modules(GEONAMES REQUIRED geonames>=0.2)
61pkg_check_modules(GEONAMES REQUIRED geonames>=0.2)
62pkg_check_modules(GIO REQUIRED gio-2.0>=2.32)
62pkg_check_modules(GIO REQUIRED gio-2.0>=2.32)
63pkg_check_modules(GLIB REQUIRED glib-2.0>=2.32)
63pkg_check_modules(GLIB REQUIRED glib-2.0>=2.32)
64pkg_check_modules(QMENUMODEL REQUIRED qmenumodel)
64pkg_check_modules(QMENUMODEL REQUIRED qmenumodel)
65
65
66+pkg_check_modules(UBUNTUGESTURES REQUIRED UbuntuGestures)
67+
68+### Check UbuntuGestures private headers. No pkg-config (.pc) file is provided for them
69+find_path(UBUNTUGESTUREPRIV
70+ NAMES UbuntuGestures/private/damper_p.h UbuntuGestures/private/ucswipearea_p.h UbuntuGestures/private/ucswipearea_p_p.h
71+ PATHS ${UBUNTUGESTURES_INCLUDEDIR}/UbuntuGestures/${UBUNTUGESTURES_VERSION}
72+ NO_DEFAULT_PATH)
73+if (${UBUNTUGESTUREPRIV} STREQUAL UBUNTUGESTUREPRIV-NOTFOUND)
74+ message(FATAL_ERROR "UbuntuGestures private headers not found.")
75+endif()
76+# end of UbuntuGesture private headers check
77+
66# Standard install paths
78# Standard install paths
67include(GNUInstallDirs)
79include(GNUInstallDirs)
68
80
@@ -116,6 +128,7 @@ set(SHELL_APP unity8)
116set(DASH_APP unity8-dash)
128set(DASH_APP unity8-dash)
117set(SCOPE_TOOL unity-scope-tool)
129set(SCOPE_TOOL unity-scope-tool)
118set(INDICATORS_CLIENT_APP indicators-client)
130set(INDICATORS_CLIENT_APP indicators-client)
131+set(GREETER_APP unity8-greeter)
119set(MOCK_INDICATOR_SERVICE_APP unity-mock-indicator-service)
132set(MOCK_INDICATOR_SERVICE_APP unity-mock-indicator-service)
120
133
121include_directories(
134include_directories(
@@ -144,7 +157,6 @@ endif()
144
157
145# add subdirectories to build
158# add subdirectories to build
146add_subdirectory(include)
159add_subdirectory(include)
147−add_subdirectory(libs)
148add_subdirectory(src)
160add_subdirectory(src)
149add_subdirectory(tools)
161add_subdirectory(tools)
150add_subdirectory(qml)
162add_subdirectory(qml)
build.sh+3−3
@@ -46,12 +46,12 @@ install_dependencies() {
46 qmenumodel-qml \
46 qmenumodel-qml \
47 qml-module-qtquick-layouts \
47 qml-module-qtquick-layouts \
48 qml-module-qtquick-xmllistmodel \
48 qml-module-qtquick-xmllistmodel \
49+ qml-module-ubuntu-components \
50+ qml-module-ubuntu-thumbnailer0.1 \
51+ qml-module-ubuntu-web \
49 qtdeclarative5-gsettings1.0 \
52 qtdeclarative5-gsettings1.0 \
50− qtdeclarative5-ubuntu-ui-toolkit-plugin \
51 qtdeclarative5-ubuntu-settings-components \
53 qtdeclarative5-ubuntu-settings-components \
52 qtdeclarative5-ubuntu-telephony0.1 \
54 qtdeclarative5-ubuntu-telephony0.1 \
53− qtdeclarative5-ubuntu-thumbnailer0.1 \
54− qtdeclarative5-ubuntu-web-plugin \
55 qtdeclarative5-unity-notifications-plugin \
55 qtdeclarative5-unity-notifications-plugin \
56 qml-module-ubuntu-connectivity \
56 qml-module-ubuntu-connectivity \
57 ubuntu-mobile-icons \
57 ubuntu-mobile-icons \
data/51-unity8-greeter.confnew file+2
@@ -0,0 +1,2 @@
1+[Seat:*]
2+greeter-session=unity8-greeter
data/CMakeLists.txt+11
@@ -2,6 +2,7 @@
2configure_file(${SHELL_APP}.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/${SHELL_APP}.desktop @ONLY)
2configure_file(${SHELL_APP}.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/${SHELL_APP}.desktop @ONLY)
3configure_file(${DASH_APP}.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/${DASH_APP}.desktop @ONLY)
3configure_file(${DASH_APP}.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/${DASH_APP}.desktop @ONLY)
4configure_file(${INDICATORS_CLIENT_APP}.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/${INDICATORS_CLIENT_APP}.desktop @ONLY)
4configure_file(${INDICATORS_CLIENT_APP}.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/${INDICATORS_CLIENT_APP}.desktop @ONLY)
5+configure_file(${GREETER_APP}.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/${GREETER_APP}.desktop @ONLY)
5
6
6# install desktop files
7# install desktop files
7install(FILES
8install(FILES
@@ -11,6 +12,16 @@ install(FILES
11 DESTINATION ${CMAKE_INSTALL_DATADIR}/applications
12 DESTINATION ${CMAKE_INSTALL_DATADIR}/applications
12 )
13 )
13
14
15+install(FILES
16+ ${CMAKE_CURRENT_BINARY_DIR}/${GREETER_APP}.desktop
17+ DESTINATION ${CMAKE_INSTALL_DATADIR}/lightdm/greeters
18+ )
19+
20+install(FILES
21+ 51-unity8-greeter.conf
22+ DESTINATION ${CMAKE_INSTALL_DATADIR}/lightdm/lightdm.conf.d
23+ )
24+
14# install dash icon
25# install dash icon
15install(FILES
26install(FILES
16 ${CMAKE_CURRENT_SOURCE_DIR}/${DASH_APP}.png
27 ${CMAKE_CURRENT_SOURCE_DIR}/${DASH_APP}.png
data/unity8-dash.png

Binary file not shown.

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

Binary file not shown.

plugins/Dash/horizontaljournal.cpp+1−4
@@ -26,12 +26,9 @@
26#include "horizontaljournal.h"
26#include "horizontaljournal.h"
27
27
28#include <qqmlengine.h>
28#include <qqmlengine.h>
29−#pragma GCC diagnostic push
30−#pragma GCC diagnostic ignored "-pedantic"
31−#include <private/qqmldelegatemodel_p.h>
32#include <qqmlinfo.h>
29#include <qqmlinfo.h>
30+#include <private/qqmldelegatemodel_p.h>
33#include <private/qquickitem_p.h>
31#include <private/qquickitem_p.h>
34−#pragma GCC diagnostic pop
35
32
36HorizontalJournal::HorizontalJournal()
33HorizontalJournal::HorizontalJournal()
37 : m_firstVisibleIndex(-1)
34 : m_firstVisibleIndex(-1)
plugins/Dash/listviewwithpageheader.cpp+28−25
@@ -95,13 +95,11 @@
95#include <QDebug>
95#include <QDebug>
96#include <qqmlinfo.h>
96#include <qqmlinfo.h>
97#include <qqmlengine.h>
97#include <qqmlengine.h>
98−#pragma GCC diagnostic push
98+#include <private/qqmlcontext_p.h>
99−#pragma GCC diagnostic ignored "-pedantic"
100#include <private/qqmldelegatemodel_p.h>
99#include <private/qqmldelegatemodel_p.h>
101#include <private/qqmlglobal_p.h>
100#include <private/qqmlglobal_p.h>
102#include <private/qquickitem_p.h>
101#include <private/qquickitem_p.h>
103#include <private/qquickanimation_p.h>
102#include <private/qquickanimation_p.h>
104−#pragma GCC diagnostic pop
105// #include <private/qquickrectangle_p.h>
103// #include <private/qquickrectangle_p.h>
106
104
107qreal ListViewWithPageHeader::ListItem::height() const
105qreal ListViewWithPageHeader::ListItem::height() const
@@ -168,7 +166,7 @@ ListViewWithPageHeader::ListViewWithPageHeader()
168 m_contentYAnimation->setDuration(200);
166 m_contentYAnimation->setDuration(200);
169 m_contentYAnimation->setTargetObject(this);
167 m_contentYAnimation->setTargetObject(this);
170
168
171− connect(this, &ListViewWithPageHeader::contentWidthChanged, this, &ListViewWithPageHeader::onContentWidthChanged);
169+ connect(contentItem(), &QQuickItem::widthChanged, this, &ListViewWithPageHeader::onContentWidthChanged);
172 connect(this, &ListViewWithPageHeader::contentHeightChanged, this, &ListViewWithPageHeader::onContentHeightChanged);
170 connect(this, &ListViewWithPageHeader::contentHeightChanged, this, &ListViewWithPageHeader::onContentHeightChanged);
173 connect(this, &ListViewWithPageHeader::heightChanged, this, &ListViewWithPageHeader::onHeightChanged);
171 connect(this, &ListViewWithPageHeader::heightChanged, this, &ListViewWithPageHeader::onHeightChanged);
174 connect(m_contentYAnimation, &QQuickNumberAnimation::runningChanged, this, &ListViewWithPageHeader::contentYAnimationRunningChanged);
172 connect(m_contentYAnimation, &QQuickNumberAnimation::runningChanged, this, &ListViewWithPageHeader::contentYAnimationRunningChanged);
@@ -255,6 +253,7 @@ void ListViewWithPageHeader::setHeader(QQuickItem *headerItem)
255 oldHeaderHeight = m_headerItem->height();
253 oldHeaderHeight = m_headerItem->height();
256 oldHeaderY = m_headerItem->y();
254 oldHeaderY = m_headerItem->y();
257 m_headerItem->setParentItem(nullptr);
255 m_headerItem->setParentItem(nullptr);
256+ QQuickItemPrivate::get(m_headerItem)->removeItemChangeListener(this, QQuickItemPrivate::ImplicitHeight);
258 }
257 }
259 m_headerItem = headerItem;
258 m_headerItem = headerItem;
260 if (m_headerItem) {
259 if (m_headerItem) {
@@ -286,9 +285,11 @@ void ListViewWithPageHeader::setSectionDelegate(QQmlComponent *delegate)
286 m_sectionDelegate = delegate;
285 m_sectionDelegate = delegate;
287
286
288 m_topSectionItem = getSectionItem(QString(), false /*watchGeometry*/);
287 m_topSectionItem = getSectionItem(QString(), false /*watchGeometry*/);
288+ if (m_topSectionItem) {
289− m_topSectionItem->setZ(3);
289+ m_topSectionItem->setZ(3);
290− QQuickItemPrivate::get(m_topSectionItem)->setCulled(true);
290+ QQuickItemPrivate::get(m_topSectionItem)->setCulled(true);
291− connect(m_topSectionItem, &QQuickItem::heightChanged, this, &ListViewWithPageHeader::stickyHeaderHeightChanged);
291+ connect(m_topSectionItem, &QQuickItem::heightChanged, this, &ListViewWithPageHeader::stickyHeaderHeightChanged);
292+ }
292
293
293 // TODO create sections for existing items
294 // TODO create sections for existing items
294
295
@@ -699,7 +700,9 @@ void ListViewWithPageHeader::reallyReleaseItem(ListItem *listItem)
699 if (flags & QQmlDelegateModel::Destroyed) {
700 if (flags & QQmlDelegateModel::Destroyed) {
700 item->setParentItem(nullptr);
701 item->setParentItem(nullptr);
701 }
702 }
703+ if (listItem->sectionItem()) {
702− listItem->sectionItem()->deleteLater();
704+ listItem->sectionItem()->deleteLater();
705+ }
703 delete listItem;
706 delete listItem;
704}
707}
705
708
@@ -757,8 +760,6 @@ QQuickItem *ListViewWithPageHeader::getSectionItem(const QString &sectionText, b
757
760
758 QQmlContext *creationContext = m_sectionDelegate->creationContext();
761 QQmlContext *creationContext = m_sectionDelegate->creationContext();
759 QQmlContext *context = new QQmlContext(creationContext ? creationContext : qmlContext(this));
762 QQmlContext *context = new QQmlContext(creationContext ? creationContext : qmlContext(this));
760− context->setContextProperty(QStringLiteral("section"), sectionText);
761− context->setContextProperty(QStringLiteral("delegateIndex"), -1);
762 QObject *nobj = m_sectionDelegate->beginCreate(context);
763 QObject *nobj = m_sectionDelegate->beginCreate(context);
763 if (nobj) {
764 if (nobj) {
764 QQml_setParent_noEvent(context, nobj);
765 QQml_setParent_noEvent(context, nobj);
@@ -766,6 +767,8 @@ QQuickItem *ListViewWithPageHeader::getSectionItem(const QString &sectionText, b
766 if (!sectionItem) {
767 if (!sectionItem) {
767 delete nobj;
768 delete nobj;
768 } else {
769 } else {
770+ sectionItem->setProperty("text", sectionText);
771+ sectionItem->setProperty("delegateIndex", -1);
769 sectionItem->setZ(2);
772 sectionItem->setZ(2);
770 QQml_setParent_noEvent(sectionItem, m_clipItem);
773 QQml_setParent_noEvent(sectionItem, m_clipItem);
771 sectionItem->setParentItem(m_clipItem);
774 sectionItem->setParentItem(m_clipItem);
@@ -775,7 +778,7 @@ QQuickItem *ListViewWithPageHeader::getSectionItem(const QString &sectionText, b
775 }
778 }
776 m_sectionDelegate->completeCreate();
779 m_sectionDelegate->completeCreate();
777
780
778− if (watchGeometry) {
781+ if (watchGeometry && sectionItem) {
779 QQuickItemPrivate::get(sectionItem)->addItemChangeListener(this, QQuickItemPrivate::Geometry);
782 QQuickItemPrivate::get(sectionItem)->addItemChangeListener(this, QQuickItemPrivate::Geometry);
780 }
783 }
781
784
@@ -801,8 +804,7 @@ void ListViewWithPageHeader::updateSectionItem(int modelIndex)
801 if (!item->sectionItem()) {
804 if (!item->sectionItem()) {
802 item->setSectionItem(getSectionItem(sectionText));
805 item->setSectionItem(getSectionItem(sectionText));
803 } else {
806 } else {
804− QQmlContext *context = QQmlEngine::contextForObject(item->sectionItem())->parentContext();
807+ item->sectionItem()->setProperty("text", sectionText);
805− context->setContextProperty(QStringLiteral("section"), sectionText);
806 }
808 }
807 } else {
809 } else {
808 if (item->sectionItem()) {
810 if (item->sectionItem()) {
@@ -923,8 +925,7 @@ ListViewWithPageHeader::ListItem *ListViewWithPageHeader::createItem(int modelIn
923 polish();
925 polish();
924 }
926 }
925 if (listItem->sectionItem()) {
927 if (listItem->sectionItem()) {
926− QQmlContext *context = QQmlEngine::contextForObject(listItem->sectionItem())->parentContext();
927− context->setContextProperty(QStringLiteral("delegateIndex"), modelIndex);
928+ listItem->sectionItem()->setProperty("delegateIndex", modelIndex);
928 }
929 }
929 adjustMinYExtent();
930 adjustMinYExtent();
930 m_contentHeightDirty = true;
931 m_contentHeightDirty = true;
@@ -948,9 +949,10 @@ void ListViewWithPageHeader::itemCreated(int modelIndex, QObject *object)
948 return;
949 return;
949
950
950 item->setParentItem(m_clipItem);
951 item->setParentItem(m_clipItem);
952+ // FIXME Why do we need the refreshExpressions call?
951 QQmlContext *context = QQmlEngine::contextForObject(item)->parentContext();
953 QQmlContext *context = QQmlEngine::contextForObject(item)->parentContext();
952− context->setContextProperty(QStringLiteral("ListViewWithPageHeader"), this);
954+ QQmlContextPrivate::get(context)->data->refreshExpressions();
953− context->setContextProperty(QStringLiteral("heightToClip"), QVariant::fromValue<int>(0));
955+ item->setProperty("heightToClip", QVariant::fromValue<int>(0));
954 if (modelIndex == m_asyncRequestedIndex) {
956 if (modelIndex == m_asyncRequestedIndex) {
955 createItem(modelIndex, false);
957 createItem(modelIndex, false);
956 refill();
958 refill();
@@ -1116,8 +1118,7 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
1116 for (int i = 0; i < m_visibleItems.count(); ++i) {
1118 for (int i = 0; i < m_visibleItems.count(); ++i) {
1117 ListItem *item = m_visibleItems[i];
1119 ListItem *item = m_visibleItems[i];
1118 if (item->sectionItem()) {
1120 if (item->sectionItem()) {
1119− QQmlContext *context = QQmlEngine::contextForObject(item->sectionItem())->parentContext();
1120− context->setContextProperty(QStringLiteral("delegateIndex"), m_firstVisibleIndex + i);
1121+ item->sectionItem()->setProperty("delegateIndex", m_firstVisibleIndex + i);
1121 }
1122 }
1122 }
1123 }
1123
1124
@@ -1287,8 +1288,7 @@ void ListViewWithPageHeader::layout()
1287 } else {
1288 } else {
1288 // Update the top sticky section header
1289 // Update the top sticky section header
1289 const QString section = m_delegateModel->stringValue(modelIndex, m_sectionProperty);
1290 const QString section = m_delegateModel->stringValue(modelIndex, m_sectionProperty);
1290− QQmlContext *context = QQmlEngine::contextForObject(m_topSectionItem)->parentContext();
1291+ m_topSectionItem->setProperty("text", section);
1291− context->setContextProperty(QStringLiteral("section"), section);
1292
1292
1293 QQuickItemPrivate::get(m_topSectionItem)->setCulled(false);
1293 QQuickItemPrivate::get(m_topSectionItem)->setCulled(false);
1294 m_topSectionItem->setY(topSectionStickPos);
1294 m_topSectionItem->setY(topSectionStickPos);
@@ -1300,19 +1300,18 @@ void ListViewWithPageHeader::layout()
1300 break;
1300 break;
1301 delegateIndex--;
1301 delegateIndex--;
1302 }
1302 }
1303− context->setContextProperty(QStringLiteral("delegateIndex"), delegateIndex);
1303+ m_topSectionItem->setProperty("delegateIndex", delegateIndex);
1304 if (item->sectionItem()) {
1304 if (item->sectionItem()) {
1305 QQuickItemPrivate::get(item->sectionItem())->setCulled(true);
1305 QQuickItemPrivate::get(item->sectionItem())->setCulled(true);
1306 }
1306 }
1307 }
1307 }
1308 }
1308 }
1309 }
1309 }
1310− QQmlContext *context = QQmlEngine::contextForObject(item->m_item)->parentContext();
1311 const qreal clipFrom = visibleFrom + (!item->sectionItem() && m_topSectionItem && !QQuickItemPrivate::get(m_topSectionItem)->culled ? m_topSectionItem->height() : 0);
1310 const qreal clipFrom = visibleFrom + (!item->sectionItem() && m_topSectionItem && !QQuickItemPrivate::get(m_topSectionItem)->culled ? m_topSectionItem->height() : 0);
1312 if (!cull && pos < clipFrom) {
1311 if (!cull && pos < clipFrom) {
1313− context->setContextProperty(QStringLiteral("heightToClip"), clipFrom - pos);
1312+ item->m_item->setProperty("heightToClip", clipFrom - pos);
1314 } else {
1313 } else {
1315− context->setContextProperty(QStringLiteral("heightToClip"), QVariant::fromValue<int>(0));
1314+ item->m_item->setProperty("heightToClip", QVariant::fromValue<int>(0));
1316 }
1315 }
1317// qDebug() << "ListViewWithPageHeader::layout" << item->m_item;
1316// qDebug() << "ListViewWithPageHeader::layout" << item->m_item;
1318 pos += item->height();
1317 pos += item->height();
@@ -1335,6 +1334,10 @@ void ListViewWithPageHeader::layout()
1335 }
1334 }
1336 }
1335 }
1337 }
1336 }
1337+ if (m_headerItem) {
1338+ const bool cullHeader = m_headerItem->y() + m_headerItem->height() < contentY();
1339+ QQuickItemPrivate::get(m_headerItem)->setCulled(cullHeader);
1340+ }
1338 m_inLayout = false;
1341 m_inLayout = false;
1339}
1342}
1340
1343
plugins/Dash/organicgrid.cpp−3
@@ -16,10 +16,7 @@
16
16
17#include "organicgrid.h"
17#include "organicgrid.h"
18
18
19−#pragma GCC diagnostic push
20−#pragma GCC diagnostic ignored "-pedantic"
21#include <private/qquickitem_p.h>
19#include <private/qquickitem_p.h>
22−#pragma GCC diagnostic pop
23
20
24OrganicGrid::OrganicGrid()
21OrganicGrid::OrganicGrid()
25 : m_firstVisibleIndex(-1)
22 : m_firstVisibleIndex(-1)
plugins/Dash/verticaljournal.cpp−3
@@ -27,10 +27,7 @@
27 */
27 */
28#include "verticaljournal.h"
28#include "verticaljournal.h"
29
29
30−#pragma GCC diagnostic push
31−#pragma GCC diagnostic ignored "-pedantic"
32#include <private/qquickitem_p.h>
30#include <private/qquickitem_p.h>
33−#pragma GCC diagnostic pop
34
31
35VerticalJournal::VerticalJournal()
32VerticalJournal::VerticalJournal()
36 : m_columnWidth(0)
33 : m_columnWidth(0)
plugins/GlobalShortcut/GlobalShortcut.qmltypesdeleted−31
@@ -1,31 +0,0 @@
1−import QtQuick.tooling 1.1
2−
3−// This file describes the plugin-supplied types contained in the library.
4−// It is used for QML tooling purposes only.
5−//
6−// This file was auto-generated by:
7−// 'qmlplugindump -notrelocatable GlobalShortcut 1.0 plugins'
8−
9−Module {
10− Component {
11− name: "GlobalShortcut"
12− defaultProperty: "data"
13− prototype: "QQuickItem"
14− exports: ["GlobalShortcut/GlobalShortcut 1.0"]
15− exportMetaObjectRevisions: [0]
16− Property { name: "shortcut"; type: "QVariant" }
17− Property { name: "active"; type: "bool" }
18− Signal {
19− name: "shortcutChanged"
20− Parameter { name: "shortcut"; type: "QVariant" }
21− }
22− Signal {
23− name: "triggered"
24− Parameter { name: "shortcut"; type: "string" }
25− }
26− Signal {
27− name: "activeChanged"
28− Parameter { name: "active"; type: "bool" }
29− }
30− }
31−}
plugins/Greeter/Unity/Launcher/CMakeLists.txt+1−1
@@ -1,4 +1,4 @@
1−pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=7)
1+pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=9)
2pkg_check_modules(GSETTINGS_QT REQUIRED gsettings-qt)
2pkg_check_modules(GSETTINGS_QT REQUIRED gsettings-qt)
3
3
4add_definitions(-DSM_BUSNAME=systemBus)
4add_definitions(-DSM_BUSNAME=systemBus)
plugins/Greeter/Unity/Launcher/Launcher.qmltypesdeleted−182
@@ -1,182 +0,0 @@
1−import QtQuick.tooling 1.1
2−
3−// This file describes the plugin-supplied types contained in the library.
4−// It is used for QML tooling purposes only.
5−//
6−// This file was auto-generated by:
7−// 'qmlplugindump -notrelocatable Unity.Launcher 0.1 plugins/Greeter'
8−
9−Module {
10− Component {
11− name: "LauncherItem"
12− prototype: "unity::shell::launcher::LauncherItemInterface"
13− exports: ["Unity.Launcher/LauncherItem 0.1"]
14− isCreatable: false
15− exportMetaObjectRevisions: [0]
16− }
17− Component {
18− name: "LauncherModel"
19− prototype: "unity::shell::launcher::LauncherModelInterface"
20− exports: ["Unity.Launcher/LauncherModel 0.1"]
21− isCreatable: false
22− isSingleton: true
23− exportMetaObjectRevisions: [0]
24− Method {
25− name: "requestRemove"
26− Parameter { name: "appId"; type: "string" }
27− }
28− Method { name: "refresh" }
29− Method {
30− name: "get"
31− type: "unity::shell::launcher::LauncherItemInterface*"
32− Parameter { name: "index"; type: "int" }
33− }
34− Method {
35− name: "move"
36− Parameter { name: "oldIndex"; type: "int" }
37− Parameter { name: "newIndex"; type: "int" }
38− }
39− Method {
40− name: "pin"
41− Parameter { name: "appId"; type: "string" }
42− Parameter { name: "index"; type: "int" }
43− }
44− Method {
45− name: "pin"
46− Parameter { name: "appId"; type: "string" }
47− }
48− Method {
49− name: "quickListActionInvoked"
50− Parameter { name: "appId"; type: "string" }
51− Parameter { name: "actionIndex"; type: "int" }
52− }
53− Method {
54− name: "setUser"
55− Parameter { name: "username"; type: "string" }
56− }
57− Method {
58− name: "getUrlForAppId"
59− type: "string"
60− Parameter { name: "appId"; type: "string" }
61− }
62− }
63− Component {
64− name: "QuickListModel"
65− prototype: "unity::shell::launcher::QuickListModelInterface"
66− exports: ["Unity.Launcher/QuickListModel 0.1"]
67− isCreatable: false
68− exportMetaObjectRevisions: [0]
69− }
70− Component {
71− name: "unity::shell::launcher::LauncherItemInterface"
72− prototype: "QObject"
73− exports: ["Unity.Launcher/LauncherItemInterface 0.1"]
74− isCreatable: false
75− exportMetaObjectRevisions: [0]
76− Property { name: "appId"; type: "string"; isReadonly: true }
77− Property { name: "name"; type: "string"; isReadonly: true }
78− Property { name: "icon"; type: "string"; isReadonly: true }
79− Property { name: "pinned"; type: "bool"; isReadonly: true }
80− Property { name: "running"; type: "bool"; isReadonly: true }
81− Property { name: "recent"; type: "bool"; isReadonly: true }
82− Property { name: "progress"; type: "int"; isReadonly: true }
83− Property { name: "count"; type: "int"; isReadonly: true }
84− Property { name: "countVisible"; type: "bool"; isReadonly: true }
85− Property { name: "focused"; type: "bool"; isReadonly: true }
86− Property {
87− name: "quickList"
88− type: "unity::shell::launcher::QuickListModelInterface"
89− isReadonly: true
90− isPointer: true
91− }
92− Signal {
93− name: "nameChanged"
94− Parameter { name: "name"; type: "string" }
95− }
96− Signal {
97− name: "iconChanged"
98− Parameter { name: "icon"; type: "string" }
99− }
100− Signal {
101− name: "pinnedChanged"
102− Parameter { name: "pinned"; type: "bool" }
103− }
104− Signal {
105− name: "runningChanged"
106− Parameter { name: "running"; type: "bool" }
107− }
108− Signal {
109− name: "recentChanged"
110− Parameter { name: "running"; type: "bool" }
111− }
112− Signal {
113− name: "progressChanged"
114− Parameter { name: "progress"; type: "int" }
115− }
116− Signal {
117− name: "countChanged"
118− Parameter { name: "count"; type: "int" }
119− }
120− Signal {
121− name: "countVisibleChanged"
122− Parameter { name: "countVisible"; type: "bool" }
123− }
124− Signal {
125− name: "focusedChanged"
126− Parameter { name: "focused"; type: "bool" }
127− }
128− }
129− Component {
130− name: "unity::shell::launcher::LauncherModelInterface"
131− prototype: "QAbstractListModel"
132− exports: ["Unity.Launcher/LauncherModelInterface 0.1"]
133− isCreatable: false
134− exportMetaObjectRevisions: [0]
135− Property {
136− name: "applicationManager"
137− type: "unity::shell::application::ApplicationManagerInterface"
138− isPointer: true
139− }
140− Property { name: "onlyPinned"; type: "bool" }
141− Signal { name: "hint" }
142− Method {
143− name: "move"
144− Parameter { name: "oldIndex"; type: "int" }
145− Parameter { name: "newIndex"; type: "int" }
146− }
147− Method {
148− name: "get"
149− type: "unity::shell::launcher::LauncherItemInterface*"
150− Parameter { name: "index"; type: "int" }
151− }
152− Method {
153− name: "pin"
154− Parameter { name: "appId"; type: "string" }
155− Parameter { name: "index"; type: "int" }
156− }
157− Method {
158− name: "pin"
159− Parameter { name: "appId"; type: "string" }
160− }
161− Method {
162− name: "requestRemove"
163− Parameter { name: "appId"; type: "string" }
164− }
165− Method {
166− name: "quickListActionInvoked"
167− Parameter { name: "appId"; type: "string" }
168− Parameter { name: "actionIndex"; type: "int" }
169− }
170− Method {
171− name: "setUser"
172− Parameter { name: "username"; type: "string" }
173− }
174− }
175− Component {
176− name: "unity::shell::launcher::QuickListModelInterface"
177− prototype: "QAbstractListModel"
178− exports: ["Unity.Launcher/QuickListInterface 0.1"]
179− isCreatable: false
180− exportMetaObjectRevisions: [0]
181− }
182−}
plugins/Greeter/Unity/Launcher/launcheritem.cpp+14
@@ -32,6 +32,7 @@ LauncherItem::LauncherItem(const QString &appId, const QString &name, const QStr
32 m_countVisible(false),
32 m_countVisible(false),
33 m_focused(false),
33 m_focused(false),
34 m_alerting(false),
34 m_alerting(false),
35+ m_surfaceCount(0),
35 m_quickList(new QuickListModel(this))
36 m_quickList(new QuickListModel(this))
36{
37{
37 QuickListEntry nameAction;
38 QuickListEntry nameAction;
@@ -179,6 +180,19 @@ void LauncherItem::setAlerting(bool alerting)
179 }
180 }
180}
181}
181
182
183+int LauncherItem::surfaceCount() const
184+{
185+ return m_surfaceCount;
186+}
187+
188+void LauncherItem::setSurfaceCount(int surfaceCount)
189+{
190+ if (m_surfaceCount != surfaceCount) {
191+ m_surfaceCount = surfaceCount;
192+ Q_EMIT surfaceCountChanged(surfaceCount);
193+ }
194+}
195+
182unity::shell::launcher::QuickListModelInterface *LauncherItem::quickList() const
196unity::shell::launcher::QuickListModelInterface *LauncherItem::quickList() const
183{
197{
184 return m_quickList;
198 return m_quickList;
plugins/Greeter/Unity/Launcher/launcheritem.h+3−1
@@ -42,6 +42,7 @@ public:
42 bool countVisible() const override;
42 bool countVisible() const override;
43 bool focused() const override;
43 bool focused() const override;
44 bool alerting() const override;
44 bool alerting() const override;
45+ int surfaceCount() const override;
45
46
46 unity::shell::launcher::QuickListModelInterface *quickList() const override;
47 unity::shell::launcher::QuickListModelInterface *quickList() const override;
47
48
@@ -56,7 +57,7 @@ private:
56 void setCountVisible(bool countVisible);
57 void setCountVisible(bool countVisible);
57 void setFocused(bool focused);
58 void setFocused(bool focused);
58 void setAlerting(bool alerting);
59 void setAlerting(bool alerting);
59−
60+ void setSurfaceCount(int surfaceCount);
60
61
61private:
62private:
62 QString m_appId;
63 QString m_appId;
@@ -70,6 +71,7 @@ private:
70 bool m_countVisible;
71 bool m_countVisible;
71 bool m_focused;
72 bool m_focused;
72 bool m_alerting;
73 bool m_alerting;
74+ int m_surfaceCount;
73 QuickListModel *m_quickList;
75 QuickListModel *m_quickList;
74
76
75 friend class LauncherModel;
77 friend class LauncherModel;
plugins/Greeter/Unity/Launcher/launchermodelas.cpp+2−7
@@ -69,18 +69,13 @@ QVariant LauncherModel::data(const QModelIndex &index, int role) const
69 return item->focused();
69 return item->focused();
70 case RoleRunning:
70 case RoleRunning:
71 return item->running();
71 return item->running();
72+ case RoleSurfaceCount:
73+ return item->surfaceCount();
72 }
74 }
73
75
74 return QVariant();
76 return QVariant();
75}
77}
76
78
77−void LauncherModel::setAlerting(const QString &appId, bool alerting)
78−{
79− Q_UNUSED(appId)
80− Q_UNUSED(alerting)
81− qWarning() << "This is a read only implementation. Cannot set alert-state of items.";
82−}
83−
84unity::shell::launcher::LauncherItemInterface *LauncherModel::get(int index) const
79unity::shell::launcher::LauncherItemInterface *LauncherModel::get(int index) const
85{
80{
86 if (index < 0 || index >= m_list.count()) {
81 if (index < 0 || index >= m_list.count()) {
plugins/Greeter/Unity/Launcher/launchermodelas.h−1
@@ -41,7 +41,6 @@ public:
41
41
42 QVariant data(const QModelIndex &index, int role) const override;
42 QVariant data(const QModelIndex &index, int role) const override;
43
43
44− Q_INVOKABLE void setAlerting(const QString &appId, bool alerting) override;
45 Q_INVOKABLE unity::shell::launcher::LauncherItemInterface* get(int index) const override;
44 Q_INVOKABLE unity::shell::launcher::LauncherItemInterface* get(int index) const override;
46 Q_INVOKABLE void move(int oldIndex, int newIndex) override;
45 Q_INVOKABLE void move(int oldIndex, int newIndex) override;
47 Q_INVOKABLE void pin(const QString &appId, int index = -1) override;
46 Q_INVOKABLE void pin(const QString &appId, int index = -1) override;
plugins/IntegratedLightDM/CMakeLists.txtdeleted−40
@@ -1,40 +0,0 @@
1−pkg_check_modules(LIBUSERMETRICSOUTPUT REQUIRED libusermetricsoutput-1)
2−# TODO: Once we split out a separate greeter process, uncomment these lines
3−#pkg_check_modules(LIBLIGHTDM REQUIRED liblightdm-qt5-2)
4−
5−add_subdirectory(liblightdm)
6−
7−include_directories(
8− ${CMAKE_CURRENT_SOURCE_DIR}
9− ${CMAKE_CURRENT_BINARY_DIR}
10− ${CMAKE_SOURCE_DIR}/plugins/Utils
11− ${CMAKE_SOURCE_DIR}/tests/mocks/IntegratedLightDM
12− #${LIBLIGHTDM_INCLUDE_DIRS}
13− ${libunity8-private_SOURCE_DIR}
14− ${LIBUSERMETRICSOUTPUT_INCLUDE_DIRS}
15−)
16−
17−set(QMLPLUGIN_SRC
18− ../Utils/unitysortfilterproxymodelqml.cpp # FIXME evaluate a more generic approach for using other plugins
19− DBusGreeter.cpp
20− DBusGreeterList.cpp
21− Greeter.cpp
22− plugin.cpp
23− UsersModel.cpp
24− )
25−
26−add_library(IntegratedLightDM-qml MODULE
27− ${QMLPLUGIN_SRC}
28− )
29−
30−target_link_libraries(IntegratedLightDM-qml
31− integratedLightDM
32− unity8-private
33−# TODO: Once we split out a separate greeter process, uncomment these lines
34−# ${LIBLIGHTDM_LDFLAGS}
35− ${LIBUSERMETRICSOUTPUT_LDFLAGS}
36− )
37−
38−qt5_use_modules(IntegratedLightDM-qml DBus Gui Qml)
39−
40−add_unity8_plugin(IntegratedLightDM 0.1 IntegratedLightDM TARGETS IntegratedLightDM-qml)
plugins/LightDM/CMakeLists.txtnew file+26
@@ -0,0 +1,26 @@
1+pkg_check_modules(LIBUSERMETRICSOUTPUT REQUIRED libusermetricsoutput-1)
2+
3+find_package(Qt5Core REQUIRED)
4+find_package(Qt5Quick REQUIRED)
5+
6+include_directories(
7+ ${CMAKE_CURRENT_SOURCE_DIR}
8+ ${CMAKE_CURRENT_BINARY_DIR}
9+ ${CMAKE_SOURCE_DIR}/plugins/Utils
10+ ${CMAKE_BINARY_DIR}/tests/mocks/LightDM/IntegratedLightDM
11+ ${libunity8-private_SOURCE_DIR}
12+ ${LIBUSERMETRICSOUTPUT_INCLUDE_DIRS}
13+)
14+
15+set(QMLPLUGIN_SRC
16+ ../Utils/unitysortfilterproxymodelqml.cpp
17+ DBusGreeter.cpp
18+ DBusGreeterList.cpp
19+ Greeter.cpp
20+ plugin.cpp
21+ SessionsModel.cpp
22+ UsersModel.cpp
23+ )
24+
25+add_subdirectory(FullLightDM)
26+add_subdirectory(IntegratedLightDM)
plugins/IntegratedLightDM/DBusGreeter.cpp → plugins/LightDM/DBusGreeter.cpprenamed+5−4
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2014 Canonical, Ltd.
2+ * Copyright (C) 2014, 2015 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
@@ -24,7 +24,8 @@ DBusGreeter::DBusGreeter(Greeter *greeter, const QString &path)
24 : UnityDBusObject(path, QStringLiteral("com.canonical.UnityGreeter"), true, greeter),
24 : UnityDBusObject(path, QStringLiteral("com.canonical.UnityGreeter"), true, greeter),
25 m_greeter(greeter)
25 m_greeter(greeter)
26{
26{
27− connect(m_greeter, &Greeter::isActiveChanged, this, &DBusGreeter::isActiveChangedHandler);
27+ connect(m_greeter, &Greeter::isActiveChanged,
28+ this, &DBusGreeter::isActiveChangedHandler);
28}
29}
29
30
30bool DBusGreeter::isActive() const
31bool DBusGreeter::isActive() const
@@ -34,12 +35,12 @@ bool DBusGreeter::isActive() const
34
35
35void DBusGreeter::ShowGreeter()
36void DBusGreeter::ShowGreeter()
36{
37{
37− return Q_EMIT m_greeter->showGreeter();
38+ Q_EMIT m_greeter->showGreeter();
38}
39}
39
40
40void DBusGreeter::HideGreeter()
41void DBusGreeter::HideGreeter()
41{
42{
42− return Q_EMIT m_greeter->hideGreeter();
43+ Q_EMIT m_greeter->hideGreeter();
43}
44}
44
45
45void DBusGreeter::isActiveChangedHandler()
46void DBusGreeter::isActiveChangedHandler()
plugins/IntegratedLightDM/DBusGreeter.h → plugins/LightDM/DBusGreeter.hrenamed

The content is the same.

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

The content is the same.

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

The content is the same.

plugins/LightDM/FullLightDM/CMakeLists.txtnew file+28
@@ -0,0 +1,28 @@
1+pkg_check_modules(LIBLIGHTDM REQUIRED liblightdm-qt5-3)
2+
3+set(PLUGIN_CLASSNAME "FullLightDM")
4+
5+add_definitions(-DFULL_LIGHTDM)
6+
7+include_directories(
8+ ../
9+ ${LIBLIGHTDM_INCLUDE_DIRS}
10+ ${CMAKE_CURRENT_BINARY_DIR}
11+ )
12+
13+foreach(source_file ${QMLPLUGIN_SRC})
14+ list(APPEND RELATIVE_QMLPLUGIN_SRC ../${source_file})
15+endforeach()
16+
17+add_library(FullLightDM-qml MODULE
18+ ${RELATIVE_QMLPLUGIN_SRC}
19+ )
20+
21+target_link_libraries(FullLightDM-qml
22+ unity8-private
23+ ${LIBLIGHTDM_LDFLAGS}
24+ ${LIBUSERMETRICSOUTPUT_LDFLAGS}
25+ )
26+
27+qt5_use_modules(FullLightDM-qml DBus Gui Qml)
28+add_unity8_plugin(FullLightDM 0.1 LightDM/FullLightDM TARGETS FullLightDM-qml)
plugins/LightDM/FullLightDM/qmldirnew file+3
@@ -0,0 +1,3 @@
1+module LightDM.FullLightDM
2+plugin FullLightDM-qml
3+typeinfo FullLightDM.qmltypes
plugins/IntegratedLightDM/Greeter.cpp → plugins/LightDM/Greeter.cpprenamed+13−2
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2013, 2015 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
@@ -13,7 +13,6 @@
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 *
15 *
16− * Author: Michael Terry <michael.terry@canonical.com>
17 */
16 */
18
17
19#include "Greeter.h"
18#include "Greeter.h"
@@ -72,12 +71,24 @@ QString Greeter::authenticationUser() const
72 return d->m_greeter->authenticationUser();
71 return d->m_greeter->authenticationUser();
73}
72}
74
73
74+QString Greeter::defaultSessionHint() const
75+{
76+ Q_D(const Greeter);
77+ return d->m_greeter->defaultSessionHint();
78+}
79+
75bool Greeter::promptless() const
80bool Greeter::promptless() const
76{
81{
77 Q_D(const Greeter);
82 Q_D(const Greeter);
78 return d->promptless;
83 return d->promptless;
79}
84}
80
85
86+QString Greeter::selectUser() const
87+{
88+ Q_D(const Greeter);
89+ return d->m_greeter->selectUserHint();
90+}
91+
81void Greeter::authenticate(const QString &username)
92void Greeter::authenticate(const QString &username)
82{
93{
83 Q_D(Greeter);
94 Q_D(Greeter);
plugins/IntegratedLightDM/Greeter.h → plugins/LightDM/Greeter.hrenamed+5−2
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2012,2013 Canonical, Ltd.
2+ * Copyright (C) 2012,2013,2015 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
@@ -13,7 +13,6 @@
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 *
15 *
16− * Authors: Michael Terry <michael.terry@canonical.com>
17 */
16 */
18
17
19/* This class is a really tiny filter around QLightDM::Greeter. There are some
18/* This class is a really tiny filter around QLightDM::Greeter. There are some
@@ -37,7 +36,9 @@ class Greeter : public QObject
37 Q_PROPERTY(bool active READ isActive WRITE setIsActive NOTIFY isActiveChanged)
36 Q_PROPERTY(bool active READ isActive WRITE setIsActive NOTIFY isActiveChanged)
38 Q_PROPERTY(bool authenticated READ isAuthenticated NOTIFY isAuthenticatedChanged)
37 Q_PROPERTY(bool authenticated READ isAuthenticated NOTIFY isAuthenticatedChanged)
39 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)
40 Q_PROPERTY(bool promptless READ promptless NOTIFY promptlessChanged)
40 Q_PROPERTY(bool promptless READ promptless NOTIFY promptlessChanged)
41+ Q_PROPERTY(QString selectUser READ selectUser CONSTANT)
41
42
42public:
43public:
43 explicit Greeter(QObject* parent=0);
44 explicit Greeter(QObject* parent=0);
@@ -45,7 +46,9 @@ public:
45 bool isActive() const;
46 bool isActive() const;
46 bool isAuthenticated() const;
47 bool isAuthenticated() const;
47 QString authenticationUser() const;
48 QString authenticationUser() const;
49+ QString defaultSessionHint() const;
48 bool promptless() const;
50 bool promptless() const;
51+ QString selectUser() const;
49
52
50public Q_SLOTS:
53public Q_SLOTS:
51 void authenticate(const QString &username=QString());
54 void authenticate(const QString &username=QString());
plugins/IntegratedLightDM/GreeterPrivate.h → plugins/LightDM/GreeterPrivate.hrenamed

The content is the same.

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

The content is the same.

plugins/LightDM/IntegratedLightDM/CMakeLists.txtnew file+33
@@ -0,0 +1,33 @@
1+set(PLUGIN_CLASSNAME "IntegratedLightDM")
2+
3+add_definitions(-DINTEGRATED_LIGHTDM)
4+
5+foreach(include_directory ${QMLPLUGIN_INCLUDES})
6+ list(APPEND RELATIVE_QMLPLUGIN_INCLUDES ../${include_directory})
7+endforeach()
8+
9+include_directories(
10+ . #QLightDM
11+ ${QMLPLUGIN_INCLUDES}
12+ ${libunity8-private_SOURCE_DIR}
13+ ${CMAKE_CURRENT_BINARY_DIR}
14+)
15+
16+foreach(source_file ${QMLPLUGIN_SRC})
17+ list(APPEND RELATIVE_QMLPLUGIN_SRC ../${source_file})
18+endforeach()
19+
20+add_library(IntegratedLightDM-qml MODULE
21+ ${RELATIVE_QMLPLUGIN_SRC}
22+ )
23+
24+target_link_libraries(IntegratedLightDM-qml
25+ integratedLightDM
26+ unity8-private
27+ ${LIBUSERMETRICSOUTPUT_LDFLAGS}
28+ )
29+
30+qt5_use_modules(IntegratedLightDM-qml DBus Gui Qml)
31+add_unity8_plugin(IntegratedLightDM 0.1 LightDM/IntegratedLightDM TARGETS IntegratedLightDM-qml)
32+
33+add_subdirectory(liblightdm)
plugins/LightDM/IntegratedLightDM/QLightDM/Greeternew file+17
@@ -0,0 +1,17 @@
1+/*
2+ * Copyright (C) 2016 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "../liblightdm/Greeter.h"
plugins/LightDM/IntegratedLightDM/QLightDM/SessionsModelnew file+17
@@ -0,0 +1,17 @@
1+/*
2+ * Copyright (C) 2016 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "../liblightdm/SessionsModel.h"
plugins/LightDM/IntegratedLightDM/QLightDM/UsersModelnew file+17
@@ -0,0 +1,17 @@
1+/*
2+ * Copyright (C) 2016 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "../liblightdm/UsersModel.h"
plugins/IntegratedLightDM/liblightdm/CMakeLists.txt → plugins/LightDM/IntegratedLightDM/liblightdm/CMakeLists.txtrenamed+4−2
@@ -2,8 +2,10 @@ pkg_check_modules(LIBUSERMETRICSOUTPUT REQUIRED libusermetricsoutput-1)
2
2
3set(LibLightDM_SOURCES
3set(LibLightDM_SOURCES
4 Greeter.cpp
4 Greeter.cpp
5+ SessionsModel.cpp
5 UsersModel.cpp
6 UsersModel.cpp
6 GreeterPrivate.cpp
7 GreeterPrivate.cpp
8+ SessionsModelPrivate.cpp
7 UsersModelPrivate.cpp
9 UsersModelPrivate.cpp
8 ${CMAKE_SOURCE_DIR}/plugins/AccountsService/AccountsServiceDBusAdaptor.cpp
10 ${CMAKE_SOURCE_DIR}/plugins/AccountsService/AccountsServiceDBusAdaptor.cpp
9 ${CMAKE_SOURCE_DIR}/plugins/Utils/qvariantlistmodel.cpp
11 ${CMAKE_SOURCE_DIR}/plugins/Utils/qvariantlistmodel.cpp
@@ -46,8 +48,8 @@ set_target_properties(integratedLightDMSession PROPERTIES
46 COMPILE_FLAGS "-DSM_BUSNAME=sessionBus -fPIC")
48 COMPILE_FLAGS "-DSM_BUSNAME=sessionBus -fPIC")
47set_target_properties(MockLightDM-demo-shared PROPERTIES
49set_target_properties(MockLightDM-demo-shared PROPERTIES
48 COMPILE_FLAGS "-DSM_BUSNAME=systemBus"
50 COMPILE_FLAGS "-DSM_BUSNAME=systemBus"
49− OUTPUT_NAME lightdm-qt5-2)
51+ OUTPUT_NAME lightdm-qt5-3)
50
52
51install(TARGETS MockLightDM-demo-shared
53install(TARGETS MockLightDM-demo-shared
52− DESTINATION ${SHELL_INSTALL_QML}/mocks/IntegratedLightDM/demo
54+ DESTINATION ${SHELL_INSTALL_QML}/mocks/LightDM/IntegratedLightDM/demo
53 )
55 )
plugins/IntegratedLightDM/liblightdm/Greeter.cpp → plugins/LightDM/IntegratedLightDM/liblightdm/Greeter.cpprenamed

The content is the same.

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

The content is the same.

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

The content is the same.

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

The content is the same.

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

The content is the same.

plugins/IntegratedLightDM/plugin.cpp → plugins/LightDM/plugin.cpprenamed+26−4
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2012,2013, 2015 Canonical, Ltd.
2+ * Copyright (C) 2012,2013,2015 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
@@ -19,9 +19,11 @@
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 "SessionsModel.h"
22#include "UsersModel.h"
23#include "UsersModel.h"
23#include <libusermetricsoutput/ColorTheme.h>
24#include <libusermetricsoutput/ColorTheme.h>
24#include <libusermetricsoutput/UserMetrics.h>
25#include <libusermetricsoutput/UserMetrics.h>
26+#include <QLightDM/SessionsModel>
25#include <QLightDM/UsersModel>
27#include <QLightDM/UsersModel>
26
28
27#include <QAbstractItemModel>
29#include <QAbstractItemModel>
@@ -40,6 +42,13 @@ static QObject *greeter_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
40 return greeter;
42 return greeter;
41}
43}
42
44
45+static QObject *sessions_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
46+{
47+ Q_UNUSED(engine)
48+ Q_UNUSED(scriptEngine)
49+ return new SessionsModel();
50+}
51+
43static QObject *users_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
52static QObject *users_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
44{
53{
45 Q_UNUSED(engine)
54 Q_UNUSED(engine)
@@ -54,16 +63,29 @@ static QObject *infographic_provider(QQmlEngine *engine, QJSEngine *scriptEngine
54 return UserMetricsOutput::UserMetrics::getInstance();
63 return UserMetricsOutput::UserMetrics::getInstance();
55}
64}
56
65
57−void IntegratedLightDMPlugin::registerTypes(const char *uri)
66+void PLUGIN_CLASSNAME::registerTypes(const char *uri)
58{
67{
59 qmlRegisterType<QAbstractItemModel>();
68 qmlRegisterType<QAbstractItemModel>();
60 qmlRegisterType<UserMetricsOutput::ColorTheme>();
69 qmlRegisterType<UserMetricsOutput::ColorTheme>();
61
70
71+#if defined INTEGRATED_LIGHTDM
62− Q_ASSERT(uri == QLatin1String("IntegratedLightDM"));
72+ Q_ASSERT(uri == QLatin1String("LightDM.IntegratedLightDM"));
73+ qmlRegisterSingletonType<Greeter>(uri, 0, 1, "Greeter", greeter_provider);
74+#elif defined FULL_LIGHTDM
75+ Q_ASSERT(uri == QLatin1String("LightDM.FullLightDM"));
76+ qmlRegisterSingletonType<QLightDM::Greeter>(uri, 0, 1, "Greeter", greeter_provider);
77+#else
78+ #error No library defined in LightDM plugin
79+#endif
80+
63 qRegisterMetaType<QLightDM::Greeter::MessageType>("QLightDM::Greeter::MessageType");
81 qRegisterMetaType<QLightDM::Greeter::MessageType>("QLightDM::Greeter::MessageType");
64 qRegisterMetaType<QLightDM::Greeter::PromptType>("QLightDM::Greeter::PromptType");
82 qRegisterMetaType<QLightDM::Greeter::PromptType>("QLightDM::Greeter::PromptType");
65− qmlRegisterSingletonType<Greeter>(uri, 0, 1, "Greeter", greeter_provider);
83+
84+ qmlRegisterSingletonType<SessionsModel>(uri, 0, 1, "Sessions", sessions_provider);
85+ qmlRegisterUncreatableType<SessionsModel>(uri, 0, 1, "SessionRoles", QStringLiteral("Type is not instantiable"));
86+
66 qmlRegisterSingletonType<UsersModel>(uri, 0, 1, "Users", users_provider);
87 qmlRegisterSingletonType<UsersModel>(uri, 0, 1, "Users", users_provider);
67 qmlRegisterUncreatableType<QLightDM::UsersModel>(uri, 0, 1, "UserRoles", QStringLiteral("Type is not instantiable"));
88 qmlRegisterUncreatableType<QLightDM::UsersModel>(uri, 0, 1, "UserRoles", QStringLiteral("Type is not instantiable"));
89+
68 qmlRegisterSingletonType<UserMetricsOutput::UserMetrics>(uri, 0, 1, "Infographic", infographic_provider);
90 qmlRegisterSingletonType<UserMetricsOutput::UserMetrics>(uri, 0, 1, "Infographic", infographic_provider);
69}
91}
plugins/IntegratedLightDM/plugin.h → plugins/LightDM/plugin.hrenamed+5−5
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2012,2013, 2015 Canonical, Ltd.
2+ * Copyright (C) 2012,2013,2015 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,13 +15,13 @@
15 *
15 *
16 */
16 */
17
17
18−#ifndef INTEGRATED_LIGHTDM_PLUGIN_H
18+#ifndef LIGHTDM_PLUGIN_H
19−#define INTEGRATED_LIGHTDM_PLUGIN_H
19+#define LIGHTDM_PLUGIN_H
20
20
21#include <QtQml/QQmlEngine>
21#include <QtQml/QQmlEngine>
22#include <QtQml/QQmlExtensionPlugin>
22#include <QtQml/QQmlExtensionPlugin>
23
23
24−class IntegratedLightDMPlugin : public QQmlExtensionPlugin
24+class PLUGIN_CLASSNAME : public QQmlExtensionPlugin
25{
25{
26 Q_OBJECT
26 Q_OBJECT
27 Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
27 Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
@@ -30,4 +30,4 @@ public:
30 void registerTypes(const char *uri) override;
30 void registerTypes(const char *uri) override;
31};
31};
32
32
33−#endif /* INTEGRATED_LIGHTDM_PLUGIN_H */
33+#endif /* LIGHTDM_PLUGIN_H */
plugins/IntegratedLightDM/qmldir → plugins/LightDM/qmldirrenamed

The content is the same.

plugins/Lights/CMakeLists.txt+1
@@ -2,6 +2,7 @@ pkg_check_modules(ANDROID_HEADERS REQUIRED android-headers)
2pkg_check_modules(ANDROID_HARDWARE REQUIRED libhardware)
2pkg_check_modules(ANDROID_HARDWARE REQUIRED libhardware)
3
3
4include_directories(
4include_directories(
5+ SYSTEM
5 ${ANDROID_HEADERS_INCLUDE_DIRS}
6 ${ANDROID_HEADERS_INCLUDE_DIRS}
6)
7)
7
8
plugins/Lights/Lights.qmltypesdeleted−45
@@ -1,45 +0,0 @@
1−import QtQuick.tooling 1.1
2−
3−// This file describes the plugin-supplied types contained in the library.
4−// It is used for QML tooling purposes only.
5−//
6−// This file was auto-generated by:
7−// 'qmlplugindump -notrelocatable Lights 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "Lights"
12− prototype: "QObject"
13− exports: ["Lights/Lights 0.1"]
14− isCreatable: false
15− isSingleton: true
16− exportMetaObjectRevisions: [0]
17− Enum {
18− name: "State"
19− values: {
20− "Off": 0,
21− "On": 1
22− }
23− }
24− Property { name: "state"; type: "State" }
25− Property { name: "color"; type: "QColor" }
26− Property { name: "onMillisec"; type: "int" }
27− Property { name: "offMillisec"; type: "int" }
28− Signal {
29− name: "stateChanged"
30− Parameter { name: "newState"; type: "State" }
31− }
32− Signal {
33− name: "colorChanged"
34− Parameter { name: "color"; type: "QColor" }
35− }
36− Signal {
37− name: "onMillisecChanged"
38− Parameter { name: "onMs"; type: "int" }
39− }
40− Signal {
41− name: "offMillisecChanged"
42− Parameter { name: "offMs"; type: "int" }
43− }
44− }
45−}
plugins/Lights/android-hardware.h−4
@@ -15,9 +15,5 @@
15 *
15 *
16 */
16 */
17
17
18−// The purpose of this header wrapper is just to avoid having warnings being reported on
19−// code from external header files, as we can't do anything about them.
20−#pragma GCC system_header
21−
22#include <hardware/hardware.h>
18#include <hardware/hardware.h>
23#include <hardware/lights.h>
19#include <hardware/lights.h>
plugins/Powerd/Powerd.qmltypesdeleted−39
@@ -1,39 +0,0 @@
1−import QtQuick.tooling 1.1
2−
3−// This file describes the plugin-supplied types contained in the library.
4−// It is used for QML tooling purposes only.
5−//
6−// This file was auto-generated by:
7−// 'qmlplugindump -notrelocatable Powerd 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "Powerd"
12− prototype: "QObject"
13− exports: ["Powerd/Powerd 0.1"]
14− isCreatable: false
15− isSingleton: true
16− exportMetaObjectRevisions: [0]
17− Enum {
18− name: "DisplayStateChangeReason"
19− values: {
20− "Unknown": 0,
21− "Inactivity": 1,
22− "PowerKey": 2,
23− "Proximity": 3
24− }
25− }
26− Enum {
27− name: "Status"
28− values: {
29− "Off": 0,
30− "On": 1
31− }
32− }
33− Property { name: "status"; type: "Status"; isReadonly: true }
34− Signal {
35− name: "statusChanged"
36− Parameter { name: "reason"; type: "DisplayStateChangeReason" }
37− }
38− }
39−}
plugins/SessionBroadcast/SessionBroadcast.qmltypesdeleted−19
@@ -1,19 +0,0 @@
1−import QtQuick.tooling 1.1
2−
3−// This file describes the plugin-supplied types contained in the library.
4−// It is used for QML tooling purposes only.
5−//
6−// This file was auto-generated by:
7−// 'qmlplugindump -notrelocatable SessionBroadcast 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "SessionBroadcast"
12− prototype: "QObject"
13− exports: ["SessionBroadcast/SessionBroadcast 0.1"]
14− isCreatable: false
15− isSingleton: true
16− exportMetaObjectRevisions: [0]
17− Signal { name: "showHome" }
18− }
19−}
plugins/UInput/UInput.qmltypesdeleted−44
@@ -1,44 +0,0 @@
1−import QtQuick.tooling 1.1
2−
3−// This file describes the plugin-supplied types contained in the library.
4−// It is used for QML tooling purposes only.
5−//
6−// This file was auto-generated by:
7−// 'qmlplugindump -notrelocatable UInput 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "UInput"
12− prototype: "QObject"
13− exports: ["UInput/UInput 0.1"]
14− exportMetaObjectRevisions: [0]
15− Enum {
16− name: "Button"
17− values: {
18− "ButtonLeft": 0,
19− "ButtonRight": 1,
20− "ButtonMiddle": 2
21− }
22− }
23− Method { name: "createMouse" }
24− Method { name: "removeMouse" }
25− Method {
26− name: "moveMouse"
27− Parameter { name: "dx"; type: "int" }
28− Parameter { name: "dy"; type: "int" }
29− }
30− Method {
31− name: "pressMouse"
32− Parameter { name: "button"; type: "Button" }
33− }
34− Method {
35− name: "releaseMouse"
36− Parameter { name: "button"; type: "Button" }
37− }
38− Method {
39− name: "scrollMouse"
40− Parameter { name: "dh"; type: "int" }
41− Parameter { name: "dv"; type: "int" }
42− }
43− }
44−}
plugins/Ubuntu/DownloadDaemonListener/CMakeLists.txt−1
@@ -1,7 +1,6 @@
1include_directories(
1include_directories(
2 ${CMAKE_CURRENT_SOURCE_DIR}
2 ${CMAKE_CURRENT_SOURCE_DIR}
3 ${CMAKE_CURRENT_BINARY_DIR}
3 ${CMAKE_CURRENT_BINARY_DIR}
4− ${Qt5Gui_PRIVATE_INCLUDE_DIRS}
5)
4)
6
5
7set(DOWNLOADDAEMONLISTENER_SOURCES
6set(DOWNLOADDAEMONLISTENER_SOURCES
plugins/Ubuntu/DownloadDaemonListener/DownloadDaemonListener.qmltypesdeleted−60
@@ -1,60 +0,0 @@
1−import QtQuick.tooling 1.1
2−
3−// This file describes the plugin-supplied types contained in the library.
4−// It is used for QML tooling purposes only.
5−//
6−// This file was auto-generated by:
7−// 'qmlplugindump -notrelocatable Ubuntu.DownloadDaemonListener 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "DownloadTracker"
12− prototype: "QObject"
13− exports: ["Ubuntu.DownloadDaemonListener/DownloadTracker 0.1"]
14− exportMetaObjectRevisions: [0]
15− Property { name: "service"; type: "string" }
16− Property { name: "dbusPath"; type: "string" }
17− Property { name: "serviceReady"; type: "bool"; isReadonly: true }
18− Signal {
19− name: "serviceChanged"
20− Parameter { name: "service"; type: "string" }
21− }
22− Signal {
23− name: "dbusPathChanged"
24− Parameter { name: "dbusPath"; type: "string" }
25− }
26− Signal {
27− name: "serviceReadyChanged"
28− Parameter { name: "serviceReady"; type: "bool" }
29− }
30− Signal {
31− name: "canceled"
32− Parameter { name: "success"; type: "bool" }
33− }
34− Signal {
35− name: "error"
36− Parameter { name: "error"; type: "string" }
37− }
38− Signal {
39− name: "finished"
40− Parameter { name: "path"; type: "string" }
41− }
42− Signal {
43− name: "paused"
44− Parameter { name: "success"; type: "bool" }
45− }
46− Signal {
47− name: "progress"
48− Parameter { name: "received"; type: "qulonglong" }
49− Parameter { name: "total"; type: "qulonglong" }
50− }
51− Signal {
52− name: "resumed"
53− Parameter { name: "success"; type: "bool" }
54− }
55− Signal {
56− name: "started"
57− Parameter { name: "success"; type: "bool" }
58− }
59− }
60−}
plugins/Ubuntu/Gestures/AxisVelocityCalculator.h+1−1
@@ -24,7 +24,7 @@
24#include "UbuntuGesturesQmlGlobal.h"
24#include "UbuntuGesturesQmlGlobal.h"
25#include <stdint.h>
25#include <stdint.h>
26#include <QtCore/QObject>
26#include <QtCore/QObject>
27−#include "TimeSource.h"
27+#include <TimeSource>
28
28
29/*
29/*
30 Estimates the current velocity of a finger based on recent movement along an axis
30 Estimates the current velocity of a finger based on recent movement along an axis
plugins/Ubuntu/Gestures/CMakeLists.txt+9−5
@@ -4,27 +4,30 @@ remove_definitions(-DQT_NO_KEYWORDS)
4set(UbuntuGesturesQml_SOURCES
4set(UbuntuGesturesQml_SOURCES
5 plugin.cpp
5 plugin.cpp
6 AxisVelocityCalculator.cpp
6 AxisVelocityCalculator.cpp
7− Damper.cpp
8 Direction.cpp
7 Direction.cpp
9− DirectionalDragArea.cpp
8+ MouseEventGenerator.cpp
10− FloatingFlickable.cpp
11 PressedOutsideNotifier.cpp
9 PressedOutsideNotifier.cpp
12 TouchDispatcher.cpp
10 TouchDispatcher.cpp
13 TouchGate.cpp
11 TouchGate.cpp
14 TouchGestureArea.cpp
12 TouchGestureArea.cpp
15)
13)
16
14
15+pkg_check_modules(UBUNTUGESTURES REQUIRED UbuntuGestures)
16+
17add_definitions(-DUBUNTUGESTURESQML_LIBRARY)
17add_definitions(-DUBUNTUGESTURESQML_LIBRARY)
18
18
19add_library(UbuntuGesturesQml MODULE ${UbuntuGesturesQml_SOURCES})
19add_library(UbuntuGesturesQml MODULE ${UbuntuGesturesQml_SOURCES})
20−target_link_libraries(UbuntuGesturesQml UbuntuGestures)
20+target_link_libraries(UbuntuGesturesQml ${UBUNTUGESTURES_LIBRARIES})
21
21
22qt5_use_modules(UbuntuGesturesQml Core Quick)
22qt5_use_modules(UbuntuGesturesQml Core Quick)
23
23
24# So that Foo.cpp can #include "Foo.moc"
24# So that Foo.cpp can #include "Foo.moc"
25include_directories(${CMAKE_CURRENT_BINARY_DIR})
25include_directories(${CMAKE_CURRENT_BINARY_DIR})
26
26
27−include_directories(${CMAKE_SOURCE_DIR}/libs/UbuntuGestures)
27+include_directories(
28+ SYSTEM
29+ ${UBUNTUGESTURES_INCLUDE_DIRS}
30+)
28
31
29# There's no cmake var for v8 include path :-/ so create one
32# There's no cmake var for v8 include path :-/ so create one
30LIST(GET Qt5Core_INCLUDE_DIRS 0 QtCoreDir0)
33LIST(GET Qt5Core_INCLUDE_DIRS 0 QtCoreDir0)
@@ -32,6 +35,7 @@ SET(Qt5V8_PRIVATE_INCLUDE_DIR ${QtCoreDir0}/QtV8/${Qt5Core_VERSION_STRING}/QtV8)
32
35
33# DANGER! DANGER! Using Qt's private API!
36# DANGER! DANGER! Using Qt's private API!
34include_directories(
37include_directories(
38+ SYSTEM
35 ${Qt5Qml_PRIVATE_INCLUDE_DIRS}
39 ${Qt5Qml_PRIVATE_INCLUDE_DIRS}
36 ${Qt5Quick_INCLUDE_DIRS}
40 ${Qt5Quick_INCLUDE_DIRS}
37 ${Qt5Quick_PRIVATE_INCLUDE_DIRS}
41 ${Qt5Quick_PRIVATE_INCLUDE_DIRS}
plugins/Ubuntu/Gestures/Damper.hdeleted−89
@@ -1,89 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−#ifndef UBUNTU_GESTURES_DAMPER_H
18−#define UBUNTU_GESTURES_DAMPER_H
19−
20−#include <QtCore/QPointF>
21−
22−/*
23− Decreases the oscillations of a value along an axis.
24− */
25−template <class Type> class Damper {
26−public:
27− Damper() : m_value(0), m_maxDelta(0) { }
28−
29− // Maximum delta between the raw value and its dampened counterpart.
30− void setMaxDelta(Type maxDelta) {
31− if (maxDelta < 0) qFatal("Damper::maxDelta must be a positive number.");
32− m_maxDelta = maxDelta;
33− }
34− Type maxDelta() const { return m_maxDelta; }
35−
36− void reset(Type value) {
37− m_value = value;
38− }
39−
40− Type update(Type value) {
41− Type delta = value - m_value;
42− if (delta > 0 && delta > m_maxDelta) {
43− m_value += delta - m_maxDelta;
44− } else if (delta < 0 && delta < -m_maxDelta) {
45− m_value += delta + m_maxDelta;
46− }
47−
48− return m_value;
49− }
50−
51− Type value() const { return m_value; }
52−
53−private:
54− Type m_value;
55− Type m_maxDelta;
56−};
57−
58−/*
59− A point that has its movement dampened.
60− */
61−class DampedPointF {
62−public:
63− void setMaxDelta(qreal maxDelta) {
64− m_x.setMaxDelta(maxDelta);
65− m_y.setMaxDelta(maxDelta);
66− }
67−
68− qreal maxDelta() const { return m_x.maxDelta(); }
69−
70− void reset(const QPointF point) {
71− m_x.reset(point.x());
72− m_y.reset(point.y());
73− }
74−
75− void update(const QPointF point) {
76− m_x.update(point.x());
77− m_y.update(point.y());
78− }
79−
80− qreal x() const { return m_x.value(); }
81− qreal y() const { return m_y.value(); }
82−private:
83− Damper<qreal> m_x;
84− Damper<qreal> m_y;
85−};
86−
87−QDebug operator<<(QDebug dbg, const DampedPointF &p);
88−
89−#endif // UBUNTU_GESTURES_DAMPER_H
plugins/Ubuntu/Gestures/Direction.h+1
@@ -29,6 +29,7 @@ class UBUNTUGESTURESQML_EXPORT Direction : public QObject {
29 Q_ENUMS(Type)
29 Q_ENUMS(Type)
30
30
31public:
31public:
32+ // Make sure it is kept synchronized with SDK UCSwipeArea::Direction
32 enum Type {
33 enum Type {
33 Rightwards, // Along the positive direction of the X axis
34 Rightwards, // Along the positive direction of the X axis
34 Leftwards, // Along the negative direction of the X axis
35 Leftwards, // Along the negative direction of the X axis
plugins/Ubuntu/Gestures/DirectionalDragArea.cppdeleted−932
@@ -1,932 +0,0 @@
1−/*
2− * Copyright (C) 2013-2015 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−#define ACTIVETOUCHESINFO_DEBUG 0
18−#define DIRECTIONALDRAGAREA_DEBUG 0
19−
20−#include "DirectionalDragArea.h"
21−
22−#include <QQuickWindow>
23−#include <QtCore/qmath.h>
24−#include <QScreen>
25−#include <QDebug>
26−
27−#pragma GCC diagnostic push
28−#pragma GCC diagnostic ignored "-pedantic"
29−#include <private/qquickwindow_p.h>
30−#pragma GCC diagnostic pop
31−
32−// local
33−#include "TouchOwnershipEvent.h"
34−#include "TouchRegistry.h"
35−#include "UnownedTouchEvent.h"
36−
37−#include "DirectionalDragArea_p.h"
38−
39−using namespace UbuntuGestures;
40−
41−#if DIRECTIONALDRAGAREA_DEBUG
42−#define ddaDebug(params) qDebug().nospace() << "[DDA(" << qPrintable(objectName()) << ")] " << params
43−#include "DebugHelpers.h"
44−
45−namespace {
46−const char *statusToString(DirectionalDragAreaPrivate::Status status)
47−{
48− if (status == DirectionalDragAreaPrivate::WaitingForTouch) {
49− return "WaitingForTouch";
50− } else if (status == DirectionalDragAreaPrivate::Undecided) {
51− return "Undecided";
52− } else {
53− return "Recognized";
54− }
55−}
56−
57−} // namespace {
58−#else // DIRECTIONALDRAGAREA_DEBUG
59−#define ddaDebug(params) ((void)0)
60−#endif // DIRECTIONALDRAGAREA_DEBUG
61−
62−DirectionalDragArea::DirectionalDragArea(QQuickItem *parent)
63− : QQuickItem(parent)
64− , d(new DirectionalDragAreaPrivate(this))
65−{
66− d->setRecognitionTimer(new Timer(this));
67− d->recognitionTimer->setInterval(d->maxTime);
68− d->recognitionTimer->setSingleShot(true);
69−
70− connect(this, &QQuickItem::enabledChanged, d, &DirectionalDragAreaPrivate::giveUpIfDisabledOrInvisible);
71− connect(this, &QQuickItem::visibleChanged, d, &DirectionalDragAreaPrivate::giveUpIfDisabledOrInvisible);
72−}
73−
74−Direction::Type DirectionalDragArea::direction() const
75−{
76− return d->direction;
77−}
78−
79−void DirectionalDragArea::setDirection(Direction::Type direction)
80−{
81− if (direction != d->direction) {
82− d->direction = direction;
83− Q_EMIT directionChanged(d->direction);
84− }
85−}
86−
87−void DirectionalDragAreaPrivate::setDistanceThreshold(qreal value)
88−{
89− if (distanceThreshold != value) {
90− distanceThreshold = value;
91− distanceThresholdSquared = distanceThreshold * distanceThreshold;
92− }
93−}
94−
95−void DirectionalDragAreaPrivate::setMaxTime(int value)
96−{
97− if (maxTime != value) {
98− maxTime = value;
99− recognitionTimer->setInterval(maxTime);
100− }
101−}
102−
103−void DirectionalDragAreaPrivate::setRecognitionTimer(UbuntuGestures::AbstractTimer *timer)
104−{
105− int interval = 0;
106− bool timerWasRunning = false;
107− bool wasSingleShot = false;
108−
109− // can be null when called from the constructor
110− if (recognitionTimer) {
111− interval = recognitionTimer->interval();
112− timerWasRunning = recognitionTimer->isRunning();
113− if (recognitionTimer->parent() == this) {
114− delete recognitionTimer;
115− }
116− }
117−
118− recognitionTimer = timer;
119− timer->setInterval(interval);
120− timer->setSingleShot(wasSingleShot);
121− connect(timer, &UbuntuGestures::AbstractTimer::timeout,
122− this, &DirectionalDragAreaPrivate::rejectGesture);
123− if (timerWasRunning) {
124− recognitionTimer->start();
125− }
126−}
127−
128−void DirectionalDragAreaPrivate::setTimeSource(const SharedTimeSource &timeSource)
129−{
130− this->timeSource = timeSource;
131− activeTouches.m_timeSource = timeSource;
132−}
133−
134−qreal DirectionalDragArea::distance() const
135−{
136− if (Direction::isHorizontal(d->direction)) {
137− return d->publicPos.x() - d->startPos.x();
138− } else {
139− return d->publicPos.y() - d->startPos.y();
140− }
141−}
142−
143−void DirectionalDragAreaPrivate::updateSceneDistance()
144−{
145− QPointF totalMovement = publicScenePos - startScenePos;
146− sceneDistance = projectOntoDirectionVector(totalMovement);
147−}
148−
149−qreal DirectionalDragArea::sceneDistance() const
150−{
151− return d->sceneDistance;
152−}
153−
154−qreal DirectionalDragArea::touchX() const
155−{
156− return d->publicPos.x();
157−}
158−
159−qreal DirectionalDragArea::touchY() const
160−{
161− return d->publicPos.y();
162−}
163−
164−qreal DirectionalDragArea::touchSceneX() const
165−{
166− return d->publicScenePos.x();
167−}
168−
169−qreal DirectionalDragArea::touchSceneY() const
170−{
171− return d->publicScenePos.y();
172−}
173−
174−bool DirectionalDragArea::dragging() const
175−{
176− return d->status == DirectionalDragAreaPrivate::Recognized;
177−}
178−
179−bool DirectionalDragArea::pressed() const
180−{
181− return d->status != DirectionalDragAreaPrivate::WaitingForTouch;
182−}
183−
184−bool DirectionalDragArea::immediateRecognition() const
185−{
186− return d->immediateRecognition;
187−}
188−
189−void DirectionalDragArea::setImmediateRecognition(bool enabled)
190−{
191− if (d->immediateRecognition != enabled) {
192− d->immediateRecognition = enabled;
193− Q_EMIT immediateRecognitionChanged(enabled);
194− }
195−}
196−
197−bool DirectionalDragArea::monitorOnly() const
198−{
199− return d->monitorOnly;
200−}
201−
202−void DirectionalDragArea::setMonitorOnly(bool monitorOnly)
203−{
204− if (d->monitorOnly != monitorOnly) {
205− d->monitorOnly = monitorOnly;
206−
207− if (monitorOnly && d->status == DirectionalDragAreaPrivate::Undecided) {
208− TouchRegistry::instance()->removeCandidateOwnerForTouch(d->touchId, this);
209− // We still wanna know when it ends for keeping the composition time window up-to-date
210− TouchRegistry::instance()->addTouchWatcher(d->touchId, this);
211− }
212−
213− Q_EMIT monitorOnlyChanged(monitorOnly);
214− }
215−}
216−
217−void DirectionalDragArea::removeTimeConstraints()
218−{
219− d->setMaxTime(60 * 60 * 1000);
220− d->compositionTime = 0;
221− ddaDebug("removed time constraints");
222−}
223−
224−bool DirectionalDragArea::event(QEvent *event)
225−{
226− if (event->type() == TouchOwnershipEvent::touchOwnershipEventType()) {
227− d->touchOwnershipEvent(static_cast<TouchOwnershipEvent *>(event));
228− return true;
229− } else if (event->type() == UnownedTouchEvent::unownedTouchEventType()) {
230− d->unownedTouchEvent(static_cast<UnownedTouchEvent *>(event));
231− return true;
232− } else {
233− return QQuickItem::event(event);
234− }
235−}
236−
237−void DirectionalDragAreaPrivate::touchOwnershipEvent(TouchOwnershipEvent *event)
238−{
239− if (event->gained()) {
240− QVector<int> ids;
241− ids.append(event->touchId());
242− ddaDebug("grabbing touch");
243− q->grabTouchPoints(ids);
244−
245− // Work around for Qt bug. If we grab a touch that is being used for mouse pointer
246− // emulation it will cause the emulation logic to go nuts.
247− // Thus we have to also grab the mouse in this case.
248− //
249− // The fix for this bug has landed in Qt 5.4 (https://codereview.qt-project.org/96887)
250− // TODO: Remove this workaround once we start using Qt 5.4
251− if (q->window()) {
252− QQuickWindowPrivate *windowPrivate = QQuickWindowPrivate::get(q->window());
253− if (windowPrivate->touchMouseId == event->touchId() && q->window()->mouseGrabberItem()) {
254− ddaDebug("removing mouse grabber");
255− q->window()->mouseGrabberItem()->ungrabMouse();
256− }
257− }
258− } else {
259− // We still wanna know when it ends for keeping the composition time window up-to-date
260− TouchRegistry::instance()->addTouchWatcher(touchId, q);
261−
262− setStatus(WaitingForTouch);
263− }
264−}
265−
266−void DirectionalDragAreaPrivate::unownedTouchEvent(UnownedTouchEvent *unownedTouchEvent)
267−{
268− QTouchEvent *event = unownedTouchEvent->touchEvent();
269−
270− Q_ASSERT(!event->touchPointStates().testFlag(Qt::TouchPointPressed));
271−
272− ddaDebug("Unowned " << timeSource->msecsSinceReference() << " " << qPrintable(touchEventToString(event)));
273−
274− switch (status) {
275− case WaitingForTouch:
276− // do nothing
277− break;
278− case Undecided:
279− Q_ASSERT(q->isEnabled() && q->isVisible());
280− unownedTouchEvent_undecided(unownedTouchEvent);
281− break;
282− default: // Recognized:
283− if (monitorOnly) {
284− // Treat unowned event as if we owned it, but we are really just watching it
285− touchEvent_recognized(event);
286− }
287− break;
288− }
289−
290− activeTouches.update(event);
291−}
292−
293−void DirectionalDragAreaPrivate::unownedTouchEvent_undecided(UnownedTouchEvent *unownedTouchEvent)
294−{
295− const QTouchEvent::TouchPoint *touchPoint = fetchTargetTouchPoint(unownedTouchEvent->touchEvent());
296− if (!touchPoint) {
297− qCritical() << "DirectionalDragArea[status=Undecided]: touch " << touchId
298− << "missing from UnownedTouchEvent without first reaching state Qt::TouchPointReleased. "
299− "Considering it as released.";
300−
301− TouchRegistry::instance()->removeCandidateOwnerForTouch(touchId, q);
302− setStatus(WaitingForTouch);
303− return;
304− }
305−
306− const QPointF &touchScenePos = touchPoint->scenePos();
307−
308− if (touchPoint->state() == Qt::TouchPointReleased) {
309− // touch has ended before recognition concluded
310− ddaDebug("Touch has ended before recognition concluded");
311− TouchRegistry::instance()->removeCandidateOwnerForTouch(touchId, q);
312− setStatus(WaitingForTouch);
313− return;
314− }
315−
316− previousDampedScenePos.setX(dampedScenePos.x());
317− previousDampedScenePos.setY(dampedScenePos.y());
318− dampedScenePos.update(touchScenePos);
319−
320− if (!movingInRightDirection()) {
321− ddaDebug("Rejecting gesture because touch point is moving in the wrong direction.");
322− TouchRegistry::instance()->removeCandidateOwnerForTouch(touchId, q);
323− // We still wanna know when it ends for keeping the composition time window up-to-date
324− TouchRegistry::instance()->addTouchWatcher(touchId, q);
325− setStatus(WaitingForTouch);
326− return;
327− }
328−
329− if (isWithinTouchCompositionWindow()) {
330− // There's still time for some new touch to appear and ruin our party as it would be combined
331− // with our touchId one and therefore deny the possibility of a single-finger gesture.
332− ddaDebug("Sill within composition window. Let's wait more.");
333− return;
334− }
335−
336− if (movedFarEnoughAlongGestureAxis()) {
337− if (!monitorOnly) {
338− TouchRegistry::instance()->requestTouchOwnership(touchId, q);
339− }
340− setStatus(Recognized);
341− setPublicPos(touchPoint->pos());
342− setPublicScenePos(touchScenePos);
343− } else if (isPastMaxDistance()) {
344− ddaDebug("Rejecting gesture because it went farther than maxDistance without getting recognized.");
345− TouchRegistry::instance()->removeCandidateOwnerForTouch(touchId, q);
346− // We still wanna know when it ends for keeping the composition time window up-to-date
347− TouchRegistry::instance()->addTouchWatcher(touchId, q);
348− setStatus(WaitingForTouch);
349− } else {
350− ddaDebug("Didn't move far enough yet. Let's wait more.");
351− }
352−}
353−
354−void DirectionalDragArea::touchEvent(QTouchEvent *event)
355−{
356− // TODO: Consider when more than one touch starts in the same event (although it's not possible
357− // with Mir's android-input). Have to track them all. Consider it a plus/bonus.
358−
359− ddaDebug(d->timeSource->msecsSinceReference() << " " << qPrintable(touchEventToString(event)));
360−
361− if (!isEnabled() || !isVisible()) {
362− QQuickItem::touchEvent(event);
363− return;
364− }
365−
366− switch (d->status) {
367− case DirectionalDragAreaPrivate::WaitingForTouch:
368− d->touchEvent_absent(event);
369− break;
370− case DirectionalDragAreaPrivate::Undecided:
371− d->touchEvent_undecided(event);
372− break;
373− default: // Recognized:
374− d->touchEvent_recognized(event);
375− break;
376− }
377−
378− d->activeTouches.update(event);
379−}
380−
381−void DirectionalDragAreaPrivate::touchEvent_absent(QTouchEvent *event)
382−{
383− // TODO: accept/reject is for the whole event, not per touch id. See how that affects us.
384−
385− if (!event->touchPointStates().testFlag(Qt::TouchPointPressed)) {
386− // Nothing to see here. No touch starting in this event.
387− return;
388− }
389−
390− // to be proven wrong, if that's the case
391− bool allGood = true;
392−
393− if (isWithinTouchCompositionWindow()) {
394− // too close to the last touch start. So we consider them as starting roughly at the same time.
395− // Can't be a single-touch gesture.
396− ddaDebug("A new touch point came in but we're still within time composition window. Ignoring it.");
397− allGood = false;
398− }
399−
400− const QList<QTouchEvent::TouchPoint> &touchPoints = event->touchPoints();
401−
402− const QTouchEvent::TouchPoint *newTouchPoint = nullptr;
403− for (int i = 0; i < touchPoints.count() && allGood; ++i) {
404− const QTouchEvent::TouchPoint &touchPoint = touchPoints.at(i);
405− if (touchPoint.state() == Qt::TouchPointPressed) {
406− if (newTouchPoint) {
407− // more than one touch starting in this QTouchEvent. Can't be a single-touch gesture
408− allGood = false;
409− } else {
410− // that's our candidate
411− newTouchPoint = &touchPoint;
412− }
413− }
414− }
415−
416− if (allGood) {
417− allGood = sanityCheckRecognitionProperties();
418− if (!allGood) {
419− qWarning("DirectionalDragArea: recognition properties are wrongly set. Gesture recognition"
420− " is impossible");
421− }
422− }
423−
424− if (allGood) {
425− Q_ASSERT(newTouchPoint);
426−
427− startPos = newTouchPoint->pos();
428− startScenePos = newTouchPoint->scenePos();
429− touchId = newTouchPoint->id();
430− dampedScenePos.reset(startScenePos);
431− setPublicPos(startPos);
432−
433− setPublicScenePos(startScenePos);
434− updateSceneDirectionVector();
435−
436− if (recognitionIsDisabled()) {
437− // Behave like a dumb TouchArea
438− ddaDebug("Gesture recognition is disabled. Requesting touch ownership immediately.");
439− setStatus(Recognized);
440− if (monitorOnly) {
441− watchPressedTouchPoints(touchPoints);
442− event->ignore();
443− } else {
444− TouchRegistry::instance()->requestTouchOwnership(touchId, q);
445− event->accept();
446− }
447− } else {
448− // just monitor the touch points for now.
449− if (monitorOnly) {
450− watchPressedTouchPoints(touchPoints);
451− } else {
452− TouchRegistry::instance()->addCandidateOwnerForTouch(touchId, q);
453− }
454−
455− setStatus(Undecided);
456− // Let the item below have it. We will monitor it and grab it later if a gesture
457− // gets recognized.
458− event->ignore();
459− }
460− } else {
461− watchPressedTouchPoints(touchPoints);
462− event->ignore();
463− }
464−}
465−
466−void DirectionalDragAreaPrivate::touchEvent_undecided(QTouchEvent *event)
467−{
468− Q_ASSERT(fetchTargetTouchPoint(event) == nullptr);
469−
470− // We're not interested in new touch points. We already have our candidate (touchId).
471− // But we do want to know when those new touches end for keeping the composition time
472− // window up-to-date
473− event->ignore();
474− watchPressedTouchPoints(event->touchPoints());
475−
476− if (event->touchPointStates().testFlag(Qt::TouchPointPressed) && isWithinTouchCompositionWindow()) {
477− // multi-finger drags are not accepted
478− ddaDebug("Multi-finger drags are not accepted");
479−
480− TouchRegistry::instance()->removeCandidateOwnerForTouch(touchId, q);
481− // We still wanna know when it ends for keeping the composition time window up-to-date
482− TouchRegistry::instance()->addTouchWatcher(touchId, q);
483−
484− setStatus(WaitingForTouch);
485− }
486−}
487−
488−void DirectionalDragAreaPrivate::touchEvent_recognized(QTouchEvent *event)
489−{
490− const QTouchEvent::TouchPoint *touchPoint = fetchTargetTouchPoint(event);
491−
492− if (!touchPoint) {
493− qCritical() << "DirectionalDragArea[status=Recognized]: touch " << touchId
494− << "missing from QTouchEvent without first reaching state Qt::TouchPointReleased. "
495− "Considering it as released.";
496− setStatus(WaitingForTouch);
497− } else {
498− setPublicPos(touchPoint->pos());
499− setPublicScenePos(touchPoint->scenePos());
500−
501− if (touchPoint->state() == Qt::TouchPointReleased) {
502− setStatus(WaitingForTouch);
503− }
504− }
505−}
506−
507−void DirectionalDragAreaPrivate::watchPressedTouchPoints(const QList<QTouchEvent::TouchPoint> &touchPoints)
508−{
509− for (int i = 0; i < touchPoints.count(); ++i) {
510− const QTouchEvent::TouchPoint &touchPoint = touchPoints.at(i);
511− if (touchPoint.state() == Qt::TouchPointPressed) {
512− TouchRegistry::instance()->addTouchWatcher(touchPoint.id(), q);
513− }
514− }
515−}
516−
517−bool DirectionalDragAreaPrivate::recognitionIsDisabled() const
518−{
519− return immediateRecognition || (distanceThreshold <= 0 && compositionTime <= 0);
520−}
521−
522−bool DirectionalDragAreaPrivate::sanityCheckRecognitionProperties()
523−{
524− return recognitionIsDisabled()
525− || (distanceThreshold < maxDistance && compositionTime < maxTime);
526−}
527−
528−const QTouchEvent::TouchPoint *DirectionalDragAreaPrivate::fetchTargetTouchPoint(QTouchEvent *event)
529−{
530− const QList<QTouchEvent::TouchPoint> &touchPoints = event->touchPoints();
531− const QTouchEvent::TouchPoint *touchPoint = 0;
532− for (int i = 0; i < touchPoints.size(); ++i) {
533− if (touchPoints.at(i).id() == touchId) {
534− touchPoint = &touchPoints.at(i);
535− break;
536− }
537− }
538− return touchPoint;
539−}
540−
541−bool DirectionalDragAreaPrivate::movingInRightDirection() const
542−{
543− if (direction == Direction::Horizontal || direction == Direction::Vertical) {
544− return true;
545− } else {
546− QPointF movementVector(dampedScenePos.x() - previousDampedScenePos.x(),
547− dampedScenePos.y() - previousDampedScenePos.y());
548−
549− qreal scalarProjection = projectOntoDirectionVector(movementVector);
550−
551− return scalarProjection >= 0.;
552− }
553−}
554−
555−bool DirectionalDragAreaPrivate::movedFarEnoughAlongGestureAxis() const
556−{
557− if (distanceThreshold <= 0.) {
558− // distance threshold check is disabled
559− return true;
560− } else {
561− QPointF totalMovement(dampedScenePos.x() - startScenePos.x(),
562− dampedScenePos.y() - startScenePos.y());
563−
564− qreal scalarProjection = projectOntoDirectionVector(totalMovement);
565−
566− ddaDebug(" movedFarEnoughAlongGestureAxis: scalarProjection=" << scalarProjection
567− << ", distanceThreshold=" << distanceThreshold);
568−
569− if (direction == Direction::Horizontal || direction == Direction::Vertical) {
570− return qAbs(scalarProjection) > distanceThreshold;
571− } else {
572− return scalarProjection > distanceThreshold;
573− }
574− }
575−}
576−
577−bool DirectionalDragAreaPrivate::isPastMaxDistance() const
578−{
579− QPointF totalMovement(dampedScenePos.x() - startScenePos.x(),
580− dampedScenePos.y() - startScenePos.y());
581−
582− qreal squaredDistance = totalMovement.x()*totalMovement.x() + totalMovement.y()*totalMovement.y();
583− return squaredDistance > maxDistance*maxDistance;
584−}
585−
586−void DirectionalDragAreaPrivate::giveUpIfDisabledOrInvisible()
587−{
588− if (!q->isEnabled() || !q->isVisible()) {
589− if (status == Undecided) {
590− TouchRegistry::instance()->removeCandidateOwnerForTouch(touchId, q);
591− // We still wanna know when it ends for keeping the composition time window up-to-date
592− TouchRegistry::instance()->addTouchWatcher(touchId, q);
593− }
594−
595− if (status != WaitingForTouch) {
596− ddaDebug("Resetting status because got disabled or made invisible");
597− setStatus(WaitingForTouch);
598− }
599− }
600−}
601−
602−void DirectionalDragAreaPrivate::rejectGesture()
603−{
604− if (status == Undecided) {
605− ddaDebug("Rejecting gesture because it's taking too long to drag beyond the threshold.");
606−
607− TouchRegistry::instance()->removeCandidateOwnerForTouch(touchId, q);
608− // We still wanna know when it ends for keeping the composition time window up-to-date
609− TouchRegistry::instance()->addTouchWatcher(touchId, q);
610−
611− setStatus(WaitingForTouch);
612− }
613−}
614−
615−void DirectionalDragAreaPrivate::setStatus(Status newStatus)
616−{
617− if (newStatus == status)
618− return;
619−
620− Status oldStatus = status;
621−
622− if (oldStatus == Undecided) {
623− recognitionTimer->stop();
624− }
625−
626− status = newStatus;
627− Q_EMIT statusChanged(status);
628−
629− ddaDebug(statusToString(oldStatus) << " -> " << statusToString(newStatus));
630−
631− switch (newStatus) {
632− case WaitingForTouch:
633− if (oldStatus == Recognized) {
634− Q_EMIT q->draggingChanged(false);
635− }
636− Q_EMIT q->pressedChanged(false);
637− break;
638− case Undecided:
639− recognitionTimer->start();
640− Q_EMIT q->pressedChanged(true);
641− break;
642− case Recognized:
643− if (oldStatus == WaitingForTouch) { // for immediate recognition
644− Q_EMIT q->pressedChanged(true);
645− }
646− Q_EMIT q->draggingChanged(true);
647− break;
648− default:
649− // no-op
650− break;
651− }
652−}
653−
654−void DirectionalDragAreaPrivate::setPublicPos(const QPointF point)
655−{
656− bool xChanged = publicPos.x() != point.x();
657− bool yChanged = publicPos.y() != point.y();
658−
659− // Public position should not get updated while the gesture is still being recognized
660− // (ie, Undecided status).
661− Q_ASSERT(status == WaitingForTouch || status == Recognized);
662−
663− if (status == Recognized && !recognitionIsDisabled()) {
664− // When the gesture finally gets recognized, the finger will likely be
665− // reasonably far from the edge. If we made the contentX immediately
666− // follow the finger position it would be visually unpleasant as it
667− // would appear right next to the user's finger out of nowhere (ie,
668− // it would jump). Instead, we make contentX go towards the user's
669− // finger in several steps. ie., in an animated way.
670− QPointF delta = point - publicPos;
671− // the trick is not to go all the way (1.0) as it would cause a sudden jump
672− publicPos.rx() += 0.4 * delta.x();
673− publicPos.ry() += 0.4 * delta.y();
674− } else {
675− // no smoothing when initializing or if gesture recognition was immediate as there will
676− // be no jump.
677− publicPos = point;
678− }
679−
680− if (xChanged) {
681− Q_EMIT q->touchXChanged(publicPos.x());
682− if (Direction::isHorizontal(direction))
683− Q_EMIT q->distanceChanged(q->distance());
684− }
685−
686− if (yChanged) {
687− Q_EMIT q->touchYChanged(publicPos.y());
688− if (Direction::isVertical(direction))
689− Q_EMIT q->distanceChanged(q->distance());
690− }
691−}
692−
693−void DirectionalDragAreaPrivate::setPublicScenePos(const QPointF point)
694−{
695− bool xChanged = publicScenePos.x() != point.x();
696− bool yChanged = publicScenePos.y() != point.y();
697−
698− if (!xChanged && !yChanged)
699− return;
700−
701− // Public position should not get updated while the gesture is still being recognized
702− // (ie, Undecided status).
703− Q_ASSERT(status == WaitingForTouch || status == Recognized);
704−
705− qreal oldSceneDistance = sceneDistance;
706−
707− if (status == Recognized && !recognitionIsDisabled()) {
708− // When the gesture finally gets recognized, the finger will likely be
709− // reasonably far from the edge. If we made the contentX immediately
710− // follow the finger position it would be visually unpleasant as it
711− // would appear right next to the user's finger out of nowhere (ie,
712− // it would jump). Instead, we make contentX go towards the user's
713− // finger in several steps. ie., in an animated way.
714− QPointF delta = point - publicScenePos;
715− // the trick is not to go all the way (1.0) as it would cause a sudden jump
716− publicScenePos.rx() += 0.4 * delta.x();
717− publicScenePos.ry() += 0.4 * delta.y();
718− } else {
719− // no smoothing when initializing or if gesture recognition was immediate as there will
720− // be no jump.
721− publicScenePos = point;
722− }
723−
724− updateSceneDistance();
725−
726− if (oldSceneDistance != sceneDistance) {
727− Q_EMIT q->sceneDistanceChanged(sceneDistance);
728− }
729−
730− if (xChanged) {
731− Q_EMIT q->touchSceneXChanged(publicScenePos.x());
732− }
733−
734− if (yChanged) {
735− Q_EMIT q->touchSceneYChanged(publicScenePos.y());
736− }
737−}
738−
739−bool DirectionalDragAreaPrivate::isWithinTouchCompositionWindow()
740−{
741− return
742− compositionTime > 0 &&
743− !activeTouches.isEmpty() &&
744− timeSource->msecsSinceReference() <=
745− activeTouches.mostRecentStartTime() + (qint64)compositionTime;
746−}
747−
748−void DirectionalDragArea::itemChange(ItemChange change, const ItemChangeData &value)
749−{
750− if (change == QQuickItem::ItemSceneChange) {
751− if (value.window != nullptr) {
752− value.window->installEventFilter(TouchRegistry::instance());
753−
754− // TODO: Handle window->screen() changes (ie window changing screens)
755−
756− qreal pixelsPerInch = value.window->screen()->physicalDotsPerInch();
757− if (pixelsPerInch < 0) {
758− // It can return garbage when run in a XVFB server (Virtual Framebuffer 'fake' X server)
759− pixelsPerInch = 72;
760− }
761−
762− d->setPixelsPerMm(pixelsPerInch / 25.4);
763− }
764− }
765−}
766−
767−void DirectionalDragAreaPrivate::setPixelsPerMm(qreal pixelsPerMm)
768−{
769− dampedScenePos.setMaxDelta(1. * pixelsPerMm);
770− setDistanceThreshold(4. * pixelsPerMm);
771− maxDistance = 10. * pixelsPerMm;
772−}
773−
774−//************************** ActiveTouchesInfo **************************
775−
776−ActiveTouchesInfo::ActiveTouchesInfo(const SharedTimeSource &timeSource)
777− : m_timeSource(timeSource)
778−{
779−}
780−
781−void ActiveTouchesInfo::update(QTouchEvent *event)
782−{
783− if (!(event->touchPointStates() & (Qt::TouchPointPressed | Qt::TouchPointReleased))) {
784− // nothing to update
785− #if ACTIVETOUCHESINFO_DEBUG
786− qDebug("[DDA::ActiveTouchesInfo] Nothing to Update");
787− #endif
788− return;
789− }
790−
791− const QList<QTouchEvent::TouchPoint> &touchPoints = event->touchPoints();
792− for (int i = 0; i < touchPoints.count(); ++i) {
793− const QTouchEvent::TouchPoint &touchPoint = touchPoints.at(i);
794− if (touchPoint.state() == Qt::TouchPointPressed) {
795− addTouchPoint(touchPoint.id());
796− } else if (touchPoint.state() == Qt::TouchPointReleased) {
797− removeTouchPoint(touchPoint.id());
798− }
799− }
800−}
801−
802−#if ACTIVETOUCHESINFO_DEBUG
803−QString ActiveTouchesInfo::toString()
804−{
805− QString string = "(";
806−
807− {
808− QTextStream stream(&string);
809− m_touchInfoPool.forEach([&](Pool<ActiveTouchInfo>::Iterator &touchInfo) {
810− stream << "(id=" << touchInfo->id << ",startTime=" << touchInfo->startTime << ")";
811− return true;
812− });
813− }
814−
815− string.append(")");
816−
817− return string;
818−}
819−#endif // ACTIVETOUCHESINFO_DEBUG
820−
821−void ActiveTouchesInfo::addTouchPoint(int touchId)
822−{
823− ActiveTouchInfo &activeTouchInfo = m_touchInfoPool.getEmptySlot();
824− activeTouchInfo.id = touchId;
825− activeTouchInfo.startTime = m_timeSource->msecsSinceReference();
826−
827− #if ACTIVETOUCHESINFO_DEBUG
828− qDebug() << "[DDA::ActiveTouchesInfo]" << qPrintable(toString());
829− #endif
830−}
831−
832−qint64 ActiveTouchesInfo::touchStartTime(int touchId)
833−{
834− qint64 result = -1;
835−
836− m_touchInfoPool.forEach([&](Pool<ActiveTouchInfo>::Iterator &touchInfo) {
837− if (touchId == touchInfo->id) {
838− result = touchInfo->startTime;
839− return false;
840− } else {
841− return true;
842− }
843− });
844−
845− Q_ASSERT(result != -1);
846− return result;
847−}
848−
849−void ActiveTouchesInfo::removeTouchPoint(int touchId)
850−{
851− m_touchInfoPool.forEach([&](Pool<ActiveTouchInfo>::Iterator &touchInfo) {
852− if (touchId == touchInfo->id) {
853− m_touchInfoPool.freeSlot(touchInfo);
854− return false;
855− } else {
856− return true;
857− }
858− });
859−
860− #if ACTIVETOUCHESINFO_DEBUG
861− qDebug() << "[DDA::ActiveTouchesInfo]" << qPrintable(toString());
862− #endif
863−}
864−
865−qint64 ActiveTouchesInfo::mostRecentStartTime()
866−{
867− Q_ASSERT(!m_touchInfoPool.isEmpty());
868−
869− qint64 highestStartTime = -1;
870−
871− m_touchInfoPool.forEach([&](Pool<ActiveTouchInfo>::Iterator &activeTouchInfo) {
872− if (activeTouchInfo->startTime > highestStartTime) {
873− highestStartTime = activeTouchInfo->startTime;
874− }
875− return true;
876− });
877−
878− return highestStartTime;
879−}
880−
881−void DirectionalDragAreaPrivate::updateSceneDirectionVector()
882−{
883− QPointF localOrigin(0., 0.);
884− QPointF localDirection;
885− switch (direction) {
886− case Direction::Upwards:
887− localDirection.rx() = 0.;
888− localDirection.ry() = -1.;
889− break;
890− case Direction::Downwards:
891− case Direction::Vertical:
892− localDirection.rx() = 0.;
893− localDirection.ry() = 1;
894− break;
895− case Direction::Leftwards:
896− localDirection.rx() = -1.;
897− localDirection.ry() = 0.;
898− break;
899− default: // Direction::Rightwards || Direction.Horizontal
900− localDirection.rx() = 1.;
901− localDirection.ry() = 0.;
902− break;
903− }
904− QPointF sceneOrigin = q->mapToScene(localOrigin);
905− QPointF sceneDirection = q->mapToScene(localDirection);
906− sceneDirectionVector = sceneDirection - sceneOrigin;
907−}
908−
909−qreal DirectionalDragAreaPrivate::projectOntoDirectionVector(const QPointF sceneVector) const
910−{
911− // same as dot product as sceneDirectionVector is a unit vector
912− return sceneVector.x() * sceneDirectionVector.x() +
913− sceneVector.y() * sceneDirectionVector.y();
914−}
915−
916−DirectionalDragAreaPrivate::DirectionalDragAreaPrivate(DirectionalDragArea *q)
917− : q(q)
918− , status(WaitingForTouch)
919− , sceneDistance(0)
920− , touchId(-1)
921− , direction(Direction::Rightwards)
922− , distanceThreshold(0)
923− , distanceThresholdSquared(0.)
924− , maxTime(400)
925− , compositionTime(60)
926− , immediateRecognition(false)
927− , recognitionTimer(nullptr)
928− , timeSource(new RealTimeSource)
929− , activeTouches(timeSource)
930− , monitorOnly(false)
931−{
932−}
plugins/Ubuntu/Gestures/DirectionalDragArea.hdeleted−143
@@ -1,143 +0,0 @@
1−/*
2− * Copyright (C) 2013,2014 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−#ifndef DIRECTIONAL_DRAG_AREA_H
18−#define DIRECTIONAL_DRAG_AREA_H
19−
20−#include <QtQuick/QQuickItem>
21−#include "UbuntuGesturesQmlGlobal.h"
22−#include "Damper.h"
23−#include "Direction.h"
24−
25−// lib UbuntuGestures
26−#include <Pool.h>
27−#include <Timer.h>
28−
29−class TouchOwnershipEvent;
30−class UnownedTouchEvent;
31−class DirectionalDragAreaPrivate;
32−
33−/*
34− An area that detects axis-aligned single-finger drag gestures
35−
36− If a drag deviates too much from the components' direction recognition will
37− fail. It will also fail if the drag or flick is too short. E.g. a noisy or
38− fidgety click
39−
40− See doc/DirectionalDragArea.svg
41− */
42−class UBUNTUGESTURESQML_EXPORT DirectionalDragArea : public QQuickItem {
43− Q_OBJECT
44−
45− // The direction in which the gesture should move in order to be recognized.
46− Q_PROPERTY(Direction::Type direction READ direction WRITE setDirection NOTIFY directionChanged)
47−
48− // The distance travelled by the finger along the axis specified by
49− // DirectionalDragArea's direction.
50− Q_PROPERTY(qreal distance READ distance NOTIFY distanceChanged)
51−
52− // The distance travelled by the finger along the axis specified by
53− // DirectionalDragArea's direction in scene coordinates
54− Q_PROPERTY(qreal sceneDistance READ sceneDistance NOTIFY sceneDistanceChanged)
55−
56− // Position of the touch point performing the drag relative to this item.
57− Q_PROPERTY(qreal touchX READ touchX NOTIFY touchXChanged)
58− Q_PROPERTY(qreal touchY READ touchY NOTIFY touchYChanged)
59−
60− // Position of the touch point performing the drag, in scene's coordinate system
61− Q_PROPERTY(qreal touchSceneX READ touchSceneX NOTIFY touchSceneXChanged)
62− Q_PROPERTY(qreal touchSceneY READ touchSceneY NOTIFY touchSceneYChanged)
63−
64− // Whether a drag gesture is taking place
65− Q_PROPERTY(bool dragging READ dragging NOTIFY draggingChanged)
66−
67− // Whether the drag area is pressed.
68− Q_PROPERTY(bool pressed READ pressed NOTIFY pressedChanged)
69−
70− // Whether a gesture should be Recognized as soon a touch lands on the area.
71− // With this property enabled it will work pretty much like a MultiPointTouchArea,
72− // just with a different API.
73− //
74− // It's false by default. In most cases you will not want that enabled.
75− Q_PROPERTY(bool immediateRecognition
76− READ immediateRecognition
77− WRITE setImmediateRecognition
78− NOTIFY immediateRecognitionChanged)
79−
80− // Whether we are merely monitoring touch events (in which case, we don't
81− // claim ownership of the touch).
82− Q_PROPERTY(bool monitorOnly READ monitorOnly WRITE setMonitorOnly NOTIFY monitorOnlyChanged)
83−
84− Q_ENUMS(Direction)
85−public:
86− DirectionalDragArea(QQuickItem *parent = 0);
87−
88− Direction::Type direction() const;
89− void setDirection(Direction::Type);
90−
91− qreal distance() const;
92− qreal sceneDistance() const;
93−
94− qreal touchX() const;
95− qreal touchY() const;
96−
97− qreal touchSceneX() const;
98− qreal touchSceneY() const;
99−
100− bool dragging() const;
101−
102− bool pressed() const;
103−
104− bool immediateRecognition() const;
105− void setImmediateRecognition(bool enabled);
106−
107− bool monitorOnly() const;
108− void setMonitorOnly(bool monitorOnly);
109−
110− bool event(QEvent *e) override;
111−
112− /*
113− In qmltests, sequences of touch events are sent all at once, unlike in "real life".
114− Also qmltests might run really slowly, e.g. when run from inside virtual machines.
115− Thus to remove a variable that qmltests cannot really control, namely time, this
116− function removes all constraints that are sensible to elapsed time.
117−
118− This effectively makes the DirectionalDragArea easier to fool.
119− */
120− Q_INVOKABLE void removeTimeConstraints();
121−
122−Q_SIGNALS:
123− void directionChanged(Direction::Type direction);
124− void draggingChanged(bool value);
125− void pressedChanged(bool value);
126− void distanceChanged(qreal value);
127− void sceneDistanceChanged(qreal value);
128− void touchXChanged(qreal value);
129− void touchYChanged(qreal value);
130− void touchSceneXChanged(qreal value);
131− void touchSceneYChanged(qreal value);
132− void immediateRecognitionChanged(bool value);
133− void monitorOnlyChanged(bool value);
134−
135−protected:
136− void touchEvent(QTouchEvent *event) override;
137− void itemChange(ItemChange change, const ItemChangeData &value) override;
138−
139−public: // so tests can access it
140− DirectionalDragAreaPrivate *d;
141−};
142−
143−#endif // DIRECTIONAL_DRAG_AREA_H
plugins/Ubuntu/Gestures/DirectionalDragArea_p.hdeleted−169
@@ -1,169 +0,0 @@
1−/*
2− * Copyright (C) 2015 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−#ifndef DIRECTIONAL_DRAG_AREA_PRIV_H
18−#define DIRECTIONAL_DRAG_AREA_PRIV_H
19−
20−// Information about an active touch point
21−struct UBUNTUGESTURESQML_EXPORT ActiveTouchInfo {
22− ActiveTouchInfo() : id(-1), startTime(-1) {}
23− bool isValid() const { return id != -1; }
24− void reset() { id = -1; }
25− int id;
26− qint64 startTime;
27−};
28−class UBUNTUGESTURESQML_EXPORT ActiveTouchesInfo {
29−public:
30− ActiveTouchesInfo(const UbuntuGestures::SharedTimeSource &timeSource);
31− void update(QTouchEvent *event);
32− qint64 touchStartTime(int id);
33− bool isEmpty() const { return m_touchInfoPool.isEmpty(); }
34− qint64 mostRecentStartTime();
35− UbuntuGestures::SharedTimeSource m_timeSource;
36−private:
37− void addTouchPoint(int touchId);
38− void removeTouchPoint(int touchId);
39− #if ACTIVETOUCHESINFO_DEBUG
40− QString toString();
41− #endif
42−
43− Pool<ActiveTouchInfo> m_touchInfoPool;
44−};
45−
46−class UBUNTUGESTURESQML_EXPORT DirectionalDragAreaPrivate : public QObject {
47− Q_OBJECT
48−
49− Q_ENUMS(Status)
50−public:
51− DirectionalDragAreaPrivate(DirectionalDragArea *q);
52−
53−public Q_SLOTS:
54− void giveUpIfDisabledOrInvisible();
55− void rejectGesture();
56−
57−public:
58− // Describes the state of the directional drag gesture.
59− enum Status {
60− // Waiting for a new touch point to land on this area. No gesture is being processed
61− // or tracked.
62− WaitingForTouch,
63−
64− // A touch point has landed on this area but it's not know yet whether it is
65− // performing a drag in the correct direction.
66− // If it's decided that the touch point is not performing a directional drag gesture,
67− // it will be rejected/ignored and status will return to WaitingForTouch.
68− Undecided, //Recognizing,
69−
70− // There's a touch point in this area and it performed a drag in the correct
71− // direction.
72− //
73− // Once recognized, the gesture state will move back to WaitingForTouch only once
74− // that touch point ends. The gesture will remain in the Recognized state even if
75− // the touch point starts moving in other directions or halts.
76− Recognized,
77− };
78−
79− void touchEvent_absent(QTouchEvent *event);
80− void touchEvent_undecided(QTouchEvent *event);
81− void touchEvent_recognized(QTouchEvent *event);
82− bool movingInRightDirection() const;
83− bool movedFarEnoughAlongGestureAxis() const;
84− bool isPastMaxDistance() const;
85− const QTouchEvent::TouchPoint *fetchTargetTouchPoint(QTouchEvent *event);
86− void setStatus(Status newStatus);
87− void setPublicPos(const QPointF point);
88− void setPublicScenePos(const QPointF point);
89− bool isWithinTouchCompositionWindow();
90− void updateSceneDirectionVector();
91− // returns the scalar projection between the given vector (in scene coordinates)
92− // and m_sceneDirectionVector
93− qreal projectOntoDirectionVector(const QPointF sceneVector) const;
94− void touchOwnershipEvent(TouchOwnershipEvent *event);
95− void unownedTouchEvent(UnownedTouchEvent *event);
96− void unownedTouchEvent_undecided(UnownedTouchEvent *unownedTouchEvent);
97− void watchPressedTouchPoints(const QList<QTouchEvent::TouchPoint> &touchPoints);
98− bool recognitionIsDisabled() const;
99− bool sanityCheckRecognitionProperties();
100− void updateSceneDistance();
101− void setMaxTime(int value);
102− void setDistanceThreshold(qreal value);
103− void setPixelsPerMm(qreal pixelsPerMm);
104− QString objectName() const { return q->objectName(); }
105−
106− // Replaces the existing Timer with the given one.
107− //
108− // Useful for providing a fake timer when testing.
109− void setRecognitionTimer(UbuntuGestures::AbstractTimer *timer);
110−
111− // Useful for testing, where a fake time source can be supplied
112− void setTimeSource(const UbuntuGestures::SharedTimeSource &timeSource);
113−
114− DirectionalDragArea *q;
115−
116− // The current status of the directional drag gesture area.
117− Status status;
118−
119− QPointF startPos;
120− QPointF startScenePos;
121− qreal sceneDistance;
122− int touchId;
123−
124− // The touch position exposed in the public API.
125− // It only starts to move once the gesture gets recognized.
126− QPointF publicPos;
127− QPointF publicScenePos;
128−
129− // A movement damper is used in some of the gesture recognition calculations
130− // to get rid of noise or small oscillations in the touch position.
131− DampedPointF dampedScenePos;
132− QPointF previousDampedScenePos;
133−
134− // Unit vector in scene coordinates describing the direction of the gesture recognition
135− QPointF sceneDirectionVector;
136−
137− Direction::Type direction;
138−
139− // How far a touch point has to move from its initial position along the gesture axis in order
140− // for it to be recognized as a directional drag.
141− qreal distanceThreshold;
142− qreal distanceThresholdSquared; // it's pow(distanceThreshold, 2)
143−
144− // Maximum time (in milliseconds) the gesture can take to go beyond the distance threshold
145− int maxTime;
146−
147− // Maximum distance the gesture can go without crossing the axis-aligned distance threshold
148− qreal maxDistance;
149−
150− // Maximum time (in milliseconds) after the start of a given touch point where
151− // subsequent touch starts are grouped with the first one into an N-touches gesture
152− // (e.g. a two-fingers tap or drag).
153− int compositionTime;
154−
155− bool immediateRecognition;
156−
157− UbuntuGestures::AbstractTimer *recognitionTimer;
158−
159− UbuntuGestures::SharedTimeSource timeSource;
160−
161− ActiveTouchesInfo activeTouches;
162−
163− bool monitorOnly;
164−
165−Q_SIGNALS:
166− void statusChanged(Status value);
167−};
168−
169−#endif // DIRECTIONAL_DRAG_AREA_PRIV_H
plugins/Ubuntu/Gestures/FloatingFlickable.cppdeleted−150
@@ -1,150 +0,0 @@
1−/*
2− * Copyright (C) 2015 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−#include "FloatingFlickable.h"
18−
19−#include <private/qquickflickable_p.h>
20−#include "DirectionalDragArea.h"
21−
22−#include <QDebug>
23−
24−FloatingFlickable::FloatingFlickable(QQuickItem *parent)
25− : QQuickItem(parent)
26− , m_mousePressed(false)
27−{
28− m_dragArea = new DirectionalDragArea(this);
29− m_dragArea->setWidth(width());
30− m_dragArea->setHeight(height());
31− m_dragArea->setDirection(Direction::Horizontal);
32− connect(m_dragArea, &DirectionalDragArea::touchXChanged,
33− this, &FloatingFlickable::onDragAreaTouchPosChanged);
34− connect(m_dragArea, &DirectionalDragArea::touchYChanged,
35− this, &FloatingFlickable::onDragAreaTouchPosChanged);
36− connect(m_dragArea, &DirectionalDragArea::draggingChanged,
37− this, &FloatingFlickable::onDragAreaDraggingChanged);
38− connect(m_dragArea, &DirectionalDragArea::directionChanged, this, &FloatingFlickable::directionChanged);
39−
40− m_flickable = new QQuickFlickable(this);
41− m_flickable->setEnabled(false);
42− m_flickable->setWidth(width());
43− m_flickable->setHeight(height());
44− connect(m_flickable, &QQuickFlickable::contentWidthChanged, this, &FloatingFlickable::contentWidthChanged);
45− connect(m_flickable, &QQuickFlickable::contentHeightChanged, this, &FloatingFlickable::contentHeightChanged);
46− connect(m_flickable, &QQuickFlickable::contentXChanged, this, &FloatingFlickable::contentXChanged);
47− connect(m_flickable, &QQuickFlickable::contentYChanged, this, &FloatingFlickable::contentYChanged);
48−
49− connect(this, &QQuickItem::widthChanged, this, &FloatingFlickable::updateChildrenWidth);
50− connect(this, &QQuickItem::heightChanged, this, &FloatingFlickable::updateChildrenHeight);
51−}
52−
53−qreal FloatingFlickable::contentWidth() const
54−{
55− return m_flickable->contentWidth();
56−}
57−
58−void FloatingFlickable::setContentWidth(qreal contentWidth)
59−{
60− m_flickable->setContentWidth(contentWidth);
61−}
62−
63−qreal FloatingFlickable::contentHeight() const
64−{
65− return m_flickable->contentHeight();
66−}
67−
68−void FloatingFlickable::setContentHeight(qreal contentHeight)
69−{
70− m_flickable->setContentHeight(contentHeight);
71−}
72−
73−qreal FloatingFlickable::contentX() const
74−{
75− return m_flickable->contentX();
76−}
77−
78−void FloatingFlickable::setContentX(qreal contentX)
79−{
80− m_flickable->setContentX(contentX);
81−}
82−
83−qreal FloatingFlickable::contentY() const
84−{
85− return m_flickable->contentY();
86−}
87−
88−void FloatingFlickable::setContentY(qreal contentY)
89−{
90− m_flickable->setContentY(contentY);
91−}
92−
93−Direction::Type FloatingFlickable::direction() const
94−{
95− return m_dragArea->direction();
96−}
97−
98−void FloatingFlickable::setDirection(Direction::Type direction)
99−{
100− m_dragArea->setDirection(direction);
101− if (Direction::isHorizontal(direction)) {
102− m_flickable->setFlickableDirection(QQuickFlickable::HorizontalFlick);
103− } else {
104− m_flickable->setFlickableDirection(QQuickFlickable::VerticalFlick);
105− }
106−}
107−
108−void FloatingFlickable::updateChildrenWidth()
109−{
110− m_dragArea->setWidth(width());
111− m_flickable->setWidth(width());
112−}
113−
114−void FloatingFlickable::updateChildrenHeight()
115−{
116− m_dragArea->setHeight(height());
117− m_flickable->setHeight(height());
118−}
119−
120−void FloatingFlickable::onDragAreaTouchPosChanged(qreal)
121−{
122− if (m_mousePressed) {
123− QMouseEvent mouseEvent(QEvent::MouseMove,
124− QPointF(m_dragArea->touchX(),m_dragArea->touchY()),
125− Qt::NoButton, Qt::LeftButton, Qt::NoModifier);
126−
127− QCoreApplication::sendEvent(m_flickable, &mouseEvent);
128−
129− }
130−}
131−
132−void FloatingFlickable::onDragAreaDraggingChanged(bool dragging)
133−{
134− if (dragging && !m_mousePressed) {
135− QMouseEvent mouseEvent(QEvent::MouseButtonPress,
136− QPointF(m_dragArea->touchX(),m_dragArea->touchY()),
137− Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
138−
139− QCoreApplication::sendEvent(m_flickable, &mouseEvent);
140− m_mousePressed = true;
141−
142− } else if (!dragging && m_mousePressed) {
143− QMouseEvent mouseEvent(QEvent::MouseButtonRelease,
144− QPointF(m_dragArea->touchX(),m_dragArea->touchY()),
145− Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
146−
147− QCoreApplication::sendEvent(m_flickable, &mouseEvent);
148− m_mousePressed = false;
149− }
150−}
plugins/Ubuntu/Gestures/FloatingFlickable.hdeleted−86
@@ -1,86 +0,0 @@
1−/*
2− * Copyright (C) 2015 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−#ifndef FLOATING_FLICKABLE_H
18−#define FLOATING_FLICKABLE_H
19−
20−#include <QQuickItem>
21−#include "UbuntuGesturesQmlGlobal.h"
22−#include "Direction.h"
23−
24−class DirectionalDragArea;
25−class QQuickFlickable;
26−
27−/*
28− A Flickable that can be put in front of the item to be flicked and
29− still have the item-to-be-flicked receive input events that are not flicks.
30−
31− Ie, it's a Flickable that, input-wise, is transparent to non-flick gestures.
32−
33− With a regular Flickable you would have to make the item-to-be-flicked a child
34− of Flicakble to achieve the same result. FloatingFlickable has no such requirement
35− or limitation.
36− */
37−class UBUNTUGESTURESQML_EXPORT FloatingFlickable : public QQuickItem {
38− Q_OBJECT
39−
40− Q_PROPERTY(qreal contentWidth READ contentWidth WRITE setContentWidth NOTIFY contentWidthChanged)
41− Q_PROPERTY(qreal contentHeight READ contentHeight WRITE setContentHeight NOTIFY contentHeightChanged)
42− Q_PROPERTY(qreal contentX READ contentX WRITE setContentX NOTIFY contentXChanged)
43− Q_PROPERTY(qreal contentY READ contentY WRITE setContentY NOTIFY contentYChanged)
44−
45− Q_PROPERTY(Direction::Type direction READ direction WRITE setDirection NOTIFY directionChanged)
46−
47−Q_SIGNALS:
48− void contentWidthChanged();
49− void contentHeightChanged();
50− void contentXChanged();
51− void contentYChanged();
52− void directionChanged();
53−
54−public:
55− FloatingFlickable(QQuickItem *parent = nullptr);
56−
57− qreal contentWidth() const;
58− void setContentWidth(qreal contentWidth);
59−
60− qreal contentHeight() const;
61− void setContentHeight(qreal contentHeight);
62−
63− qreal contentX() const;
64− void setContentX(qreal contentX);
65−
66− qreal contentY() const;
67− void setContentY(qreal contentY);
68−
69− Direction::Type direction() const;
70− void setDirection(Direction::Type);
71−
72−private Q_SLOTS:
73− void updateChildrenWidth();
74− void updateChildrenHeight();
75− void onDragAreaTouchPosChanged(qreal);
76− void onDragAreaDraggingChanged(bool value);
77−
78−private:
79− DirectionalDragArea *m_dragArea;
80− QQuickFlickable *m_flickable;
81− bool m_mousePressed;
82−
83− friend class tst_FloatingFlickable;
84−};
85−
86−#endif // FLOATING_FLICKABLE_H
plugins/Ubuntu/Gestures/Gestures.qmltypesdeleted−209
@@ -1,209 +0,0 @@
1−import QtQuick.tooling 1.1
2−
3−// This file describes the plugin-supplied types contained in the library.
4−// It is used for QML tooling purposes only.
5−//
6−// This file was auto-generated by:
7−// 'qmlplugindump -notrelocatable Ubuntu.Gestures 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "AxisVelocityCalculator"
12− prototype: "QObject"
13− exports: ["Ubuntu.Gestures/AxisVelocityCalculator 0.1"]
14− exportMetaObjectRevisions: [0]
15− Property { name: "trackedPosition"; type: "double" }
16− Signal {
17− name: "trackedPositionChanged"
18− Parameter { name: "value"; type: "double" }
19− }
20− Method { name: "calculate"; type: "double" }
21− Method { name: "reset" }
22− }
23− Component {
24− name: "Direction"
25− prototype: "QObject"
26− exports: ["Ubuntu.Gestures/Direction 0.1"]
27− isCreatable: false
28− isSingleton: true
29− exportMetaObjectRevisions: [0]
30− Enum {
31− name: "Type"
32− values: {
33− "Rightwards": 0,
34− "Leftwards": 1,
35− "Downwards": 2,
36− "Upwards": 3,
37− "Horizontal": 4,
38− "Vertical": 5
39− }
40− }
41− Method {
42− name: "isHorizontal"
43− type: "bool"
44− Parameter { name: "type"; type: "Direction::Type" }
45− }
46− Method {
47− name: "isVertical"
48− type: "bool"
49− Parameter { name: "type"; type: "Direction::Type" }
50− }
51− Method {
52− name: "isPositive"
53− type: "bool"
54− Parameter { name: "type"; type: "Direction::Type" }
55− }
56− }
57− Component {
58− name: "DirectionalDragArea"
59− defaultProperty: "data"
60− prototype: "QQuickItem"
61− exports: ["Ubuntu.Gestures/DirectionalDragArea 0.1"]
62− exportMetaObjectRevisions: [0]
63− Property { name: "direction"; type: "Direction::Type" }
64− Property { name: "distance"; type: "double"; isReadonly: true }
65− Property { name: "sceneDistance"; type: "double"; isReadonly: true }
66− Property { name: "touchX"; type: "double"; isReadonly: true }
67− Property { name: "touchY"; type: "double"; isReadonly: true }
68− Property { name: "touchSceneX"; type: "double"; isReadonly: true }
69− Property { name: "touchSceneY"; type: "double"; isReadonly: true }
70− Property { name: "dragging"; type: "bool"; isReadonly: true }
71− Property { name: "pressed"; type: "bool"; isReadonly: true }
72− Property { name: "immediateRecognition"; type: "bool" }
73− Signal {
74− name: "directionChanged"
75− Parameter { name: "direction"; type: "Direction::Type" }
76− }
77− Signal {
78− name: "draggingChanged"
79− Parameter { name: "value"; type: "bool" }
80− }
81− Signal {
82− name: "pressedChanged"
83− Parameter { name: "value"; type: "bool" }
84− }
85− Signal {
86− name: "distanceChanged"
87− Parameter { name: "value"; type: "double" }
88− }
89− Signal {
90− name: "sceneDistanceChanged"
91− Parameter { name: "value"; type: "double" }
92− }
93− Signal {
94− name: "touchXChanged"
95− Parameter { name: "value"; type: "double" }
96− }
97− Signal {
98− name: "touchYChanged"
99− Parameter { name: "value"; type: "double" }
100− }
101− Signal {
102− name: "touchSceneXChanged"
103− Parameter { name: "value"; type: "double" }
104− }
105− Signal {
106− name: "touchSceneYChanged"
107− Parameter { name: "value"; type: "double" }
108− }
109− Signal {
110− name: "immediateRecognitionChanged"
111− Parameter { name: "value"; type: "bool" }
112− }
113− Method { name: "removeTimeConstraints" }
114− }
115− Component {
116− name: "FloatingFlickable"
117− defaultProperty: "data"
118− prototype: "QQuickItem"
119− exports: ["Ubuntu.Gestures/FloatingFlickable 0.1"]
120− exportMetaObjectRevisions: [0]
121− Property { name: "contentWidth"; type: "double" }
122− Property { name: "contentHeight"; type: "double" }
123− Property { name: "contentX"; type: "double" }
124− Property { name: "contentY"; type: "double" }
125− Property { name: "direction"; type: "Direction::Type" }
126− }
127− Component {
128− name: "GestureTouchPoint"
129− prototype: "QObject"
130− exports: ["Ubuntu.Gestures/GestureTouchPoint 0.1"]
131− isCreatable: false
132− exportMetaObjectRevisions: [0]
133− Property { name: "pointId"; type: "int"; isReadonly: true }
134− Property { name: "pressed"; type: "bool"; isReadonly: true }
135− Property { name: "x"; type: "double"; isReadonly: true }
136− Property { name: "y"; type: "double"; isReadonly: true }
137− Property { name: "dragging"; type: "bool"; isReadonly: true }
138− }
139− Component {
140− name: "PressedOutsideNotifier"
141− defaultProperty: "data"
142− prototype: "QQuickItem"
143− exports: ["Ubuntu.Gestures/PressedOutsideNotifier 0.1"]
144− exportMetaObjectRevisions: [0]
145− Signal { name: "pressedOutside" }
146− }
147− Component {
148− name: "TouchGate"
149− defaultProperty: "data"
150− prototype: "QQuickItem"
151− exports: ["Ubuntu.Gestures/TouchGate 0.1"]
152− exportMetaObjectRevisions: [0]
153− Property { name: "targetItem"; type: "QQuickItem"; isPointer: true }
154− Signal {
155− name: "targetItemChanged"
156− Parameter { name: "item"; type: "QQuickItem"; isPointer: true }
157− }
158− }
159− Component {
160− name: "TouchGestureArea"
161− defaultProperty: "data"
162− prototype: "QQuickItem"
163− exports: ["Ubuntu.Gestures/TouchGestureArea 0.1"]
164− exportMetaObjectRevisions: [0]
165− Enum {
166− name: "Status"
167− values: {
168− "WaitingForTouch": 0,
169− "Undecided": 1,
170− "Recognized": 2,
171− "Rejected": 3
172− }
173− }
174− Property { name: "touchPoints"; type: "GestureTouchPoint"; isList: true; isReadonly: true }
175− Property { name: "dragging"; type: "bool"; isReadonly: true }
176− Property { name: "minimumTouchPoints"; type: "int" }
177− Property { name: "maximumTouchPoints"; type: "int" }
178− Signal {
179− name: "statusChanged"
180− Parameter { name: "status"; type: "Status" }
181− }
182− Signal { name: "touchPointsUpdated" }
183− Signal {
184− name: "draggingChanged"
185− Parameter { name: "dragging"; type: "bool" }
186− }
187− Signal {
188− name: "minimumTouchPointsChanged"
189− Parameter { name: "value"; type: "bool" }
190− }
191− Signal {
192− name: "maximumTouchPointsChanged"
193− Parameter { name: "value"; type: "bool" }
194− }
195− Signal {
196− name: "pressed"
197− Parameter { name: "points"; type: "QList<QObject*>" }
198− }
199− Signal {
200− name: "released"
201− Parameter { name: "points"; type: "QList<QObject*>" }
202− }
203− Signal {
204− name: "updated"
205− Parameter { name: "points"; type: "QList<QObject*>" }
206− }
207− Signal { name: "clicked" }
208− }
209−}
plugins/Ubuntu/Gestures/MouseEventGenerator.cppnew file+64
@@ -0,0 +1,64 @@
1+/*
2+ * Copyright (C) 2015-2016 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "MouseEventGenerator.h"
18+
19+#include <QCoreApplication>
20+#include <QMouseEvent>
21+#include <QQuickItem>
22+
23+MouseEventGenerator::MouseEventGenerator(QObject *parent)
24+ : QObject(parent)
25+{
26+}
27+
28+void MouseEventGenerator::move(const QPointF position)
29+{
30+ if (!m_mousePressed || !m_targetItem) {
31+ return;
32+ }
33+
34+ QMouseEvent mouseEvent(QEvent::MouseMove,
35+ QPointF(position.x(), position.y()), Qt::NoButton, Qt::LeftButton, Qt::NoModifier);
36+
37+ QCoreApplication::sendEvent(m_targetItem, &mouseEvent);
38+}
39+
40+void MouseEventGenerator::press(const QPointF position)
41+{
42+ if (m_mousePressed || !m_targetItem) {
43+ return;
44+ }
45+
46+ QMouseEvent mouseEvent(QEvent::MouseButtonPress,
47+ QPointF(position.x(), position.y()), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
48+
49+ QCoreApplication::sendEvent(m_targetItem, &mouseEvent);
50+ m_mousePressed = true;
51+}
52+
53+void MouseEventGenerator::release(const QPointF position)
54+{
55+ if (!m_mousePressed || !m_targetItem) {
56+ return;
57+ }
58+
59+ QMouseEvent mouseEvent(QEvent::MouseButtonRelease,
60+ QPointF(position.x(), position.y()), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
61+
62+ QCoreApplication::sendEvent(m_targetItem, &mouseEvent);
63+ m_mousePressed = false;
64+}
plugins/Ubuntu/Gestures/MouseEventGenerator.hnew file+48
@@ -0,0 +1,48 @@
1+/*
2+ * Copyright (C) 2015-2016 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef MOUSEEVENTGENERATOR_H
18+#define MOUSEEVENTGENERATOR_H
19+
20+#include <QObject>
21+#include <QPointF>
22+
23+#include "UbuntuGesturesQmlGlobal.h"
24+
25+class QQuickItem;
26+
27+class UBUNTUGESTURESQML_EXPORT MouseEventGenerator : public QObject {
28+ Q_OBJECT
29+ Q_PROPERTY(QQuickItem* targetItem MEMBER m_targetItem NOTIFY targetItemChanged)
30+
31+public:
32+ MouseEventGenerator(QObject *parent = nullptr);
33+
34+ Q_INVOKABLE void move(const QPointF position);
35+ Q_INVOKABLE void press(const QPointF position);
36+ Q_INVOKABLE void release(const QPointF position);
37+
38+Q_SIGNALS:
39+ void targetItemChanged(QQuickItem *);
40+
41+private:
42+ bool m_mousePressed {false};
43+ QQuickItem *m_targetItem {nullptr};
44+
45+ friend class tst_FloatingFlickable;
46+};
47+
48+#endif // MOUSEEVENTGENERATOR_H
plugins/Ubuntu/Gestures/PressedOutsideNotifier.h+1−1
@@ -23,7 +23,7 @@
23#include <QPointer>
23#include <QPointer>
24#include <QTimer>
24#include <QTimer>
25
25
26−#include "UbuntuGesturesGlobal.h"
26+#include <ubuntugesturesglobal.h>
27
27
28/*
28/*
29 Notifies when a point, mouse or touch, is pressed outside its area.
29 Notifies when a point, mouse or touch, is pressed outside its area.
plugins/Ubuntu/Gestures/TouchDispatcher.cpp+1−5
@@ -19,11 +19,7 @@
19#include <QGuiApplication>
19#include <QGuiApplication>
20#include <QScopedPointer>
20#include <QScopedPointer>
21#include <QStyleHints>
21#include <QStyleHints>
22−
23−#pragma GCC diagnostic push
24−#pragma GCC diagnostic ignored "-pedantic"
25#include <private/qquickitem_p.h>
22#include <private/qquickitem_p.h>
26−#pragma GCC diagnostic pop
27
23
28#define TOUCHDISPATCHER_DEBUG 0
24#define TOUCHDISPATCHER_DEBUG 0
29
25
@@ -225,7 +221,7 @@ void TouchDispatcher::dispatchAsMouse(
225 QEvent::Type eventType;
221 QEvent::Type eventType;
226 if (touchMouse->state() == Qt::TouchPointPressed) {
222 if (touchMouse->state() == Qt::TouchPointPressed) {
227 eventType = QEvent::MouseButtonPress;
223 eventType = QEvent::MouseButtonPress;
228− } if (touchMouse->state() == Qt::TouchPointReleased) {
224+ } else if (touchMouse->state() == Qt::TouchPointReleased) {
229 eventType = QEvent::MouseButtonRelease;
225 eventType = QEvent::MouseButtonRelease;
230 m_touchMouseId = -1;
226 m_touchMouseId = -1;
231 } else {
227 } else {
plugins/Ubuntu/Gestures/TouchGate.cpp+2−2
@@ -20,8 +20,8 @@
20#include <QDebug>
20#include <QDebug>
21#include <QQuickWindow>
21#include <QQuickWindow>
22
22
23−#include <TouchOwnershipEvent.h>
23+#include <TouchOwnershipEvent>
24−#include <TouchRegistry.h>
24+#include <TouchRegistry>
25
25
26#if TOUCHGATE_DEBUG
26#if TOUCHGATE_DEBUG
27#define ugDebug(params) qDebug().nospace() << "[TouchGate(" << (void*)this << ")] " << params
27#define ugDebug(params) qDebug().nospace() << "[TouchGate(" << (void*)this << ")] " << params
plugins/Ubuntu/Gestures/TouchGestureArea.cpp+16−15
@@ -16,10 +16,11 @@
16
16
17#include "TouchGestureArea.h"
17#include "TouchGestureArea.h"
18
18
19−// local
20−#include "TouchOwnershipEvent.h"
19+#include <UbuntuGestures/TouchOwnershipEvent>
20+#include <UbuntuGestures/TouchRegistry>
21+#include <UbuntuGestures/UnownedTouchEvent>
21−#include "TouchRegistry.h"
22+// #include "TouchRegistry.h"
22−#include "UnownedTouchEvent.h"
23+// #include "UnownedTouchEvent.h"
23
24
24#include <QGuiApplication>
25#include <QGuiApplication>
25#include <QStyleHints>
26#include <QStyleHints>
@@ -374,7 +375,7 @@ void TouchGestureArea::unownedTouchEvent_waitingForMoreTouches(QTouchEvent *even
374 }
375 }
375 }
376 }
376
377
377− if (m_candidateTouches.count() == 0) {
378+ if (m_candidateTouches.isEmpty()) {
378 setInternalStatus(InternalStatus::WaitingForTouch);
379 setInternalStatus(InternalStatus::WaitingForTouch);
379 }
380 }
380}
381}
@@ -438,7 +439,7 @@ void TouchGestureArea::unownedTouchEvent_rejected(QTouchEvent *event)
438 }
439 }
439 }
440 }
440
441
441− if (m_watchedTouches.count() == 0) {
442+ if (m_watchedTouches.isEmpty()) {
442 setInternalStatus(InternalStatus::WaitingForTouch);
443 setInternalStatus(InternalStatus::WaitingForTouch);
443 }
444 }
444}
445}
@@ -526,7 +527,7 @@ void TouchGestureArea::updateTouchPoints(QTouchEvent *touchEvent)
526 if (updateable) {
527 if (updateable) {
527 if (!dragging() && m_status == InternalStatus::Recognized) {
528 if (!dragging() && m_status == InternalStatus::Recognized) {
528 bool allWantDrag = !m_liveTouchPoints.isEmpty();
529 bool allWantDrag = !m_liveTouchPoints.isEmpty();
529− Q_FOREACH(auto point, m_liveTouchPoints) {
530+ Q_FOREACH(const auto &point, m_liveTouchPoints) {
530 allWantDrag &= point->dragging();
531 allWantDrag &= point->dragging();
531 }
532 }
532 // only dragging if all points are dragging.
533 // only dragging if all points are dragging.
@@ -588,13 +589,15 @@ void TouchGestureArea::setInternalStatus(uint newStatus)
588 resyncCachedTouchPoints();
589 resyncCachedTouchPoints();
589 break;
590 break;
590 case InternalStatus::WaitingForMoreTouches:
591 case InternalStatus::WaitingForMoreTouches:
591− m_recognitionTimer->start(m_recognitionPeriod);
592+ m_recognitionTimer->setInterval(m_recognitionPeriod);
593+ m_recognitionTimer->start();
592 break;
594 break;
593 case InternalStatus::Recognized:
595 case InternalStatus::Recognized:
594 resyncCachedTouchPoints();
596 resyncCachedTouchPoints();
595 break;
597 break;
596 case InternalStatus::WaitingForRejection:
598 case InternalStatus::WaitingForRejection:
597− m_recognitionTimer->start(m_releaseRejectPeriod);
599+ m_recognitionTimer->setInterval(m_releaseRejectPeriod);
600+ m_recognitionTimer->start();
598 break;
601 break;
599 case InternalStatus::Rejected:
602 case InternalStatus::Rejected:
600 resyncCachedTouchPoints();
603 resyncCachedTouchPoints();
@@ -643,11 +646,9 @@ bool TouchGestureArea::dragging() const
643QQmlListProperty<GestureTouchPoint> TouchGestureArea::touchPoints()
646QQmlListProperty<GestureTouchPoint> TouchGestureArea::touchPoints()
644{
647{
645 return QQmlListProperty<GestureTouchPoint>(this,
648 return QQmlListProperty<GestureTouchPoint>(this,
646− 0,
647− nullptr,
649+ nullptr,
648− TouchGestureArea::touchPoint_count,
650+ TouchGestureArea::touchPoint_count,
649− TouchGestureArea::touchPoint_at,
651+ TouchGestureArea::touchPoint_at);
650− 0);
651}
652}
652
653
653int TouchGestureArea::minimumTouchPoints() const
654int TouchGestureArea::minimumTouchPoints() const
@@ -718,7 +719,7 @@ void TouchGestureArea::rejectGesture()
718 }
719 }
719 m_candidateTouches.clear();
720 m_candidateTouches.clear();
720
721
721− if (m_watchedTouches.count() == 0) {
722+ if (m_watchedTouches.isEmpty()) {
722 setInternalStatus(InternalStatus::WaitingForTouch);
723 setInternalStatus(InternalStatus::WaitingForTouch);
723 } else {
724 } else {
724 setInternalStatus(InternalStatus::Rejected);
725 setInternalStatus(InternalStatus::Rejected);
plugins/Ubuntu/Gestures/TouchGestureArea.h+9−10
@@ -21,8 +21,7 @@
21
21
22#include <QQuickItem>
22#include <QQuickItem>
23
23
24−// lib UbuntuGestures
25−#include <Timer.h>
24+#include <UbuntuGestures/Timer>
26
25
27class TouchOwnershipEvent;
26class TouchOwnershipEvent;
28class UnownedTouchEvent;
27class UnownedTouchEvent;
@@ -106,8 +105,8 @@ private:
106/*
105/*
107 An area that detects multi-finger gestures.
106 An area that detects multi-finger gestures.
108
107
109− We can use this to detect gestures contstrained by a minimim and/or maximum number of touch points.
108+ We can use this to detect gestures constrained by a minimum and/or maximum number of touch points.
110− This components uses the touch registry to apply for ownership of touch points.
109+ This component uses the touch registry to apply for ownership of touch points.
111 This way we can use the component in conjuntion with the directional drag area to compete for ownwership
110 This way we can use the component in conjuntion with the directional drag area to compete for ownwership
112 or gestures; unlike the MultiPointTouchArea.
111 or gestures; unlike the MultiPointTouchArea.
113 */
112 */
@@ -137,7 +136,7 @@ public:
137 Recognized,
136 Recognized,
138 Rejected
137 Rejected
139 };
138 };
140− TouchGestureArea(QQuickItem* parent = NULL);
139+ TouchGestureArea(QQuickItem* parent = nullptr);
141 ~TouchGestureArea();
140 ~TouchGestureArea();
142
141
143 bool event(QEvent *e) override;
142 bool event(QEvent *e) override;
@@ -165,10 +164,10 @@ Q_SIGNALS:
165
164
166 void touchPointsUpdated();
165 void touchPointsUpdated();
167 void draggingChanged(bool dragging);
166 void draggingChanged(bool dragging);
168− void minimumTouchPointsChanged(bool value);
167+ void minimumTouchPointsChanged(int value);
169− void maximumTouchPointsChanged(bool value);
168+ void maximumTouchPointsChanged(int value);
170− void recognitionPeriodChanged(bool value);
169+ void recognitionPeriodChanged(int value);
171− void releaseRejectPeriodChanged(bool value);
170+ void releaseRejectPeriodChanged(int value);
172
171
173 void pressed(const QList<QObject*>& points);
172 void pressed(const QList<QObject*>& points);
174 void released(const QList<QObject*>& points);
173 void released(const QList<QObject*>& points);
@@ -176,7 +175,7 @@ Q_SIGNALS:
176 void clicked();
175 void clicked();
177
176
178protected:
177protected:
179− void itemChange(ItemChange change, const ItemChangeData &value);
178+ void itemChange(ItemChange change, const ItemChangeData &value) override;
180
179
181private Q_SLOTS:
180private Q_SLOTS:
182 void rejectGesture();
181 void rejectGesture();
plugins/Ubuntu/Gestures/plugin.cpp+3−5
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2013,2015 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
@@ -17,8 +17,7 @@
17#include "plugin.h"
17#include "plugin.h"
18#include "AxisVelocityCalculator.h"
18#include "AxisVelocityCalculator.h"
19#include "Direction.h"
19#include "Direction.h"
20−#include "DirectionalDragArea.h"
20+#include "MouseEventGenerator.h"
21−#include "FloatingFlickable.h"
22#include "PressedOutsideNotifier.h"
21#include "PressedOutsideNotifier.h"
23#include "TouchGate.h"
22#include "TouchGate.h"
24#include "TouchGestureArea.h"
23#include "TouchGestureArea.h"
@@ -34,9 +33,8 @@ static QObject* directionSingleton(QQmlEngine* engine, QJSEngine* scriptEngine)
34void UbuntuGesturesQmlPlugin::registerTypes(const char *uri)
33void UbuntuGesturesQmlPlugin::registerTypes(const char *uri)
35{
34{
36 qmlRegisterSingletonType<Direction>(uri, 0, 1, "Direction", directionSingleton);
35 qmlRegisterSingletonType<Direction>(uri, 0, 1, "Direction", directionSingleton);
37− qmlRegisterType<DirectionalDragArea>(uri, 0, 1, "DirectionalDragArea");
38 qmlRegisterType<AxisVelocityCalculator>(uri, 0, 1, "AxisVelocityCalculator");
36 qmlRegisterType<AxisVelocityCalculator>(uri, 0, 1, "AxisVelocityCalculator");
39− qmlRegisterType<FloatingFlickable>(uri, 0, 1, "FloatingFlickable");
37+ qmlRegisterType<MouseEventGenerator>(uri, 0, 1, "MouseEventGenerator");
40 qmlRegisterType<PressedOutsideNotifier>(uri, 0, 1, "PressedOutsideNotifier");
38 qmlRegisterType<PressedOutsideNotifier>(uri, 0, 1, "PressedOutsideNotifier");
41 qmlRegisterType<TouchGate>(uri, 0, 1, "TouchGate");
39 qmlRegisterType<TouchGate>(uri, 0, 1, "TouchGate");
42 qmlRegisterType<TouchGestureArea>(uri, 0, 1, "TouchGestureArea");
40 qmlRegisterType<TouchGestureArea>(uri, 0, 1, "TouchGestureArea");
plugins/Ubuntu/Payments/Payments.qmltypesdeleted−43
@@ -1,43 +0,0 @@
1−import QtQuick.tooling 1.1
2−
3−// This file describes the plugin-supplied types contained in the library.
4−// It is used for QML tooling purposes only.
5−//
6−// This file was auto-generated by:
7−// 'qmlplugindump -notrelocatable Ubuntu.Payments 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "Payments"
12− prototype: "QObject"
13− exports: ["Ubuntu.Payments/Payments 0.1"]
14− exportMetaObjectRevisions: [0]
15− Property { name: "currency"; type: "string" }
16− Property { name: "price"; type: "double" }
17− Property { name: "storeItemId"; type: "string" }
18− Property { name: "formattedPrice"; type: "string"; isReadonly: true }
19− Signal {
20− name: "currencyChanged"
21− Parameter { name: "currency"; type: "string" }
22− }
23− Signal {
24− name: "priceChanged"
25− Parameter { name: "price"; type: "double" }
26− }
27− Signal {
28− name: "storeItemIdChanged"
29− Parameter { name: "store_item_id"; type: "string" }
30− }
31− Signal {
32− name: "formattedPriceChanged"
33− Parameter { name: "formatted_price"; type: "string" }
34− }
35− Signal {
36− name: "purchaseError"
37− Parameter { name: "error"; type: "string" }
38− }
39− Signal { name: "purchaseCompleted" }
40− Signal { name: "purchaseCancelled" }
41− Method { name: "start" }
42− }
43−}
plugins/Ubuntu/SystemImage/SystemImage.qmltypesdeleted−19
@@ -1,19 +0,0 @@
1−import QtQuick.tooling 1.1
2−
3−// This file describes the plugin-supplied types contained in the library.
4−// It is used for QML tooling purposes only.
5−//
6−// This file was auto-generated by:
7−// 'qmlplugindump -notrelocatable Ubuntu.SystemImage 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "SystemImage"
12− prototype: "QObject"
13− exports: ["Ubuntu.SystemImage/SystemImage 0.1"]
14− isCreatable: false
15− isSingleton: true
16− exportMetaObjectRevisions: [0]
17− Method { name: "factoryReset" }
18− }
19−}
plugins/Unity/Connectivity/Connectivity.qmltypesdeleted−19
@@ -1,19 +0,0 @@
1−import QtQuick.tooling 1.1
2−
3−// This file describes the plugin-supplied types contained in the library.
4−// It is used for QML tooling purposes only.
5−//
6−// This file was auto-generated by:
7−// 'qmlplugindump -notrelocatable Unity.Connectivity 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "Connectivity"
12− prototype: "QObject"
13− exports: ["Unity.Connectivity/Connectivity 0.1"]
14− isCreatable: false
15− isSingleton: true
16− exportMetaObjectRevisions: [0]
17− Method { name: "unlockAllModems" }
18− }
19−}
plugins/Unity/DashCommunicator/DashCommunicator.qmltypesdeleted−47
@@ -1,47 +0,0 @@
1−import QtQuick.tooling 1.1
2−
3−// This file describes the plugin-supplied types contained in the library.
4−// It is used for QML tooling purposes only.
5−//
6−// This file was auto-generated by:
7−// 'qmlplugindump -notrelocatable Unity.DashCommunicator 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "DashCommunicator"
12− prototype: "QThread"
13− exports: ["Unity.DashCommunicator/DashCommunicator 0.1"]
14− exportMetaObjectRevisions: [0]
15− Method {
16− name: "setCurrentScope"
17− Parameter { name: "index"; type: "int" }
18− Parameter { name: "animate"; type: "bool" }
19− Parameter { name: "isSwipe"; type: "bool" }
20− }
21− }
22− Component {
23− name: "DashCommunicatorService"
24− prototype: "QObject"
25− exports: ["Unity.DashCommunicator/DashCommunicatorService 0.1"]
26− exportMetaObjectRevisions: [0]
27− Signal {
28− name: "setCurrentScopeRequested"
29− Parameter { name: "index"; type: "int" }
30− Parameter { name: "animate"; type: "bool" }
31− Parameter { name: "isSwipe"; type: "bool" }
32− }
33− }
34− Component {
35− name: "QThread"
36− prototype: "QObject"
37− Signal { name: "started" }
38− Signal { name: "finished" }
39− Method {
40− name: "start"
41− Parameter { type: "Priority" }
42− }
43− Method { name: "start" }
44− Method { name: "terminate" }
45− Method { name: "quit" }
46− }
47−}
plugins/Unity/Indicators/CMakeLists.txt+4
@@ -6,6 +6,10 @@ find_package(Qt5Quick REQUIRED)
6include_directories(
6include_directories(
7 ${CMAKE_CURRENT_SOURCE_DIR}
7 ${CMAKE_CURRENT_SOURCE_DIR}
8 ${CMAKE_CURRENT_BINARY_DIR}
8 ${CMAKE_CURRENT_BINARY_DIR}
9+)
10+
11+include_directories(
12+ SYSTEM
9 ${GLIB_INCLUDE_DIRS}
13 ${GLIB_INCLUDE_DIRS}
10 ${GIO_INCLUDE_DIRS}
14 ${GIO_INCLUDE_DIRS}
11 ${QMENUMODEL_INCLUDE_DIRS}
15 ${QMENUMODEL_INCLUDE_DIRS}
plugins/Unity/Indicators/Indicators.qmltypesdeleted−264
@@ -1,264 +0,0 @@
1−import QtQuick.tooling 1.1
2−
3−// This file describes the plugin-supplied types contained in the library.
4−// It is used for QML tooling purposes only.
5−//
6−// This file was auto-generated by:
7−// 'qmlplugindump -notrelocatable Unity.Indicators 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "ActionRootState"
12− prototype: "RootStateObject"
13− exports: ["Unity.Indicators/ActionRootState 0.1"]
14− exportMetaObjectRevisions: [0]
15− Property { name: "actionGroup"; type: "QDBusActionGroup"; isPointer: true }
16− Property { name: "actionName"; type: "string" }
17− }
18− Component {
19− name: "ActionState"
20− prototype: "QObject"
21− exports: ["Unity.Indicators/ActionState 0.1"]
22− isCreatable: false
23− exportMetaObjectRevisions: [0]
24− Enum {
25− name: "ActionStates"
26− values: {
27− "Label": 0,
28− "IconSource": 1,
29− "AccessableName": 2,
30− "Visible": 3
31− }
32− }
33− }
34− Component {
35− name: "FlatMenuProxyModelRole"
36− prototype: "QObject"
37− exports: ["Unity.Indicators/FlatMenuProxyModelRole 0.1"]
38− isCreatable: false
39− exportMetaObjectRevisions: [0]
40− Enum {
41− name: "Roles"
42− values: {
43− "Action": 1,
44− "Label": 2,
45− "Extra": 3,
46− "Depth": 4,
47− "hasSection": 5,
48− "hasSubMenu": 6
49− }
50− }
51− }
52− Component {
53− name: "IndicatorsManager"
54− prototype: "QObject"
55− exports: ["Unity.Indicators/IndicatorsManager 0.1"]
56− exportMetaObjectRevisions: [0]
57− Property { name: "loaded"; type: "bool"; isReadonly: true }
58− Property { name: "profile"; type: "string" }
59− Signal {
60− name: "loadedChanged"
61− Parameter { type: "bool" }
62− }
63− Signal {
64− name: "profileChanged"
65− Parameter { type: "string" }
66− }
67− Signal {
68− name: "indicatorLoaded"
69− Parameter { name: "indicator_name"; type: "string" }
70− }
71− Signal {
72− name: "indicatorAboutToBeUnloaded"
73− Parameter { name: "indicator_name"; type: "string" }
74− }
75− Method { name: "load" }
76− Method { name: "unload" }
77− }
78− Component {
79− name: "IndicatorsModel"
80− prototype: "QAbstractListModel"
81− exports: ["Unity.Indicators/IndicatorsModel 0.1"]
82− exportMetaObjectRevisions: [0]
83− Property { name: "count"; type: "int"; isReadonly: true }
84− Property { name: "profile"; type: "string" }
85− Signal {
86− name: "indicatorDataChanged"
87− Parameter { name: "data"; type: "QVariant" }
88− }
89− Method { name: "load" }
90− Method { name: "unload" }
91− Method {
92− name: "data"
93− type: "QVariant"
94− Parameter { name: "row"; type: "int" }
95− Parameter { name: "role"; type: "int" }
96− }
97− }
98− Component {
99− name: "IndicatorsModelRole"
100− prototype: "QObject"
101− exports: ["Unity.Indicators/IndicatorsModelRole 0.1"]
102− isCreatable: false
103− exportMetaObjectRevisions: [0]
104− Enum {
105− name: "Roles"
106− values: {
107− "Identifier": 0,
108− "Position": 1,
109− "IndicatorProperties": 2
110− }
111− }
112− }
113− Component {
114− name: "MenuContentActivator"
115− prototype: "QObject"
116− exports: ["Unity.Indicators/MenuContentActivator 0.1"]
117− exportMetaObjectRevisions: [0]
118− Property { name: "baseIndex"; type: "int" }
119− Property { name: "running"; type: "bool" }
120− Property { name: "count"; type: "int" }
121− Property { name: "content"; type: "MenuContentState"; isList: true; isReadonly: true }
122− Signal {
123− name: "baseIndexChanged"
124− Parameter { name: "baseIndex"; type: "int" }
125− }
126− Signal {
127− name: "deltaChanged"
128− Parameter { name: "delta"; type: "int" }
129− }
130− Signal {
131− name: "runningChanged"
132− Parameter { name: "running"; type: "bool" }
133− }
134− Signal {
135− name: "countChanged"
136− Parameter { name: "count"; type: "int" }
137− }
138− Method { name: "restart" }
139− Method { name: "stop" }
140− Method { name: "clear" }
141− Method {
142− name: "isMenuContentActive"
143− type: "bool"
144− Parameter { name: "index"; type: "int" }
145− }
146− }
147− Component {
148− name: "MenuContentState"
149− prototype: "QObject"
150− exports: ["Unity.Indicators/MenuContentState 0.1"]
151− isCreatable: false
152− exportMetaObjectRevisions: [0]
153− Property { name: "active"; type: "bool"; isReadonly: true }
154− }
155− Component {
156− name: "ModelActionRootState"
157− prototype: "RootStateObject"
158− exports: ["Unity.Indicators/ModelActionRootState 0.1"]
159− exportMetaObjectRevisions: [0]
160− Property { name: "menu"; type: "UnityMenuModel"; isPointer: true }
161− Signal { name: "indexChanged" }
162− }
163− Component {
164− name: "ModelPrinter"
165− prototype: "QObject"
166− exports: ["Unity.Indicators/ModelPrinter 0.1"]
167− exportMetaObjectRevisions: [0]
168− Property { name: "model"; type: "UnityMenuModel"; isPointer: true }
169− Property { name: "text"; type: "string"; isReadonly: true }
170− Method { name: "text"; type: "string" }
171− }
172− Component {
173− name: "NetworkActionState"
174− prototype: "QObject"
175− exports: ["Unity.Indicators/NetworkActionState 0.1"]
176− isCreatable: false
177− exportMetaObjectRevisions: [0]
178− Enum {
179− name: "NetworkActionStates"
180− values: {
181− "Connection": 1,
182− "SignalStrength": 2
183− }
184− }
185− }
186− Component {
187− name: "NetworkConnection"
188− prototype: "QObject"
189− exports: ["Unity.Indicators/NetworkConnection 0.1"]
190− isCreatable: false
191− exportMetaObjectRevisions: [0]
192− Enum {
193− name: "NetworkConnectionStates"
194− values: {
195− "Initial": 0,
196− "Activating": 1,
197− "Activated": 2,
198− "Deactivating": 3
199− }
200− }
201− }
202− Component {
203− name: "RootStateObject"
204− prototype: "QObject"
205− Property { name: "valid"; type: "bool"; isReadonly: true }
206− Property { name: "title"; type: "string"; isReadonly: true }
207− Property { name: "leftLabel"; type: "string"; isReadonly: true }
208− Property { name: "rightLabel"; type: "string"; isReadonly: true }
209− Property { name: "icons"; type: "QStringList"; isReadonly: true }
210− Property { name: "accessibleName"; type: "string"; isReadonly: true }
211− Property { name: "indicatorVisible"; type: "bool"; isReadonly: true }
212− Signal { name: "updated" }
213− }
214− Component {
215− name: "SharedUnityMenuModel"
216− prototype: "QObject"
217− exports: ["Unity.Indicators/SharedUnityMenuModel 0.1"]
218− exportMetaObjectRevisions: [0]
219− Property { name: "busName"; type: "QByteArray" }
220− Property { name: "menuObjectPath"; type: "QByteArray" }
221− Property { name: "actions"; type: "QVariantMap" }
222− Property { name: "model"; type: "UnityMenuModel"; isReadonly: true; isPointer: true }
223− }
224− Component {
225− name: "UnityMenuModelCache"
226− prototype: "QObject"
227− exports: ["Unity.Indicators/UnityMenuModelCache 0.1"]
228− isCreatable: false
229− isSingleton: true
230− exportMetaObjectRevisions: [0]
231− Method {
232− name: "contains"
233− type: "bool"
234− Parameter { name: "path"; type: "QByteArray" }
235− }
236− }
237− Component {
238− name: "UnityMenuModelStack"
239− prototype: "QObject"
240− exports: ["Unity.Indicators/UnityMenuModelStack 0.1"]
241− exportMetaObjectRevisions: [0]
242− Property { name: "head"; type: "UnityMenuModel"; isPointer: true }
243− Property { name: "tail"; type: "UnityMenuModel"; isReadonly: true; isPointer: true }
244− Property { name: "count"; type: "int"; isReadonly: true }
245− Signal {
246− name: "headChanged"
247− Parameter { name: "head"; type: "UnityMenuModel"; isPointer: true }
248− }
249− Signal {
250− name: "tailChanged"
251− Parameter { name: "tail"; type: "UnityMenuModel"; isPointer: true }
252− }
253− Signal {
254− name: "countChanged"
255− Parameter { name: "count"; type: "int" }
256− }
257− Method {
258− name: "push"
259− Parameter { name: "model"; type: "UnityMenuModel"; isPointer: true }
260− Parameter { name: "menuIndex"; type: "int" }
261− }
262− Method { name: "pop"; type: "UnityMenuModel*" }
263− }
264−}
plugins/Unity/Indicators/indicatorsmanager.cpp+1−1
@@ -291,7 +291,7 @@ Indicator::Ptr IndicatorsManager::indicator(const QString& indicator_name)
291 // The rest of the indicators respect their default profile (which is "phone", even on desktop PCs)
291 // The rest of the indicators respect their default profile (which is "phone", even on desktop PCs)
292 if ((new_indicator->identifier() == QStringLiteral("indicator-session"))
292 if ((new_indicator->identifier() == QStringLiteral("indicator-session"))
293 || (new_indicator->identifier() == QStringLiteral("indicator-power") && m_platform.isPC())) {
293 || (new_indicator->identifier() == QStringLiteral("indicator-power") && m_platform.isPC())) {
294− new_indicator->setProfile(QStringLiteral("desktop"));
294+ new_indicator->setProfile(m_profile.replace(QStringLiteral("phone"), QStringLiteral("desktop")));
295 } else {
295 } else {
296 new_indicator->setProfile(m_profile);
296 new_indicator->setProfile(m_profile);
297 }
297 }
plugins/Unity/InputInfo/InputInfo.qmltypesdeleted−71
@@ -1,71 +0,0 @@
1−import QtQuick.tooling 1.1
2−
3−// This file describes the plugin-supplied types contained in the library.
4−// It is used for QML tooling purposes only.
5−//
6−// This file was auto-generated by:
7−// 'qmlplugindump -notrelocatable Unity.InputInfo 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "QDeclarativeInputDeviceModel"
12− prototype: "QAbstractListModel"
13− exports: ["Unity.InputInfo/InputDeviceModel 0.1"]
14− exportMetaObjectRevisions: [0]
15− Property { name: "deviceFilter"; type: "QInputDevice::InputType" }
16− Property { name: "count"; type: "int"; isReadonly: true }
17− Signal {
18− name: "deviceAdded"
19− Parameter { name: "devicePath"; type: "string" }
20− }
21− Signal {
22− name: "deviceRemoved"
23− Parameter { name: "devicePath"; type: "string" }
24− }
25− Signal {
26− name: "deviceFilterChanged"
27− Parameter { name: "filter"; type: "QInputDevice::InputType" }
28− }
29− Method { name: "updateDeviceList" }
30− Method {
31− name: "indexOf"
32− type: "int"
33− Parameter { name: "devicePath"; type: "string" }
34− }
35− Method {
36− name: "get"
37− type: "QInputDevice*"
38− Parameter { name: "index"; type: "int" }
39− }
40− }
41− Component {
42− name: "QInputDevice"
43− prototype: "QObject"
44− exports: ["Unity.InputInfo/InputInfo 0.1"]
45− exportMetaObjectRevisions: [0]
46− Enum {
47− name: "InputType"
48− values: {
49− "Unknown": 0,
50− "Button": 1,
51− "Mouse": 2,
52− "TouchPad": 4,
53− "TouchScreen": 8,
54− "Keyboard": 16,
55− "Switch": 32
56− }
57− }
58− Enum {
59− name: "InputTypeFlags"
60− values: {
61− "Unknown": 0,
62− "Button": 1,
63− "Mouse": 2,
64− "TouchPad": 4,
65− "TouchScreen": 8,
66− "Keyboard": 16,
67− "Switch": 32
68− }
69− }
70− }
71−}
plugins/Unity/InputInfo/linux/qinputdeviceinfo_linux.cpp+7−2
@@ -44,6 +44,7 @@
44#include <libudev.h>
44#include <libudev.h>
45#include <libevdev/libevdev.h>
45#include <libevdev/libevdev.h>
46#include <fcntl.h>
46#include <fcntl.h>
47+#include <unistd.h>
47#include <QDebug>
48#include <QDebug>
48#include <QSocketNotifier>
49#include <QSocketNotifier>
49#include <QTimer>
50#include <QTimer>
@@ -52,6 +53,7 @@
52QInputDeviceManagerPrivate::QInputDeviceManagerPrivate(QObject *parent) :
53QInputDeviceManagerPrivate::QInputDeviceManagerPrivate(QObject *parent) :
53 QObject(parent),
54 QObject(parent),
54 currentFilter(QInputDevice::Unknown),
55 currentFilter(QInputDevice::Unknown),
56+ udevMonitor(0),
55 udevice(0)
57 udevice(0)
56{
58{
57 QTimer::singleShot(250,this,SLOT(init()));
59 QTimer::singleShot(250,this,SLOT(init()));
@@ -83,9 +85,9 @@ void QInputDeviceManagerPrivate::init()
83 udev_enumerate_add_match_subsystem(enumerate, subsystem.toLatin1());
85 udev_enumerate_add_match_subsystem(enumerate, subsystem.toLatin1());
84
86
85 udev_monitor_enable_receiving(udevMonitor);
87 udev_monitor_enable_receiving(udevMonitor);
86− notifierFd = udev_monitor_get_fd(udevMonitor);
88+ int notifierFd = udev_monitor_get_fd(udevMonitor);
87
89
88− notifier = new QSocketNotifier(notifierFd, QSocketNotifier::Read, this);
90+ QSocketNotifier *notifier = new QSocketNotifier(notifierFd, QSocketNotifier::Read, this);
89 connect(notifier, SIGNAL(activated(int)), this, SLOT(onUDevChanges()));
91 connect(notifier, SIGNAL(activated(int)), this, SLOT(onUDevChanges()));
90
92
91 udev_enumerate_scan_devices(enumerate);
93 udev_enumerate_scan_devices(enumerate);
@@ -168,6 +170,7 @@ QInputDevice *QInputDeviceManagerPrivate::addDevice(struct udev_device *udev)
168 rc = libevdev_new_from_fd(fd, &dev);
170 rc = libevdev_new_from_fd(fd, &dev);
169 if (rc < 0) {
171 if (rc < 0) {
170 qWarning() << "Failed to init libevdev ("<< strerror(-rc) << ")";
172 qWarning() << "Failed to init libevdev ("<< strerror(-rc) << ")";
173+ close(fd);
171 return Q_NULLPTR;
174 return Q_NULLPTR;
172 }
175 }
173
176
@@ -195,6 +198,8 @@ QInputDevice *QInputDeviceManagerPrivate::addDevice(struct udev_device *udev)
195 }
198 }
196 }
199 }
197
200
201+ libevdev_free(dev);
202+ close(fd);
198 return inputDevice;
203 return inputDevice;
199}
204}
200
205
plugins/Unity/InputInfo/linux/qinputdeviceinfo_linux_p.h−2
@@ -83,8 +83,6 @@ private:
83
83
84 QInputDevice *addDevice(const QString &path);
84 QInputDevice *addDevice(const QString &path);
85 void removeDevice(const QString &path);
85 void removeDevice(const QString &path);
86− QSocketNotifier *notifier;
87− int notifierFd;
88 struct udev_monitor *udevMonitor;
86 struct udev_monitor *udevMonitor;
89 QInputDevice::InputTypeFlags getInputTypeFlags(struct udev_device *);
87 QInputDevice::InputTypeFlags getInputTypeFlags(struct udev_device *);
90 struct udev *udevice;
88 struct udev *udevice;
plugins/Unity/InputInfo/plugin.h+1−1
@@ -24,7 +24,7 @@ class InputInfoPlugin : public QQmlExtensionPlugin
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")
26public:
26public:
27− void registerTypes(const char *uri);
27+ void registerTypes(const char *uri) override;
28};
28};
29
29
30#endif // INPUTINFO_PLUGIN_H
30#endif // INPUTINFO_PLUGIN_H
plugins/Unity/InputInfo/qdeclarativeinputdevicemodel_p.h+3−3
@@ -69,8 +69,8 @@ public:
69 explicit QDeclarativeInputDeviceModel(QObject *parent = 0);
69 explicit QDeclarativeInputDeviceModel(QObject *parent = 0);
70 virtual ~QDeclarativeInputDeviceModel();
70 virtual ~QDeclarativeInputDeviceModel();
71
71
72− QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
72+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
73− int rowCount(const QModelIndex &parent = QModelIndex()) const;
73+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
74
74
75 void setDeviceFilter(QInputDevice::InputType filter);
75 void setDeviceFilter(QInputDevice::InputType filter);
76 QInputDevice::InputType deviceFilter();
76 QInputDevice::InputType deviceFilter();
@@ -78,7 +78,7 @@ public:
78 Q_INVOKABLE int indexOf(const QString &devicePath) const;
78 Q_INVOKABLE int indexOf(const QString &devicePath) const;
79
79
80 Q_INVOKABLE QInputDevice *get(int index) const;
80 Q_INVOKABLE QInputDevice *get(int index) const;
81− QHash<int, QByteArray> roleNames() const;
81+ QHash<int, QByteArray> roleNames() const override;
82
82
83Q_SIGNALS:
83Q_SIGNALS:
84 void deviceAdded(const QString &devicePath);
84 void deviceAdded(const QString &devicePath);
plugins/Unity/Launcher/CMakeLists.txt+3−1
@@ -1,4 +1,4 @@
1−pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=7)
1+pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=9)
2pkg_check_modules(GSETTINGS_QT REQUIRED gsettings-qt)
2pkg_check_modules(GSETTINGS_QT REQUIRED gsettings-qt)
3
3
4add_definitions(-DSM_BUSNAME=systemBus)
4add_definitions(-DSM_BUSNAME=systemBus)
@@ -23,6 +23,8 @@ set(QMLLAUNCHERPLUGIN_SRC
23 asadapter.cpp
23 asadapter.cpp
24 ${CMAKE_SOURCE_DIR}/plugins/AccountsService/AccountsServiceDBusAdaptor.cpp
24 ${CMAKE_SOURCE_DIR}/plugins/AccountsService/AccountsServiceDBusAdaptor.cpp
25 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationManagerInterface.h
25 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationManagerInterface.h
26+ ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationInfoInterface.h
27+ ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceListInterface.h
26 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherItemInterface.h
28 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherItemInterface.h
27 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherModelInterface.h
29 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherModelInterface.h
28 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/QuickListModelInterface.h
30 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/QuickListModelInterface.h
plugins/Unity/Launcher/Launcher.qmltypesdeleted−182
@@ -1,182 +0,0 @@
1−import QtQuick.tooling 1.1
2−
3−// This file describes the plugin-supplied types contained in the library.
4−// It is used for QML tooling purposes only.
5−//
6−// This file was auto-generated by:
7−// 'qmlplugindump -notrelocatable Unity.Launcher 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "LauncherItem"
12− prototype: "unity::shell::launcher::LauncherItemInterface"
13− exports: ["Unity.Launcher/LauncherItem 0.1"]
14− isCreatable: false
15− exportMetaObjectRevisions: [0]
16− }
17− Component {
18− name: "LauncherModel"
19− prototype: "unity::shell::launcher::LauncherModelInterface"
20− exports: ["Unity.Launcher/LauncherModel 0.1"]
21− isCreatable: false
22− isSingleton: true
23− exportMetaObjectRevisions: [0]
24− Method {
25− name: "requestRemove"
26− Parameter { name: "appId"; type: "string" }
27− }
28− Method { name: "refresh" }
29− Method {
30− name: "get"
31− type: "unity::shell::launcher::LauncherItemInterface*"
32− Parameter { name: "index"; type: "int" }
33− }
34− Method {
35− name: "move"
36− Parameter { name: "oldIndex"; type: "int" }
37− Parameter { name: "newIndex"; type: "int" }
38− }
39− Method {
40− name: "pin"
41− Parameter { name: "appId"; type: "string" }
42− Parameter { name: "index"; type: "int" }
43− }
44− Method {
45− name: "pin"
46− Parameter { name: "appId"; type: "string" }
47− }
48− Method {
49− name: "quickListActionInvoked"
50− Parameter { name: "appId"; type: "string" }
51− Parameter { name: "actionIndex"; type: "int" }
52− }
53− Method {
54− name: "setUser"
55− Parameter { name: "username"; type: "string" }
56− }
57− Method {
58− name: "getUrlForAppId"
59− type: "string"
60− Parameter { name: "appId"; type: "string" }
61− }
62− }
63− Component {
64− name: "QuickListModel"
65− prototype: "unity::shell::launcher::QuickListModelInterface"
66− exports: ["Unity.Launcher/QuickListModel 0.1"]
67− isCreatable: false
68− exportMetaObjectRevisions: [0]
69− }
70− Component {
71− name: "unity::shell::launcher::LauncherItemInterface"
72− prototype: "QObject"
73− exports: ["Unity.Launcher/LauncherItemInterface 0.1"]
74− isCreatable: false
75− exportMetaObjectRevisions: [0]
76− Property { name: "appId"; type: "string"; isReadonly: true }
77− Property { name: "name"; type: "string"; isReadonly: true }
78− Property { name: "icon"; type: "string"; isReadonly: true }
79− Property { name: "pinned"; type: "bool"; isReadonly: true }
80− Property { name: "running"; type: "bool"; isReadonly: true }
81− Property { name: "recent"; type: "bool"; isReadonly: true }
82− Property { name: "progress"; type: "int"; isReadonly: true }
83− Property { name: "count"; type: "int"; isReadonly: true }
84− Property { name: "countVisible"; type: "bool"; isReadonly: true }
85− Property { name: "focused"; type: "bool"; isReadonly: true }
86− Property {
87− name: "quickList"
88− type: "unity::shell::launcher::QuickListModelInterface"
89− isReadonly: true
90− isPointer: true
91− }
92− Signal {
93− name: "nameChanged"
94− Parameter { name: "name"; type: "string" }
95− }
96− Signal {
97− name: "iconChanged"
98− Parameter { name: "icon"; type: "string" }
99− }
100− Signal {
101− name: "pinnedChanged"
102− Parameter { name: "pinned"; type: "bool" }
103− }
104− Signal {
105− name: "runningChanged"
106− Parameter { name: "running"; type: "bool" }
107− }
108− Signal {
109− name: "recentChanged"
110− Parameter { name: "running"; type: "bool" }
111− }
112− Signal {
113− name: "progressChanged"
114− Parameter { name: "progress"; type: "int" }
115− }
116− Signal {
117− name: "countChanged"
118− Parameter { name: "count"; type: "int" }
119− }
120− Signal {
121− name: "countVisibleChanged"
122− Parameter { name: "countVisible"; type: "bool" }
123− }
124− Signal {
125− name: "focusedChanged"
126− Parameter { name: "focused"; type: "bool" }
127− }
128− }
129− Component {
130− name: "unity::shell::launcher::LauncherModelInterface"
131− prototype: "QAbstractListModel"
132− exports: ["Unity.Launcher/LauncherModelInterface 0.1"]
133− isCreatable: false
134− exportMetaObjectRevisions: [0]
135− Property {
136− name: "applicationManager"
137− type: "unity::shell::application::ApplicationManagerInterface"
138− isPointer: true
139− }
140− Property { name: "onlyPinned"; type: "bool" }
141− Signal { name: "hint" }
142− Method {
143− name: "move"
144− Parameter { name: "oldIndex"; type: "int" }
145− Parameter { name: "newIndex"; type: "int" }
146− }
147− Method {
148− name: "get"
149− type: "unity::shell::launcher::LauncherItemInterface*"
150− Parameter { name: "index"; type: "int" }
151− }
152− Method {
153− name: "pin"
154− Parameter { name: "appId"; type: "string" }
155− Parameter { name: "index"; type: "int" }
156− }
157− Method {
158− name: "pin"
159− Parameter { name: "appId"; type: "string" }
160− }
161− Method {
162− name: "requestRemove"
163− Parameter { name: "appId"; type: "string" }
164− }
165− Method {
166− name: "quickListActionInvoked"
167− Parameter { name: "appId"; type: "string" }
168− Parameter { name: "actionIndex"; type: "int" }
169− }
170− Method {
171− name: "setUser"
172− Parameter { name: "username"; type: "string" }
173− }
174− }
175− Component {
176− name: "unity::shell::launcher::QuickListModelInterface"
177− prototype: "QAbstractListModel"
178− exports: ["Unity.Launcher/QuickListInterface 0.1"]
179− isCreatable: false
180− exportMetaObjectRevisions: [0]
181− }
182−}
plugins/Unity/Launcher/launcheritem.cpp+14−9
@@ -35,6 +35,7 @@ LauncherItem::LauncherItem(const QString &appId, const QString &name, const QStr
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),
38 m_quickList(new QuickListModel(this))
39 m_quickList(new QuickListModel(this))
39{
40{
40 Q_ASSERT(parent != nullptr);
41 Q_ASSERT(parent != nullptr);
@@ -162,9 +163,6 @@ void LauncherItem::setCount(int count)
162 if (m_count != count) {
163 if (m_count != count) {
163 m_count = count;
164 m_count = count;
164 Q_EMIT countChanged(count);
165 Q_EMIT countChanged(count);
165− if (m_countVisible) {
166− setAlerting(true);
167− }
168 }
166 }
169}
167}
170
168
@@ -178,9 +176,6 @@ void LauncherItem::setCountVisible(bool countVisible)
178 if (m_countVisible != countVisible) {
176 if (m_countVisible != countVisible) {
179 m_countVisible = countVisible;
177 m_countVisible = countVisible;
180 Q_EMIT countVisibleChanged(countVisible);
178 Q_EMIT countVisibleChanged(countVisible);
181− if (countVisible) {
182− setAlerting(true);
183− }
184 }
179 }
185}
180}
186
181
@@ -193,9 +188,6 @@ void LauncherItem::setFocused(bool focused)
193{
188{
194 if (m_focused != focused) {
189 if (m_focused != focused) {
195 m_focused = focused;
190 m_focused = focused;
196− if (focused) {
197− setAlerting(false);
198− }
199 Q_EMIT focusedChanged(focused);
191 Q_EMIT focusedChanged(focused);
200 }
192 }
201}
193}
@@ -213,6 +205,19 @@ void LauncherItem::setAlerting(bool alerting)
213 }
205 }
214}
206}
215
207
208+int LauncherItem::surfaceCount() const
209+{
210+ return m_surfaceCount;
211+}
212+
213+void LauncherItem::setSurfaceCount(int surfaceCount)
214+{
215+ if (m_surfaceCount != surfaceCount) {
216+ m_surfaceCount = surfaceCount;
217+ Q_EMIT surfaceCountChanged(surfaceCount);
218+ }
219+}
220+
216unity::shell::launcher::QuickListModelInterface *LauncherItem::quickList() const
221unity::shell::launcher::QuickListModelInterface *LauncherItem::quickList() const
217{
222{
218 return m_quickList;
223 return m_quickList;
plugins/Unity/Launcher/launcheritem.h+3
@@ -45,6 +45,7 @@ public:
45 bool countVisible() const override;
45 bool countVisible() const override;
46 bool focused() const override;
46 bool focused() const override;
47 bool alerting() const override;
47 bool alerting() const override;
48+ int surfaceCount() const override;
48
49
49 unity::shell::launcher::QuickListModelInterface *quickList() const override;
50 unity::shell::launcher::QuickListModelInterface *quickList() const override;
50
51
@@ -59,6 +60,7 @@ private:
59 void setCountVisible(bool countVisible);
60 void setCountVisible(bool countVisible);
60 void setFocused(bool focused);
61 void setFocused(bool focused);
61 void setAlerting(bool alerting);
62 void setAlerting(bool alerting);
63+ void setSurfaceCount(int surfaceCount);
62
64
63private:
65private:
64 QString m_appId;
66 QString m_appId;
@@ -72,6 +74,7 @@ private:
72 bool m_countVisible;
74 bool m_countVisible;
73 bool m_focused;
75 bool m_focused;
74 bool m_alerting;
76 bool m_alerting;
77+ int m_surfaceCount;
75 QuickListModel *m_quickList;
78 QuickListModel *m_quickList;
76 QuickListEntry m_quitAction;
79 QuickListEntry m_quitAction;
77
80
plugins/Unity/Launcher/launchermodel.cpp+58−26
@@ -25,6 +25,7 @@
25#include "asadapter.h"
25#include "asadapter.h"
26
26
27#include <unity/shell/application/ApplicationInfoInterface.h>
27#include <unity/shell/application/ApplicationInfoInterface.h>
28+#include <unity/shell/application/MirSurfaceListInterface.h>
28
29
29#include <QDesktopServices>
30#include <QDesktopServices>
30#include <QDebug>
31#include <QDebug>
@@ -88,6 +89,8 @@ QVariant LauncherModel::data(const QModelIndex &index, int role) const
88 return item->alerting();
89 return item->alerting();
89 case RoleRunning:
90 case RoleRunning:
90 return item->running();
91 return item->running();
92+ case RoleSurfaceCount:
93+ return item->surfaceCount();
91 default:
94 default:
92 qWarning() << Q_FUNC_INFO << "missing role, implement me";
95 qWarning() << Q_FUNC_INFO << "missing role, implement me";
93 return QVariant();
96 return QVariant();
@@ -96,18 +99,6 @@ QVariant LauncherModel::data(const QModelIndex &index, int role) const
96 return QVariant();
99 return QVariant();
97}
100}
98
101
99−void LauncherModel::setAlerting(const QString &appId, bool alerting) {
100− int index = findApplication(appId);
101− if (index >= 0) {
102− QModelIndex modelIndex = this->index(index);
103− LauncherItem *item = m_list.at(index);
104− if (!item->focused()) {
105− item->setAlerting(alerting);
106− Q_EMIT dataChanged(modelIndex, modelIndex, {RoleAlerting});
107− }
108− }
109−}
110−
111unity::shell::launcher::LauncherItemInterface *LauncherModel::get(int index) const
102unity::shell::launcher::LauncherItemInterface *LauncherModel::get(int index) const
112{
103{
113 if (index < 0 || index >= m_list.count()) {
104 if (index < 0 || index >= m_list.count()) {
@@ -358,11 +349,13 @@ void LauncherModel::countChanged(const QString &appId, int count)
358 if (idx >= 0) {
349 if (idx >= 0) {
359 LauncherItem *item = m_list.at(idx);
350 LauncherItem *item = m_list.at(idx);
360 item->setCount(count);
351 item->setCount(count);
352+ QVector<int> changedRoles = {RoleCount};
361− if (item->countVisible()) {
353+ if (item->countVisible() && !item->alerting() && !item->focused()) {
354+ changedRoles << RoleAlerting;
362− setAlerting(item->appId(), true);
355+ item->setAlerting(true);
363 }
356 }
364 m_asAdapter->syncItems(m_list);
357 m_asAdapter->syncItems(m_list);
365− Q_EMIT dataChanged(index(idx), index(idx), {RoleCount});
358+ Q_EMIT dataChanged(index(idx), index(idx), changedRoles);
366 }
359 }
367}
360}
368
361
@@ -372,10 +365,12 @@ void LauncherModel::countVisibleChanged(const QString &appId, bool countVisible)
372 if (idx >= 0) {
365 if (idx >= 0) {
373 LauncherItem *item = m_list.at(idx);
366 LauncherItem *item = m_list.at(idx);
374 item->setCountVisible(countVisible);
367 item->setCountVisible(countVisible);
368+ QVector<int> changedRoles = {RoleCountVisible};
375− if (countVisible) {
369+ if (countVisible && !item->alerting() && !item->focused()) {
370+ changedRoles << RoleAlerting;
376− setAlerting(item->appId(), true);
371+ item->setAlerting(true);
377 }
372 }
378− Q_EMIT dataChanged(index(idx), index(idx), {RoleCountVisible});
373+ Q_EMIT dataChanged(index(idx), index(idx), changedRoles);
379
374
380 // If countVisible goes to false, and the item is neither pinned nor recent we can drop it
375 // If countVisible goes to false, and the item is neither pinned nor recent we can drop it
381 if (!countVisible && !item->pinned() && !item->recent()) {
376 if (!countVisible && !item->pinned() && !item->recent()) {
@@ -498,8 +493,10 @@ void LauncherModel::alert(const QString &appId)
498 int idx = findApplication(appId);
493 int idx = findApplication(appId);
499 if (idx >= 0) {
494 if (idx >= 0) {
500 LauncherItem *item = m_list.at(idx);
495 LauncherItem *item = m_list.at(idx);
496+ if (!item->focused() && !item->alerting()) {
501− setAlerting(item->appId(), true);
497+ item->setAlerting(true);
502− Q_EMIT dataChanged(index(idx), index(idx), {RoleAlerting});
498+ Q_EMIT dataChanged(index(idx), index(idx), {RoleAlerting});
499+ }
503 }
500 }
504}
501}
505
502
@@ -525,28 +522,50 @@ void LauncherModel::applicationAdded(const QModelIndex &parent, int row)
525 item->setRecent(true);
522 item->setRecent(true);
526 Q_EMIT dataChanged(index(itemIndex), index(itemIndex), {RoleRecent});
523 Q_EMIT dataChanged(index(itemIndex), index(itemIndex), {RoleRecent});
527 }
524 }
525+ if (item->surfaceCount() != app->surfaceCount()) {
526+ item->setSurfaceCount(app->surfaceCount());
527+ Q_EMIT dataChanged(index(itemIndex), index(itemIndex), {RoleSurfaceCount});
528+ }
529+
528 item->setRunning(true);
530 item->setRunning(true);
529 } else {
531 } else {
530 LauncherItem *item = new LauncherItem(app->appId(), app->name(), app->icon().toString(), this);
532 LauncherItem *item = new LauncherItem(app->appId(), app->name(), app->icon().toString(), this);
531 item->setRecent(true);
533 item->setRecent(true);
532 item->setRunning(true);
534 item->setRunning(true);
533 item->setFocused(app->focused());
535 item->setFocused(app->focused());
534−
536+ item->setSurfaceCount(app->surfaceCount());
535 beginInsertRows(QModelIndex(), m_list.count(), m_list.count());
537 beginInsertRows(QModelIndex(), m_list.count(), m_list.count());
536 m_list.append(item);
538 m_list.append(item);
537 endInsertRows();
539 endInsertRows();
538 }
540 }
541+ connect(app, &ApplicationInfoInterface::surfaceCountChanged, this, &LauncherModel::applicationSurfaceCountChanged);
539 m_asAdapter->syncItems(m_list);
542 m_asAdapter->syncItems(m_list);
540 Q_EMIT dataChanged(index(itemIndex), index(itemIndex), {RoleRunning});
543 Q_EMIT dataChanged(index(itemIndex), index(itemIndex), {RoleRunning});
541}
544}
542
545
546+void LauncherModel::applicationSurfaceCountChanged(int count)
547+{
548+ ApplicationInfoInterface *app = static_cast<ApplicationInfoInterface*>(sender());
549+ int idx = findApplication(app->appId());
550+ if (idx < 0) {
551+ qWarning() << "Received a surface count changed event from an app that's not in the Launcher model";
552+ return;
553+ }
554+ LauncherItem *item = m_list.at(idx);
555+ if (item->surfaceCount() != count) {
556+ item->setSurfaceCount(count);
557+ Q_EMIT dataChanged(index(idx), index(idx), {RoleSurfaceCount});
558+ }
559+}
560+
543void LauncherModel::applicationRemoved(const QModelIndex &parent, int row)
561void LauncherModel::applicationRemoved(const QModelIndex &parent, int row)
544{
562{
545 Q_UNUSED(parent)
563 Q_UNUSED(parent)
546
564
565+ ApplicationInfoInterface *app = m_appManager->get(row);
547 int appIndex = -1;
566 int appIndex = -1;
548 for (int i = 0; i < m_list.count(); ++i) {
567 for (int i = 0; i < m_list.count(); ++i) {
549− if (m_list.at(i)->appId() == m_appManager->get(row)->appId()) {
568+ if (m_list.at(i)->appId() == app->appId()) {
550 appIndex = i;
569 appIndex = i;
551 break;
570 break;
552 }
571 }
@@ -557,17 +576,24 @@ void LauncherModel::applicationRemoved(const QModelIndex &parent, int row)
557 return;
576 return;
558 }
577 }
559
578
579+ disconnect(app, &ApplicationInfoInterface::surfaceCountChanged, this, &LauncherModel::applicationSurfaceCountChanged);
580+
560 LauncherItem * item = m_list.at(appIndex);
581 LauncherItem * item = m_list.at(appIndex);
561− item->setRunning(false);
562
582
563 if (!item->pinned()) {
583 if (!item->pinned()) {
564 beginRemoveRows(QModelIndex(), appIndex, appIndex);
584 beginRemoveRows(QModelIndex(), appIndex, appIndex);
565 m_list.takeAt(appIndex)->deleteLater();
585 m_list.takeAt(appIndex)->deleteLater();
566 endRemoveRows();
586 endRemoveRows();
567 m_asAdapter->syncItems(m_list);
587 m_asAdapter->syncItems(m_list);
588+ } else {
589+ QVector<int> changedRoles = {RoleRunning};
590+ item->setRunning(false);
591+ if (item->focused()) {
592+ changedRoles << RoleFocused;
593+ item->setFocused(false);
594+ }
568− Q_EMIT dataChanged(index(appIndex), index(appIndex), {RolePinned});
595+ Q_EMIT dataChanged(index(appIndex), index(appIndex), changedRoles);
569 }
596 }
570− Q_EMIT dataChanged(index(appIndex), index(appIndex), {RoleRunning});
571}
597}
572
598
573void LauncherModel::focusedAppIdChanged()
599void LauncherModel::focusedAppIdChanged()
@@ -576,8 +602,14 @@ void LauncherModel::focusedAppIdChanged()
576 for (int i = 0; i < m_list.count(); ++i) {
602 for (int i = 0; i < m_list.count(); ++i) {
577 LauncherItem *item = m_list.at(i);
603 LauncherItem *item = m_list.at(i);
578 if (!item->focused() && item->appId() == appId) {
604 if (!item->focused() && item->appId() == appId) {
605+ QVector<int> changedRoles;
606+ changedRoles << RoleFocused;
579 item->setFocused(true);
607 item->setFocused(true);
580− Q_EMIT dataChanged(index(i), index(i), {RoleFocused});
608+ if (item->alerting()) {
609+ changedRoles << RoleAlerting;
610+ item->setAlerting(false);
611+ }
612+ Q_EMIT dataChanged(index(i), index(i), changedRoles);
581 } else if (item->focused() && item->appId() != appId) {
613 } else if (item->focused() && item->appId() != appId) {
582 item->setFocused(false);
614 item->setFocused(false);
583 Q_EMIT dataChanged(index(i), index(i), {RoleFocused});
615 Q_EMIT dataChanged(index(i), index(i), {RoleFocused});
plugins/Unity/Launcher/launchermodel.h+1−1
@@ -45,7 +45,6 @@ public:
45
45
46 QVariant data(const QModelIndex &index, int role) const override;
46 QVariant data(const QModelIndex &index, int role) const override;
47
47
48− Q_INVOKABLE void setAlerting(const QString &appId, bool alerting) override;
49 Q_INVOKABLE unity::shell::launcher::LauncherItemInterface* get(int index) const override;
48 Q_INVOKABLE unity::shell::launcher::LauncherItemInterface* get(int index) const override;
50 Q_INVOKABLE void move(int oldIndex, int newIndex) override;
49 Q_INVOKABLE void move(int oldIndex, int newIndex) override;
51 Q_INVOKABLE void pin(const QString &appId, int index = -1) override;
50 Q_INVOKABLE void pin(const QString &appId, int index = -1) override;
@@ -79,6 +78,7 @@ private Q_SLOTS:
79 void applicationAdded(const QModelIndex &parent, int row);
78 void applicationAdded(const QModelIndex &parent, int row);
80 void applicationRemoved(const QModelIndex &parent, int row);
79 void applicationRemoved(const QModelIndex &parent, int row);
81 void focusedAppIdChanged();
80 void focusedAppIdChanged();
81+ void applicationSurfaceCountChanged(int);
82
82
83private:
83private:
84 QList<LauncherItem*> m_list;
84 QList<LauncherItem*> m_list;
plugins/Unity/Platform/Platform.qmltypesdeleted−20
@@ -1,20 +0,0 @@
1−import QtQuick.tooling 1.1
2−
3−// This file describes the plugin-supplied types contained in the library.
4−// It is used for QML tooling purposes only.
5−//
6−// This file was auto-generated by:
7−// 'qmlplugindump -notrelocatable Unity.Platform 1.0 plugins'
8−
9−Module {
10− Component {
11− name: "Platform"
12− prototype: "QObject"
13− exports: ["Unity.Platform/Platform 1.0"]
14− isCreatable: false
15− isSingleton: true
16− exportMetaObjectRevisions: [0]
17− Property { name: "chassis"; type: "string"; isReadonly: true }
18− Property { name: "isPC"; type: "bool"; isReadonly: true }
19− }
20−}
plugins/Unity/Session/CMakeLists.txt+2
@@ -6,6 +6,8 @@ include_directories(
6 ${libunity8-private_SOURCE_DIR}
6 ${libunity8-private_SOURCE_DIR}
7)
7)
8
8
9+add_definitions(-DSM_BUSNAME=systemBus)
10+
9set(QMLSESSIONPLUGIN_SRC
11set(QMLSESSIONPLUGIN_SRC
10 plugin.cpp
12 plugin.cpp
11 dbusunitysessionservice.cpp
13 dbusunitysessionservice.cpp
plugins/Unity/Session/Session.qmltypesdeleted−85
@@ -1,85 +0,0 @@
1−import QtQuick.tooling 1.1
2−
3−// This file describes the plugin-supplied types contained in the library.
4−// It is used for QML tooling purposes only.
5−//
6−// This file was auto-generated by:
7−// 'qmlplugindump -notrelocatable Unity.Session 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "DBusUnitySessionService"
12− prototype: "UnityDBusObject"
13− exports: ["Unity.Session/DBusUnitySessionService 0.1"]
14− isCreatable: false
15− isSingleton: true
16− exportMetaObjectRevisions: [0]
17− Signal {
18− name: "LogoutRequested"
19− Parameter { name: "have_inhibitors"; type: "bool" }
20− }
21− Signal {
22− name: "logoutRequested"
23− Parameter { name: "have_inhibitors"; type: "bool" }
24− }
25− Signal {
26− name: "RebootRequested"
27− Parameter { name: "have_inhibitors"; type: "bool" }
28− }
29− Signal {
30− name: "rebootRequested"
31− Parameter { name: "have_inhibitors"; type: "bool" }
32− }
33− Signal {
34− name: "ShutdownRequested"
35− Parameter { name: "have_inhibitors"; type: "bool" }
36− }
37− Signal {
38− name: "shutdownRequested"
39− Parameter { name: "have_inhibitors"; type: "bool" }
40− }
41− Signal { name: "LogoutReady" }
42− Signal { name: "logoutReady" }
43− Signal { name: "LockRequested" }
44− Signal { name: "lockRequested" }
45− Signal { name: "Locked" }
46− Signal { name: "Unlocked" }
47− Method { name: "Logout" }
48− Method { name: "Reboot" }
49− Method { name: "Shutdown" }
50− Method { name: "Suspend" }
51− Method { name: "Hibernate" }
52− Method { name: "HybridSleep" }
53− Method { name: "RequestLogout" }
54− Method { name: "RequestReboot" }
55− Method { name: "RequestShutdown" }
56− Method { name: "EndSession" }
57− Method { name: "CanHibernate"; type: "bool" }
58− Method { name: "CanSuspend"; type: "bool" }
59− Method { name: "CanHybridSleep"; type: "bool" }
60− Method { name: "CanReboot"; type: "bool" }
61− Method { name: "CanShutdown"; type: "bool" }
62− Method { name: "CanLock"; type: "bool" }
63− Method { name: "UserName"; type: "string" }
64− Method { name: "RealName"; type: "string" }
65− Method { name: "HostName"; type: "string" }
66− Method { name: "PromptLock" }
67− Method { name: "Lock" }
68− Method { name: "IsLocked"; type: "bool" }
69− Method { name: "logout" }
70− Method { name: "reboot" }
71− Method { name: "shutdown" }
72− Method { name: "endSession" }
73− }
74− Component {
75− name: "OrientationLock"
76− prototype: "QObject"
77− exports: ["Unity.Session/OrientationLock 0.1"]
78− isCreatable: false
79− isSingleton: true
80− exportMetaObjectRevisions: [0]
81− Property { name: "enabled"; type: "bool"; isReadonly: true }
82− Property { name: "savedOrientation"; type: "Qt::ScreenOrientation" }
83− }
84− Component { name: "UnityDBusObject"; prototype: "QObject" }
85−}
plugins/Unity/Session/dbusunitysessionservice.cpp+57−18
@@ -64,19 +64,19 @@ public:
64 QStringLiteral("GetSessionByPID"));
64 QStringLiteral("GetSessionByPID"));
65 msg << (quint32) getpid();
65 msg << (quint32) getpid();
66
66
67− QDBusReply<QDBusObjectPath> reply = QDBusConnection::systemBus().call(msg);
67+ QDBusReply<QDBusObjectPath> reply = QDBusConnection::SM_BUSNAME().call(msg);
68 if (reply.isValid()) {
68 if (reply.isValid()) {
69 logindSessionPath = reply.value().path();
69 logindSessionPath = reply.value().path();
70
70
71 // start watching the Active property
71 // start watching the Active property
72− QDBusConnection::systemBus().connect(LOGIN1_SERVICE, logindSessionPath, QStringLiteral("org.freedesktop.DBus.Properties"), QStringLiteral("PropertiesChanged"),
72+ QDBusConnection::SM_BUSNAME().connect(LOGIN1_SERVICE, logindSessionPath, QStringLiteral("org.freedesktop.DBus.Properties"), QStringLiteral("PropertiesChanged"),
73− this, SLOT(onPropertiesChanged(QString,QVariantMap,QStringList)));
73+ this, SLOT(onPropertiesChanged(QString,QVariantMap,QStringList)));
74
74
75 setupSystemdInhibition();
75 setupSystemdInhibition();
76
76
77 // re-enable the inhibition upon resume from sleep
77 // re-enable the inhibition upon resume from sleep
78− QDBusConnection::systemBus().connect(LOGIN1_SERVICE, LOGIN1_PATH, LOGIN1_IFACE, QStringLiteral("PrepareForSleep"),
78+ QDBusConnection::SM_BUSNAME().connect(LOGIN1_SERVICE, LOGIN1_PATH, LOGIN1_IFACE, QStringLiteral("PrepareForSleep"),
79− this, SLOT(onResuming(bool)));
79+ this, SLOT(onResuming(bool)));
80 } else {
80 } else {
81 qWarning() << "Failed to get logind session path" << reply.error().message();
81 qWarning() << "Failed to get logind session path" << reply.error().message();
82 }
82 }
@@ -96,7 +96,7 @@ public:
96 msg << "Unity8 handles power events"; // why
96 msg << "Unity8 handles power events"; // why
97 msg << "block"; // mode
97 msg << "block"; // mode
98
98
99− QDBusPendingCall pendingCall = QDBusConnection::systemBus().asyncCall(msg);
99+ QDBusPendingCall pendingCall = QDBusConnection::SM_BUSNAME().asyncCall(msg);
100 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingCall, this);
100 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingCall, this);
101 connect(watcher, &QDBusPendingCallWatcher::finished,
101 connect(watcher, &QDBusPendingCallWatcher::finished,
102 this, [this](QDBusPendingCallWatcher* watcher) {
102 this, [this](QDBusPendingCallWatcher* watcher) {
@@ -114,7 +114,7 @@ public:
114 bool checkLogin1Call(const QString &method) const
114 bool checkLogin1Call(const QString &method) const
115 {
115 {
116 QDBusMessage msg = QDBusMessage::createMethodCall(LOGIN1_SERVICE, LOGIN1_PATH, LOGIN1_IFACE, method);
116 QDBusMessage msg = QDBusMessage::createMethodCall(LOGIN1_SERVICE, LOGIN1_PATH, LOGIN1_IFACE, method);
117− QDBusReply<QString> reply = QDBusConnection::systemBus().call(msg);
117+ QDBusReply<QString> reply = QDBusConnection::SM_BUSNAME().call(msg);
118 return reply.isValid() && (reply == QStringLiteral("yes") || reply == QStringLiteral("challenge"));
118 return reply.isValid() && (reply == QStringLiteral("yes") || reply == QStringLiteral("challenge"));
119 }
119 }
120
120
@@ -125,7 +125,7 @@ public:
125 LOGIN1_IFACE,
125 LOGIN1_IFACE,
126 method);
126 method);
127 msg.setArguments(args);
127 msg.setArguments(args);
128− QDBusConnection::systemBus().asyncCall(msg);
128+ QDBusConnection::SM_BUSNAME().asyncCall(msg);
129 }
129 }
130
130
131 void setActive(bool active)
131 void setActive(bool active)
@@ -157,7 +157,7 @@ public:
157 msg << LOGIN1_SESSION_IFACE;
157 msg << LOGIN1_SESSION_IFACE;
158 msg << ACTIVE_KEY;
158 msg << ACTIVE_KEY;
159
159
160− QDBusPendingCall pendingCall = QDBusConnection::systemBus().asyncCall(msg);
160+ QDBusPendingCall pendingCall = QDBusConnection::SM_BUSNAME().asyncCall(msg);
161 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingCall, this);
161 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingCall, this);
162 connect(watcher, &QDBusPendingCallWatcher::finished,
162 connect(watcher, &QDBusPendingCallWatcher::finished,
163 this, [this](QDBusPendingCallWatcher* watcher) {
163 this, [this](QDBusPendingCallWatcher* watcher) {
@@ -191,7 +191,7 @@ public:
191 msg << LOGIN1_SESSION_IFACE;
191 msg << LOGIN1_SESSION_IFACE;
192 msg << IDLE_SINCE_KEY;
192 msg << IDLE_SINCE_KEY;
193
193
194− QDBusReply<QVariant> reply = QDBusConnection::systemBus().call(msg);
194+ QDBusReply<QVariant> reply = QDBusConnection::SM_BUSNAME().call(msg);
195 if (reply.isValid()) {
195 if (reply.isValid()) {
196 return reply.value().value<quint64>();
196 return reply.value().value<quint64>();
197 } else {
197 } else {
@@ -208,7 +208,7 @@ public:
208 LOGIN1_SESSION_IFACE,
208 LOGIN1_SESSION_IFACE,
209 QStringLiteral("SetIdleHint"));
209 QStringLiteral("SetIdleHint"));
210 msg << idle;
210 msg << idle;
211− QDBusConnection::systemBus().asyncCall(msg);
211+ QDBusConnection::SM_BUSNAME().asyncCall(msg);
212 }
212 }
213
213
214private Q_SLOTS:
214private Q_SLOTS:
@@ -227,11 +227,14 @@ private Q_SLOTS:
227 {
227 {
228 if (!active) {
228 if (!active) {
229 setupSystemdInhibition();
229 setupSystemdInhibition();
230+ } else {
231+ Q_EMIT prepareForSleep();
230 }
232 }
231 }
233 }
232
234
233Q_SIGNALS:
235Q_SIGNALS:
234 void screensaverActiveChanged(bool active);
236 void screensaverActiveChanged(bool active);
237+ void prepareForSleep();
235};
238};
236
239
237Q_GLOBAL_STATIC(DBusUnitySessionServicePrivate, d)
240Q_GLOBAL_STATIC(DBusUnitySessionServicePrivate, d)
@@ -240,11 +243,12 @@ DBusUnitySessionService::DBusUnitySessionService()
240 : UnityDBusObject(QStringLiteral("/com/canonical/Unity/Session"), QStringLiteral("com.canonical.Unity"))
243 : UnityDBusObject(QStringLiteral("/com/canonical/Unity/Session"), QStringLiteral("com.canonical.Unity"))
241{
244{
242 if (!d->logindSessionPath.isEmpty()) {
245 if (!d->logindSessionPath.isEmpty()) {
243− // connect our Lock() slot to the logind's session Lock() signal
246+ // connect our PromptLock() slot to the logind's session Lock() signal
244− QDBusConnection::systemBus().connect(LOGIN1_SERVICE, d->logindSessionPath, LOGIN1_SESSION_IFACE, QStringLiteral("Lock"), this, SLOT(Lock()));
247+ QDBusConnection::SM_BUSNAME().connect(LOGIN1_SERVICE, d->logindSessionPath, LOGIN1_SESSION_IFACE, QStringLiteral("Lock"), this, SLOT(PromptLock()));
245 // ... and our Unlocked() signal to the logind's session Unlock() signal
248 // ... and our Unlocked() signal to the logind's session Unlock() signal
246 // (lightdm handles the unlocking by calling logind's Unlock method which in turn emits this signal we connect to)
249 // (lightdm handles the unlocking by calling logind's Unlock method which in turn emits this signal we connect to)
247− QDBusConnection::systemBus().connect(LOGIN1_SERVICE, d->logindSessionPath, LOGIN1_SESSION_IFACE, QStringLiteral("Unlock"), this, SIGNAL(Unlocked()));
250+ QDBusConnection::SM_BUSNAME().connect(LOGIN1_SERVICE, d->logindSessionPath, LOGIN1_SESSION_IFACE, QStringLiteral("Unlock"), this, SLOT(doUnlock()));
251+ connect(d, &DBusUnitySessionServicePrivate::prepareForSleep, this, &DBusUnitySessionService::PromptLock);
248 } else {
252 } else {
249 qWarning() << "Failed to connect to logind's session Lock/Unlock signals";
253 qWarning() << "Failed to connect to logind's session Lock/Unlock signals";
250 }
254 }
@@ -328,15 +332,41 @@ QString DBusUnitySessionService::HostName() const
328
332
329void DBusUnitySessionService::PromptLock()
333void DBusUnitySessionService::PromptLock()
330{
334{
335+ // Prompt as in quick. No locking animation needed. Usually used by
336+ // indicator-session in combination with a switch to greeter or other
337+ // user session.
331 Q_EMIT LockRequested();
338 Q_EMIT LockRequested();
332 Q_EMIT lockRequested();
339 Q_EMIT lockRequested();
333}
340}
334
341
335void DBusUnitySessionService::Lock()
342void DBusUnitySessionService::Lock()
336{
343{
337− // signal u8 to show the lockscreen/greeter
344+ // Normal lock (with animation, as compared to PromptLock above). Usually
345+ // used by indicator-session to lock the session in place.
346+ //
347+ // FIXME: We also -- as a bit of a hack around indicator-session not fully
348+ // supporting a phone profile -- switch to greeter here. The unity7 flow is
349+ // that the user chooses "Lock/Switch" from the indicator, and then can go
350+ // to greeter by selecting "Switch" again from the indicator, which is now
351+ // exposed by the desktop_lockscreen profile. But since in unity8, we try
352+ // to expose most things all the time, we don't use the separate lockscreen
353+ // profile. Instead, we just go directly to the greeter the first time
354+ // a user presses "Lock/Switch". This isn't what this DBus call is
355+ // supposed to do, but we can live with it for now.
356+ //
357+ // Here's a bug about indicator-session growing a converged Touch profile:
358+ // https://launchpad.net/bugs/1557716
359+ //
360+ // We only do this here in the animated-lock call because that's the only
361+ // time the indicator locks without also asking the display manager to
362+ // switch sessions on us. And since we are switching screens, we also
363+ // don't bother respecting the animate request, simply doing a PromptLock.
338 PromptLock();
364 PromptLock();
365+ switchToGreeter();
366+}
339
367
368+void DBusUnitySessionService::switchToGreeter()
369+{
340 // lock the session using the org.freedesktop.DisplayManager system DBUS service
370 // lock the session using the org.freedesktop.DisplayManager system DBUS service
341 const QString sessionPath = QString::fromLocal8Bit(qgetenv("XDG_SESSION_PATH"));
371 const QString sessionPath = QString::fromLocal8Bit(qgetenv("XDG_SESSION_PATH"));
342 QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("org.freedesktop.DisplayManager"),
372 QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("org.freedesktop.DisplayManager"),
@@ -344,7 +374,7 @@ void DBusUnitySessionService::Lock()
344 QStringLiteral("org.freedesktop.DisplayManager.Session"),
374 QStringLiteral("org.freedesktop.DisplayManager.Session"),
345 QStringLiteral("Lock"));
375 QStringLiteral("Lock"));
346
376
347− QDBusPendingCall pendingCall = QDBusConnection::systemBus().asyncCall(msg);
377+ QDBusPendingCall pendingCall = QDBusConnection::SM_BUSNAME().asyncCall(msg);
348 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingCall, this);
378 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingCall, this);
349 connect(watcher, &QDBusPendingCallWatcher::finished,
379 connect(watcher, &QDBusPendingCallWatcher::finished,
350 this, [this](QDBusPendingCallWatcher* watcher) {
380 this, [this](QDBusPendingCallWatcher* watcher) {
@@ -361,6 +391,12 @@ void DBusUnitySessionService::Lock()
361 });
391 });
362}
392}
363
393
394+void DBusUnitySessionService::doUnlock()
395+{
396+ Q_EMIT Unlocked();
397+ Q_EMIT unlocked();
398+}
399+
364bool DBusUnitySessionService::IsLocked() const
400bool DBusUnitySessionService::IsLocked() const
365{
401{
366 return !d->isSessionActive;
402 return !d->isSessionActive;
@@ -390,16 +426,19 @@ void DBusUnitySessionService::Shutdown()
390
426
391void DBusUnitySessionService::Suspend()
427void DBusUnitySessionService::Suspend()
392{
428{
429+ PromptLock();
393 d->makeLogin1Call(QStringLiteral("Suspend"), {false});
430 d->makeLogin1Call(QStringLiteral("Suspend"), {false});
394}
431}
395
432
396void DBusUnitySessionService::Hibernate()
433void DBusUnitySessionService::Hibernate()
397{
434{
435+ PromptLock();
398 d->makeLogin1Call(QStringLiteral("Hibernate"), {false});
436 d->makeLogin1Call(QStringLiteral("Hibernate"), {false});
399}
437}
400
438
401void DBusUnitySessionService::HybridSleep()
439void DBusUnitySessionService::HybridSleep()
402{
440{
441+ PromptLock();
403 d->makeLogin1Call(QStringLiteral("HybridSleep"), {false});
442 d->makeLogin1Call(QStringLiteral("HybridSleep"), {false});
404}
443}
405
444
@@ -479,7 +518,7 @@ void DBusGnomeScreensaverWrapper::SetActive(bool lock)
479
518
480void DBusGnomeScreensaverWrapper::Lock()
519void DBusGnomeScreensaverWrapper::Lock()
481{
520{
482− performAsyncUnityCall(QStringLiteral("Lock"));
521+ performAsyncUnityCall(QStringLiteral("PromptLock"));
483}
522}
484
523
485quint32 DBusGnomeScreensaverWrapper::GetActiveTime() const
524quint32 DBusGnomeScreensaverWrapper::GetActiveTime() const
@@ -516,7 +555,7 @@ bool DBusScreensaverWrapper::SetActive(bool lock)
516
555
517void DBusScreensaverWrapper::Lock()
556void DBusScreensaverWrapper::Lock()
518{
557{
519− performAsyncUnityCall(QStringLiteral("Lock"));
558+ performAsyncUnityCall(QStringLiteral("PromptLock"));
520}
559}
521
560
522quint32 DBusScreensaverWrapper::GetActiveTime() const
561quint32 DBusScreensaverWrapper::GetActiveTime() const
plugins/Unity/Session/dbusunitysessionservice.h+7
@@ -106,6 +106,7 @@ Q_SIGNALS:
106 * Emitted after the session has been unlocked.
106 * Emitted after the session has been unlocked.
107 */
107 */
108 Q_SCRIPTABLE void Unlocked();
108 Q_SCRIPTABLE void Unlocked();
109+ void unlocked();
109
110
110public Q_SLOTS:
111public Q_SLOTS:
111 /**
112 /**
@@ -258,6 +259,12 @@ public Q_SLOTS:
258 * @return whether the session is currently locked
259 * @return whether the session is currently locked
259 */
260 */
260 Q_SCRIPTABLE bool IsLocked() const;
261 Q_SCRIPTABLE bool IsLocked() const;
262+
263+private Q_SLOTS:
264+ void doUnlock();
265+
266+private:
267+ void switchToGreeter();
261};
268};
262
269
263class DBusGnomeSessionManagerWrapper : public UnityDBusObject
270class DBusGnomeSessionManagerWrapper : public UnityDBusObject
plugins/Utils/CMakeLists.txt+5
@@ -1,6 +1,10 @@
1include_directories(
1include_directories(
2 ${CMAKE_CURRENT_SOURCE_DIR}
2 ${CMAKE_CURRENT_SOURCE_DIR}
3 ${CMAKE_CURRENT_BINARY_DIR}
3 ${CMAKE_CURRENT_BINARY_DIR}
4+)
5+
6+include_directories(
7+ SYSTEM
4 ${Qt5Gui_PRIVATE_INCLUDE_DIRS}
8 ${Qt5Gui_PRIVATE_INCLUDE_DIRS}
5 ${Qt5Quick_PRIVATE_INCLUDE_DIRS}
9 ${Qt5Quick_PRIVATE_INCLUDE_DIRS}
6 ${GIO_INCLUDE_DIRS}
10 ${GIO_INCLUDE_DIRS}
@@ -9,6 +13,7 @@ include_directories(
9set(QMLPLUGIN_SRC
13set(QMLPLUGIN_SRC
10 activefocuslogger.cpp
14 activefocuslogger.cpp
11 ${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
12 applicationsfiltermodel.cpp
17 applicationsfiltermodel.cpp
13 constants.cpp
18 constants.cpp
14 WindowInputMonitor.cpp
19 WindowInputMonitor.cpp
plugins/Utils/Utils.qmltypesdeleted−175
@@ -1,175 +0,0 @@
1−import QtQuick.tooling 1.1
2−
3−// This file describes the plugin-supplied types contained in the library.
4−// It is used for QML tooling purposes only.
5−//
6−// This file was auto-generated by:
7−// 'qmlplugindump -notrelocatable Utils 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "EasingCurve"
12− prototype: "QObject"
13− exports: ["Utils/EasingCurve 0.1"]
14− exportMetaObjectRevisions: [0]
15− Property { name: "type"; type: "QEasingCurve::Type" }
16− Property { name: "period"; type: "double" }
17− Property { name: "progress"; type: "double" }
18− Property { name: "value"; type: "double"; isReadonly: true }
19− }
20− Component {
21− name: "QAbstractProxyModel"
22− prototype: "QAbstractItemModel"
23− Property { name: "sourceModel"; type: "QAbstractItemModel"; isPointer: true }
24− }
25− Component { name: "QIdentityProxyModel"; prototype: "QAbstractProxyModel" }
26− Component {
27− name: "QLimitProxyModelQML"
28− prototype: "QIdentityProxyModel"
29− exports: ["Utils/LimitProxyModel 0.1"]
30− exportMetaObjectRevisions: [0]
31− Property { name: "model"; type: "QAbstractItemModel"; isPointer: true }
32− Property { name: "limit"; type: "int" }
33− Property { name: "count"; type: "int"; isReadonly: true }
34− Signal { name: "totalCountChanged" }
35− }
36− Component {
37− name: "QSortFilterProxyModel"
38− prototype: "QAbstractProxyModel"
39− Property { name: "filterRegExp"; type: "QRegExp" }
40− Property { name: "filterKeyColumn"; type: "int" }
41− Property { name: "dynamicSortFilter"; type: "bool" }
42− Property { name: "filterCaseSensitivity"; type: "Qt::CaseSensitivity" }
43− Property { name: "sortCaseSensitivity"; type: "Qt::CaseSensitivity" }
44− Property { name: "isSortLocaleAware"; type: "bool" }
45− Property { name: "sortRole"; type: "int" }
46− Property { name: "filterRole"; type: "int" }
47− Method {
48− name: "setFilterRegExp"
49− Parameter { name: "pattern"; type: "string" }
50− }
51− Method {
52− name: "setFilterWildcard"
53− Parameter { name: "pattern"; type: "string" }
54− }
55− Method {
56− name: "setFilterFixedString"
57− Parameter { name: "pattern"; type: "string" }
58− }
59− Method { name: "clear" }
60− Method { name: "invalidate" }
61− }
62− Component {
63− name: "RelativeTimeFormatter"
64− prototype: "TimeFormatter"
65− exports: ["Utils/RelativeTimeFormatter 0.1"]
66− exportMetaObjectRevisions: [0]
67− }
68− Component {
69− name: "TimeFormatter"
70− prototype: "QObject"
71− exports: ["Utils/GDateTimeFormatter 0.1", "Utils/TimeFormatter 0.1"]
72− exportMetaObjectRevisions: [0, 0]
73− Property { name: "format"; type: "string" }
74− Property { name: "timeString"; type: "string"; isReadonly: true }
75− Property { name: "time"; type: "qlonglong" }
76− Signal {
77− name: "formatChanged"
78− Parameter { name: "format"; type: "string" }
79− }
80− Signal {
81− name: "timeStringChanged"
82− Parameter { name: "timeString"; type: "string" }
83− }
84− Signal {
85− name: "timeChanged"
86− Parameter { name: "time"; type: "qlonglong" }
87− }
88− }
89− Component {
90− name: "UnityMenuModelPaths"
91− prototype: "QObject"
92− exports: ["Utils/UnityMenuModelPaths 0.1"]
93− exportMetaObjectRevisions: [0]
94− Property { name: "source"; type: "QVariant" }
95− Property { name: "busName"; type: "QByteArray"; isReadonly: true }
96− Property { name: "actions"; type: "QVariantMap"; isReadonly: true }
97− Property { name: "menuObjectPath"; type: "QByteArray"; isReadonly: true }
98− Property { name: "busNameHint"; type: "QByteArray" }
99− Property { name: "actionsHint"; type: "QByteArray" }
100− Property { name: "menuObjectPathHint"; type: "QByteArray" }
101− }
102− Component {
103− name: "UnitySortFilterProxyModelQML"
104− prototype: "QSortFilterProxyModel"
105− exports: ["Utils/UnitySortFilterProxyModel 0.1"]
106− exportMetaObjectRevisions: [0]
107− Property { name: "model"; type: "QAbstractItemModel"; isPointer: true }
108− Property { name: "totalCount"; type: "int"; isReadonly: true }
109− Property { name: "count"; type: "int"; isReadonly: true }
110− Property { name: "invertMatch"; type: "bool" }
111− Signal {
112− name: "invertMatchChanged"
113− Parameter { type: "bool" }
114− }
115− Method {
116− name: "get"
117− type: "QVariantMap"
118− Parameter { name: "row"; type: "int" }
119− }
120− Method {
121− name: "data"
122− type: "QVariant"
123− Parameter { name: "row"; type: "int" }
124− Parameter { name: "role"; type: "int" }
125− }
126− Method { name: "count"; type: "int" }
127− Method {
128− name: "findFirst"
129− type: "int"
130− Parameter { name: "role"; type: "int" }
131− Parameter { name: "value"; type: "QVariant" }
132− }
133− Method {
134− name: "mapRowToSource"
135− type: "int"
136− Parameter { name: "row"; type: "int" }
137− }
138− Method {
139− name: "mapFromSource"
140− type: "int"
141− Parameter { name: "row"; type: "int" }
142− }
143− Method {
144− name: "mapToSource"
145− type: "int"
146− Parameter { name: "row"; type: "int" }
147− }
148− }
149− Component {
150− name: "WindowInputFilter"
151− defaultProperty: "data"
152− prototype: "QQuickItem"
153− exports: ["Utils/WindowInputFilter 0.1"]
154− exportMetaObjectRevisions: [0]
155− }
156− Component {
157− name: "WindowStateStorage"
158− prototype: "QObject"
159− exports: ["Utils/WindowStateStorage 0.1"]
160− isCreatable: false
161− isSingleton: true
162− exportMetaObjectRevisions: [0]
163− Method {
164− name: "saveGeometry"
165− Parameter { name: "windowId"; type: "string" }
166− Parameter { name: "rect"; type: "QRect" }
167− }
168− Method {
169− name: "getGeometry"
170− type: "QRect"
171− Parameter { name: "windowId"; type: "string" }
172− Parameter { name: "defaultValue"; type: "QRect" }
173− }
174− }
175−}
plugins/Utils/WindowInputMonitor.cpp+8−8
@@ -1,5 +1,5 @@
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
@@ -30,7 +30,6 @@ WindowInputMonitor::WindowInputMonitor(UnityUtil::AbstractTimer *timer,
30 QQuickItem *parent)
30 QQuickItem *parent)
31 : QQuickItem(parent)
31 : QQuickItem(parent)
32 , m_windowBeingTouched(false)
32 , m_windowBeingTouched(false)
33− , m_homeKeyPressed(false)
34 , m_windowLastTouchedTimer(elapsedTimer)
33 , m_windowLastTouchedTimer(elapsedTimer)
35 , m_activationTimer(timer)
34 , m_activationTimer(timer)
36{
35{
@@ -42,6 +41,7 @@ WindowInputMonitor::WindowInputMonitor(UnityUtil::AbstractTimer *timer,
42 connect(m_activationTimer, &UnityUtil::AbstractTimer::timeout,
41 connect(m_activationTimer, &UnityUtil::AbstractTimer::timeout,
43 this, &WindowInputMonitor::emitActivatedIfNoTouchesAround);
42 this, &WindowInputMonitor::emitActivatedIfNoTouchesAround);
44 m_activationTimer->setInterval(msecsWithoutTouches);
43 m_activationTimer->setInterval(msecsWithoutTouches);
44+ m_activationTimer->setSingleShot(true);
45}
45}
46
46
47WindowInputMonitor::~WindowInputMonitor()
47WindowInputMonitor::~WindowInputMonitor()
@@ -67,19 +67,19 @@ void WindowInputMonitor::update(QEvent *event)
67 if (event->type() == QEvent::KeyPress) {
67 if (event->type() == QEvent::KeyPress) {
68 QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
68 QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
69
69
70− m_homeKeyPressed = true;
70+ if (m_pressedHomeKey == 0 && m_homeKeys.contains(keyEvent->key()) && !keyEvent->isAutoRepeat()
71−
71+ && !m_activationTimer->isRunning()
72− if (keyEvent->key() == Qt::Key_Super_L && !keyEvent->isAutoRepeat()
73 && !m_windowBeingTouched
72 && !m_windowBeingTouched
74 && m_windowLastTouchedTimer->elapsed() >= msecsWithoutTouches) {
73 && m_windowLastTouchedTimer->elapsed() >= msecsWithoutTouches) {
74+ m_pressedHomeKey = keyEvent->key();
75 m_activationTimer->start();
75 m_activationTimer->start();
76 }
76 }
77
77
78 } else if (event->type() == QEvent::KeyRelease) {
78 } else if (event->type() == QEvent::KeyRelease) {
79 QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
79 QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
80
80
81− if (keyEvent->key() == Qt::Key_Super_L) {
81+ if (keyEvent->key() == m_pressedHomeKey) {
82− m_homeKeyPressed = false;
82+ m_pressedHomeKey = 0;
83 }
83 }
84
84
85 } else if (event->type() == QEvent::TouchBegin) {
85 } else if (event->type() == QEvent::TouchBegin) {
@@ -116,7 +116,7 @@ void WindowInputMonitor::setupFilterOnWindow(QQuickWindow *window)
116
116
117void WindowInputMonitor::emitActivatedIfNoTouchesAround()
117void WindowInputMonitor::emitActivatedIfNoTouchesAround()
118{
118{
119− if (!m_homeKeyPressed && !m_windowBeingTouched &&
119+ if (m_pressedHomeKey == 0 && !m_windowBeingTouched &&
120 (m_windowLastTouchedTimer->elapsed() > msecsWithoutTouches)) {
120 (m_windowLastTouchedTimer->elapsed() > msecsWithoutTouches)) {
121 Q_EMIT homeKeyActivated();
121 Q_EMIT homeKeyActivated();
122 }
122 }
plugins/Utils/WindowInputMonitor.h+8−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
@@ -18,6 +18,7 @@
18#define UNITY_WINDOWINPUTMONITOR_H
18#define UNITY_WINDOWINPUTMONITOR_H
19
19
20#include <QQuickItem>
20#include <QQuickItem>
21+#include <QList>
21#include <QPointer>
22#include <QPointer>
22
23
23#include "Timer.h"
24#include "Timer.h"
@@ -83,9 +84,14 @@ private Q_SLOTS:
83private:
84private:
84 QPointer<QQuickWindow> m_filteredWindow;
85 QPointer<QQuickWindow> m_filteredWindow;
85 bool m_windowBeingTouched;
86 bool m_windowBeingTouched;
86− bool m_homeKeyPressed;
87 UnityUtil::AbstractElapsedTimer *m_windowLastTouchedTimer;
87 UnityUtil::AbstractElapsedTimer *m_windowLastTouchedTimer;
88 UnityUtil::AbstractTimer *m_activationTimer;
88 UnityUtil::AbstractTimer *m_activationTimer;
89+
90+ // Qt::Keys that are mapped to our "home" key.
91+ QList<int> m_homeKeys{Qt::Key_Super_L, Qt::Key_HomePage};
92+ // Which Qt::Key from m_homeKeys is currently pressed.
93+ // 0 if none
94+ int m_pressedHomeKey{0};
89};
95};
90
96
91#endif // UNITY_WINDOWINPUTMONITOR_H
97#endif // UNITY_WINDOWINPUTMONITOR_H
plugins/Utils/globalfunctions.cpp+1−4
@@ -16,11 +16,8 @@
16
16
17#include "globalfunctions.h"
17#include "globalfunctions.h"
18
18
19−#pragma GCC diagnostic push
20−#pragma GCC diagnostic ignored "-pedantic"
21−#include <private/qquickitem_p.h>
22−#pragma GCC diagnostic pop
23#include <QQmlEngine>
19#include <QQmlEngine>
20+#include <private/qquickitem_p.h>
24
21
25GlobalFunctions::GlobalFunctions(QObject *parent)
22GlobalFunctions::GlobalFunctions(QObject *parent)
26 : QObject(parent)
23 : QObject(parent)
plugins/Utils/windowstatestorage.cpp+2−2
@@ -95,7 +95,7 @@ void WindowStateStorage::saveStage(const QString &appId, int stage)
95 saveValue(queryString);
95 saveValue(queryString);
96}
96}
97
97
98−int WindowStateStorage::getStage(const QString &appId) const
98+int WindowStateStorage::getStage(const QString &appId, int defaultValue) const
99{
99{
100 const QString queryString = QStringLiteral("SELECT * FROM stage WHERE appId = '%1';")
100 const QString queryString = QStringLiteral("SELECT * FROM stage WHERE appId = '%1';")
101 .arg(sanitiseString(appId));
101 .arg(sanitiseString(appId));
@@ -103,7 +103,7 @@ int WindowStateStorage::getStage(const QString &appId) const
103 QSqlQuery query = getValue(queryString);
103 QSqlQuery query = getValue(queryString);
104
104
105 if (!query.first()) {
105 if (!query.first()) {
106− return unity::shell::application::ApplicationInfoInterface::MainStage;
106+ return defaultValue;
107 }
107 }
108 return query.value("stage").toInt();
108 return query.value("stage").toInt();
109}
109}
plugins/Utils/windowstatestorage.h+14−4
@@ -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
@@ -25,9 +25,19 @@ class WindowStateStorage: public QObject
25 Q_ENUMS(WindowState)
25 Q_ENUMS(WindowState)
26public:
26public:
27 enum WindowState {
27 enum WindowState {
28− WindowStateNormal,
28+ WindowStateNormal = 1 << 0,
29− WindowStateMaximized
29+ WindowStateMaximized = 1 << 1,
30+ WindowStateMinimized = 1 << 2,
31+ WindowStateFullscreen = 1 << 3,
32+ WindowStateMaximizedLeft = 1 << 4,
33+ WindowStateMaximizedRight = 1 << 5,
34+ WindowStateMaximizedHorizontally = 1 << 6,
35+ WindowStateMaximizedVertically = 1 << 7
30 };
36 };
37+ Q_DECLARE_FLAGS(WindowStates, WindowState)
38+#if (QT_VERSION >= QT_VERSION_CHECK(5, 5, 0))
39+ Q_FLAG(WindowStates)
40+#endif
31
41
32 WindowStateStorage(QObject *parent = 0);
42 WindowStateStorage(QObject *parent = 0);
33 virtual ~WindowStateStorage();
43 virtual ~WindowStateStorage();
@@ -39,7 +49,7 @@ public:
39 Q_INVOKABLE QRect getGeometry(const QString &windowId, const QRect defaultValue) const;
49 Q_INVOKABLE QRect getGeometry(const QString &windowId, const QRect defaultValue) const;
40
50
41 Q_INVOKABLE void saveStage(const QString &appId, int stage);
51 Q_INVOKABLE void saveStage(const QString &appId, int stage);
42− Q_INVOKABLE int getStage(const QString &appId) const;
52+ Q_INVOKABLE int getStage(const QString &appId, int defaultValue) const;
43
53
44private:
54private:
45 void initdb();
55 void initdb();
plugins/WindowManager/CMakeLists.txt+1
@@ -4,6 +4,7 @@ set(WINDOWMANAGER_SRC
4 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationInfoInterface.h
4 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationInfoInterface.h
5 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/Mir.h
5 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/Mir.h
6 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceInterface.h
6 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceInterface.h
7+ ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceListInterface.h
7 )
8 )
8
9
9add_library(windowmanager-qml SHARED ${WINDOWMANAGER_SRC})
10add_library(windowmanager-qml SHARED ${WINDOWMANAGER_SRC})
plugins/Wizard/Wizard.qmltypesdeleted−33
@@ -1,33 +0,0 @@
1−import QtQuick.tooling 1.1
2−
3−// This file describes the plugin-supplied types contained in the library.
4−// It is used for QML tooling purposes only.
5−//
6−// This file was auto-generated by:
7−// 'qmlplugindump -notrelocatable Wizard 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "PageList"
12− prototype: "QObject"
13− exports: ["Wizard/PageList 0.1"]
14− exportMetaObjectRevisions: [0]
15− Property { name: "index"; type: "int"; isReadonly: true }
16− Property { name: "numPages"; type: "int"; isReadonly: true }
17− Method { name: "prev"; type: "string" }
18− Method { name: "next"; type: "string" }
19− }
20− Component {
21− name: "System"
22− prototype: "QObject"
23− exports: ["Wizard/System 0.1"]
24− isCreatable: false
25− isSingleton: true
26− exportMetaObjectRevisions: [0]
27− Property { name: "wizardEnabled"; type: "bool" }
28− Method {
29− name: "updateSessionLanguage"
30− Parameter { name: "locale"; type: "string" }
31− }
32− }
33−}
po/aa.po+262−100
@@ -7,7 +7,7 @@ msgid ""
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-05-18 11:19+0000\n"
10+"POT-Creation-Date: 2016-07-11 17:24+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,39 +15,39 @@ 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-05-19 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2016-07-14 06:00+0000\n"
19−"X-Generator: Launchpad (build 18025)\n"
19+"X-Generator: Launchpad (build 18115)\n"
20
20
21−#: plugins/IntegratedLightDM/Greeter.cpp:112
21+#: plugins/LightDM/Greeter.cpp:123
22msgid "Password: "
22msgid "Password: "
23msgstr "Cuumita "
23msgstr "Cuumita "
24
24
25−#: plugins/Unity/Launcher/launcheritem.cpp:48
25+#: plugins/Unity/Launcher/launcheritem.cpp:49
26−#: plugins/Unity/Launcher/launcheritem.cpp:107
26+#: plugins/Unity/Launcher/launcheritem.cpp:108
27msgid "Pin shortcut"
27msgid "Pin shortcut"
28msgstr ""
28msgstr ""
29
29
30−#: plugins/Unity/Launcher/launcheritem.cpp:53
30+#: plugins/Unity/Launcher/launcheritem.cpp:54
31msgid "Quit"
31msgid "Quit"
32msgstr "Kat"
32msgstr "Kat"
33
33
34−#: plugins/Unity/Launcher/launcheritem.cpp:107
34+#: plugins/Unity/Launcher/launcheritem.cpp:108
35msgid "Unpin shortcut"
35msgid "Unpin shortcut"
36msgstr ""
36msgstr ""
37
37
38−#: qml/Components/DelayedLockscreen.qml:49
38+#: qml/Components/DelayedLockscreen.qml:50
39msgid "Device Locked"
39msgid "Device Locked"
40msgstr ""
40msgstr ""
41
41
42−#: qml/Components/DelayedLockscreen.qml:64
42+#: qml/Components/DelayedLockscreen.qml:65
43msgid "You have been locked out due to too many failed passphrase attempts."
43msgid "You have been locked out due to too many failed passphrase attempts."
44msgstr ""
44msgstr ""
45
45
46−#: qml/Components/DelayedLockscreen.qml:65
46+#: qml/Components/DelayedLockscreen.qml:66
47msgid "You have been locked out due to too many failed passcode attempts."
47msgid "You have been locked out due to too many failed passcode attempts."
48msgstr ""
48msgstr ""
49
49
50−#: qml/Components/DelayedLockscreen.qml:74
50+#: qml/Components/DelayedLockscreen.qml:75
51#, qt-format
51#, qt-format
52msgid "Please wait %1 minute and then try again…"
52msgid "Please wait %1 minute and then try again…"
53msgid_plural "Please wait %1 minutes and then try again…"
53msgid_plural "Please wait %1 minutes and then try again…"
@@ -74,7 +74,7 @@ msgid "Log Out"
74msgstr "Eweq"
74msgstr "Eweq"
75
75
76#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
76#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
77−#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
77+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
78#: qml/Wizard/Pages/passcode-set.qml:32
78#: qml/Wizard/Pages/passcode-set.qml:32
79msgid "Cancel"
79msgid "Cancel"
80msgstr "Bayis"
80msgstr "Bayis"
@@ -117,18 +117,188 @@ msgctxt "Button: Restart the system"
117msgid "Restart"
117msgid "Restart"
118msgstr "Wadir-qimbis"
118msgstr "Wadir-qimbis"
119
119
120+#: qml/Components/KeyboardShortcutsOverlay.qml:41
121+msgid "Keyboard Shortcuts"
122+msgstr ""
123+
124+#: qml/Components/KeyboardShortcutsOverlay.qml:55
125+msgid "Unity 8"
126+msgstr ""
127+
128+#: qml/Components/KeyboardShortcutsOverlay.qml:62
129+msgid "PrtScr"
130+msgstr ""
131+
132+#: qml/Components/KeyboardShortcutsOverlay.qml:67
133+msgid "Takes a screenshot."
134+msgstr ""
135+
136+#: qml/Components/KeyboardShortcutsOverlay.qml:75
137+msgid "Alt + PrtScr"
138+msgstr ""
139+
140+#: qml/Components/KeyboardShortcutsOverlay.qml:80
141+msgid "Takes a screenshot of a window."
142+msgstr ""
143+
144+#: qml/Components/KeyboardShortcutsOverlay.qml:88
145+msgid "Super + Space"
146+msgstr ""
147+
148+#: qml/Components/KeyboardShortcutsOverlay.qml:93
149+msgid "Switches to next keyboard layout."
150+msgstr ""
151+
152+#: qml/Components/KeyboardShortcutsOverlay.qml:101
153+msgid "Super + Shift + Space"
154+msgstr ""
155+
156+#: qml/Components/KeyboardShortcutsOverlay.qml:106
157+msgid "Switches to previous keyboard layout."
158+msgstr ""
159+
160+#: qml/Components/KeyboardShortcutsOverlay.qml:118
161+msgid "Launcher"
162+msgstr ""
163+
164+#: qml/Components/KeyboardShortcutsOverlay.qml:125
165+msgid "Super (Hold)"
166+msgstr ""
167+
168+#: qml/Components/KeyboardShortcutsOverlay.qml:130
169+msgid "Opens the launcher, displays shortcuts."
170+msgstr ""
171+
172+#: qml/Components/KeyboardShortcutsOverlay.qml:138
173+msgid "Alt + F1"
174+msgstr ""
175+
176+#: qml/Components/KeyboardShortcutsOverlay.qml:143
177+msgid "Opens launcher keyboard navigation mode."
178+msgstr ""
179+
180+#: qml/Components/KeyboardShortcutsOverlay.qml:151
181+msgid "Super + Tab"
182+msgstr ""
183+
184+#: qml/Components/KeyboardShortcutsOverlay.qml:156
185+msgid "Switches applications via the launcher."
186+msgstr ""
187+
188+#: qml/Components/KeyboardShortcutsOverlay.qml:164
189+msgid "Super + 0 to 9"
190+msgstr ""
191+
192+#: qml/Components/KeyboardShortcutsOverlay.qml:169
193+msgid "Same as clicking on a launcher icon."
194+msgstr ""
195+
196+#: qml/Components/KeyboardShortcutsOverlay.qml:181
197+msgid "Scopes"
198+msgstr ""
199+
200+#: qml/Components/KeyboardShortcutsOverlay.qml:188
201+msgid "Super (Tap)"
202+msgstr ""
203+
204+#: qml/Components/KeyboardShortcutsOverlay.qml:193
205+msgid "Opens the Scopes home."
206+msgstr ""
207+
208+#: qml/Components/KeyboardShortcutsOverlay.qml:209
209+msgid "Switching"
210+msgstr ""
211+
212+#: qml/Components/KeyboardShortcutsOverlay.qml:216
213+msgid "Alt + Tab"
214+msgstr ""
215+
216+#: qml/Components/KeyboardShortcutsOverlay.qml:221
217+msgid "Switches between applications."
218+msgstr ""
219+
220+#: qml/Components/KeyboardShortcutsOverlay.qml:229
221+msgid "Super + W"
222+msgstr ""
223+
224+#: qml/Components/KeyboardShortcutsOverlay.qml:234
225+msgid "Opens the desktop spread."
226+msgstr ""
227+
228+#: qml/Components/KeyboardShortcutsOverlay.qml:242
229+msgid "Cursor Left or Right"
230+msgstr ""
231+
232+#: qml/Components/KeyboardShortcutsOverlay.qml:247
233+msgid "Moves the focus."
234+msgstr ""
235+
236+#: qml/Components/KeyboardShortcutsOverlay.qml:259
237+msgid "Windows"
238+msgstr ""
239+
240+#: qml/Components/KeyboardShortcutsOverlay.qml:266
241+msgid "Ctrl + Super + D"
242+msgstr ""
243+
244+#: qml/Components/KeyboardShortcutsOverlay.qml:271
245+msgid "Minimizes all windows."
246+msgstr ""
247+
248+#: qml/Components/KeyboardShortcutsOverlay.qml:279
249+msgid "Ctrl + Super + Up"
250+msgstr ""
251+
252+#: qml/Components/KeyboardShortcutsOverlay.qml:284
253+msgid "Maximizes the current window."
254+msgstr ""
255+
256+#: qml/Components/KeyboardShortcutsOverlay.qml:292
257+msgid "Ctrl + Super + Down"
258+msgstr ""
259+
260+#: qml/Components/KeyboardShortcutsOverlay.qml:297
261+msgid "Minimizes or restores the current window."
262+msgstr ""
263+
264+#: qml/Components/KeyboardShortcutsOverlay.qml:305
265+msgid "Ctrl + Super + Left or Right"
266+msgstr ""
267+
268+#: qml/Components/KeyboardShortcutsOverlay.qml:310
269+msgid "Semi-maximizes the current window."
270+msgstr ""
271+
272+#: qml/Components/KeyboardShortcutsOverlay.qml:318
273+msgid "Alt + F4"
274+msgstr ""
275+
276+#: qml/Components/KeyboardShortcutsOverlay.qml:323
277+msgid "Closes the current window."
278+msgstr ""
279+
120−#: qml/Components/Lockscreen.qml:231
280+#: qml/Components/Lockscreen.qml:239
121msgid "Return to Call"
281msgid "Return to Call"
122msgstr "Seecol gacis"
282msgstr "Seecol gacis"
123
283
124−#: qml/Components/Lockscreen.qml:231
284+#: qml/Components/Lockscreen.qml:239
125msgid "Emergency Call"
285msgid "Emergency Call"
126msgstr ""
286msgstr ""
127
287
128−#: qml/Components/Lockscreen.qml:263
288+#: qml/Components/Lockscreen.qml:271
129msgid "OK"
289msgid "OK"
130msgstr "Hayya"
290msgstr "Hayya"
131
291
292+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
293+#, qt-format
294+msgid "%1:%2:%3"
295+msgstr ""
296+
297+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
298+#, qt-format
299+msgid "%1:%2"
300+msgstr ""
301+
132#: qml/Components/ModeSwitchWarningDialog.qml:32
302#: qml/Components/ModeSwitchWarningDialog.qml:32
133msgid "Apps may have unsaved data:"
303msgid "Apps may have unsaved data:"
134msgstr ""
304msgstr ""
@@ -155,26 +325,30 @@ msgstr ""
155msgid "Close all"
325msgid "Close all"
156msgstr "Inkih alif"
326msgstr "Inkih alif"
157
327
328+#: qml/Components/SharingPicker.qml:54
329+msgid "Preview Share Item"
330+msgstr ""
331+
158−#: qml/Dash/DashPageHeader.qml:337
332+#: qml/Dash/DashPageHeader.qml:333
159msgctxt "Button: Open the Ubuntu Store"
333msgctxt "Button: Open the Ubuntu Store"
160msgid "Store"
334msgid "Store"
161msgstr ""
335msgstr ""
162
336
163−#: qml/Dash/DashPageHeader.qml:344
337+#: qml/Dash/DashPageHeader.qml:340
164msgctxt "Button: Start a search in the current dash scope"
338msgctxt "Button: Start a search in the current dash scope"
165msgid "Search"
339msgid "Search"
166msgstr "Goranto"
340msgstr "Goranto"
167
341
168−#: qml/Dash/DashPageHeader.qml:354
342+#: qml/Dash/DashPageHeader.qml:350
169msgctxt "Button: Show the current dash scope settings"
343msgctxt "Button: Show the current dash scope settings"
170msgid "Settings"
344msgid "Settings"
171msgstr "Massosu"
345msgstr "Massosu"
172
346
173−#: qml/Dash/DashPageHeader.qml:361
347+#: qml/Dash/DashPageHeader.qml:357
174msgid "Remove from Favorites"
348msgid "Remove from Favorites"
175msgstr ""
349msgstr ""
176
350
177−#: qml/Dash/DashPageHeader.qml:361
351+#: qml/Dash/DashPageHeader.qml:357
178msgid "Add to Favorites"
352msgid "Add to Favorites"
179msgstr ""
353msgstr ""
180
354
@@ -186,24 +360,24 @@ msgstr ""
186msgid "Reset"
360msgid "Reset"
187msgstr ""
361msgstr ""
188
362
189−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:764
363+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
190msgid "Show less"
364msgid "Show less"
191msgstr ""
365msgstr ""
192
366
193−#: qml/Dash/GenericScopeView.qml:579
367+#: qml/Dash/GenericScopeView.qml:580
194msgid "Show all"
368msgid "Show all"
195msgstr ""
369msgstr ""
196
370
197−#: qml/Dash/GenericScopeView.qml:636
371+#: qml/Dash/GenericScopeView.qml:637
198msgctxt "Label: Hint for dash search line edit"
372msgctxt "Label: Hint for dash search line edit"
199msgid "Search"
373msgid "Search"
200msgstr "Goranto"
374msgstr "Goranto"
201
375
202−#: qml/Dash/PageHeaderExtraPanel.qml:55
376+#: qml/Dash/PageHeaderExtraPanel.qml:56
203msgid "Recent Searches"
377msgid "Recent Searches"
204msgstr ""
378msgstr ""
205
379
206−#: qml/Dash/PageHeaderExtraPanel.qml:66
380+#: qml/Dash/PageHeaderExtraPanel.qml:67
207msgid "Clear All"
381msgid "Clear All"
208msgstr ""
382msgstr ""
209
383
@@ -216,22 +390,18 @@ msgid "Less..."
216msgstr ""
390msgstr ""
217
391
218#: qml/Dash/Previews/PreviewCommentInput.qml:68
392#: qml/Dash/Previews/PreviewCommentInput.qml:68
219−#: qml/Dash/Previews/PreviewRatingInput.qml:174
393+#: qml/Dash/Previews/PreviewRatingInput.qml:175
220msgid "Send"
394msgid "Send"
221msgstr "Rub"
395msgstr "Rub"
222
396
223−#: qml/Dash/Previews/PreviewRatingInput.qml:84
397+#: qml/Dash/Previews/PreviewRatingInput.qml:82
224msgid "Rate this"
398msgid "Rate this"
225msgstr ""
399msgstr ""
226
400
227−#: qml/Dash/Previews/PreviewRatingInput.qml:129
401+#: qml/Dash/Previews/PreviewRatingInput.qml:157
228msgid "Add a review"
402msgid "Add a review"
229msgstr ""
403msgstr ""
230
404
231−#: qml/Dash/Previews/PreviewSharing.qml:66
232−msgid "Preview Share Item"
233−msgstr ""
234−
235#: qml/Dash/PullToRefreshScopeStyle.qml:55
405#: qml/Dash/PullToRefreshScopeStyle.qml:55
236msgid "Pull to refresh…"
406msgid "Pull to refresh…"
237msgstr ""
407msgstr ""
@@ -244,88 +414,100 @@ msgstr ""
244msgid "Enable location data"
414msgid "Enable location data"
245msgstr ""
415msgstr ""
246
416
247−#: qml/Dash/ScopesList.qml:67
417+#: qml/Dash/ScopesList.qml:55
248msgid "Manage"
418msgid "Manage"
249msgstr ""
419msgstr ""
250
420
251−#: qml/Dash/ScopesList.qml:113
421+#: qml/Dash/ScopesList.qml:102
252msgid "Home"
422msgid "Home"
253msgstr "Dabqi"
423msgstr "Dabqi"
254
424
255−#: qml/Dash/ScopesList.qml:114
425+#: qml/Dash/ScopesList.qml:103
256msgid "Also installed"
426msgid "Also installed"
257msgstr ""
427msgstr ""
258
428
259−#: qml/DisabledScreenNotice.qml:104
429+#: qml/DisabledScreenNotice.qml:109
260msgid ""
430msgid ""
261"Your device is now connected to an external display. Use this screen as a "
431"Your device is now connected to an external display. Use this screen as a "
262"touch pad to interact with the pointer."
432"touch pad to interact with the pointer."
263msgstr ""
433msgstr ""
264
434
265−#: qml/Greeter/CoverPage.qml:118
435+#: qml/Greeter/CoverPage.qml:127
266msgid "Unlock"
436msgid "Unlock"
267msgstr ""
437msgstr ""
268
438
439+#: qml/Greeter/Greeter.qml:555
440+msgid "Try again"
441+msgstr ""
442+
269−#: qml/Greeter/LoginList.qml:239
443+#: qml/Greeter/LoginList.qml:63
444+msgid "Passphrase"
445+msgstr ""
446+
447+#: qml/Greeter/LoginList.qml:64
448+msgid "Passcode"
449+msgstr ""
450+
451+#: qml/Greeter/LoginList.qml:87
270msgid "Retry"
452msgid "Retry"
271msgstr "Qagis"
453msgstr "Qagis"
272
454
273−#: qml/Greeter/LoginList.qml:240
455+#: qml/Greeter/LoginList.qml:88
274−msgid "Tap to unlock"
456+msgid "Log In"
275msgstr ""
457msgstr ""
276
458
277−#: qml/Greeter/NarrowView.qml:54
459+#: qml/Greeter/NarrowView.qml:55
278msgid "Sorry, incorrect passphrase."
460msgid "Sorry, incorrect passphrase."
279msgstr ""
461msgstr ""
280
462
281−#: qml/Greeter/NarrowView.qml:55
463+#: qml/Greeter/NarrowView.qml:56
282msgid "Sorry, incorrect passcode."
464msgid "Sorry, incorrect passcode."
283msgstr ""
465msgstr ""
284
466
285−#: qml/Greeter/NarrowView.qml:56
467+#: qml/Greeter/NarrowView.qml:57
286msgid "This will be your last attempt."
468msgid "This will be your last attempt."
287msgstr ""
469msgstr ""
288
470
289−#: qml/Greeter/NarrowView.qml:58
471+#: qml/Greeter/NarrowView.qml:59
290msgid ""
472msgid ""
291"If passphrase is entered incorrectly, your phone will conduct a factory "
473"If passphrase is entered incorrectly, your phone will conduct a factory "
292"reset and all personal data will be deleted."
474"reset and all personal data will be deleted."
293msgstr ""
475msgstr ""
294
476
295−#: qml/Greeter/NarrowView.qml:59
477+#: qml/Greeter/NarrowView.qml:60
296msgid ""
478msgid ""
297"If passcode is entered incorrectly, your phone will conduct a factory reset "
479"If passcode is entered incorrectly, your phone will conduct a factory reset "
298"and all personal data will be deleted."
480"and all personal data will be deleted."
299msgstr ""
481msgstr ""
300
482
301−#: qml/Greeter/NarrowView.qml:116
483+#: qml/Greeter/NarrowView.qml:129
302#, qt-format
484#, qt-format
303msgid "Enter %1"
485msgid "Enter %1"
304msgstr "%1 culus"
486msgstr "%1 culus"
305
487
306−#: qml/Greeter/NarrowView.qml:117
488+#: qml/Greeter/NarrowView.qml:130
307msgid "Enter passphrase"
489msgid "Enter passphrase"
308msgstr "Tatur-maxco culus"
490msgstr "Tatur-maxco culus"
309
491
310−#: qml/Greeter/NarrowView.qml:118
492+#: qml/Greeter/NarrowView.qml:131
311msgid "Enter passcode"
493msgid "Enter passcode"
312msgstr "Tatur-mudenta culus"
494msgstr "Tatur-mudenta culus"
313
495
314−#: qml/Greeter/NarrowView.qml:119
496+#: qml/Greeter/NarrowView.qml:135
315#, qt-format
497#, qt-format
316msgid "Sorry, incorrect %1"
498msgid "Sorry, incorrect %1"
317msgstr ""
499msgstr ""
318
500
319−#: qml/Greeter/NarrowView.qml:120
501+#: qml/Greeter/NarrowView.qml:136
320msgid "Sorry, incorrect passphrase"
502msgid "Sorry, incorrect passphrase"
321msgstr ""
503msgstr ""
322
504
323−#: qml/Greeter/NarrowView.qml:121
505+#: qml/Greeter/NarrowView.qml:137
324msgctxt "passphrase"
506msgctxt "passphrase"
325msgid "Please re-enter"
507msgid "Please re-enter"
326msgstr ""
508msgstr ""
327
509
328−#: qml/Greeter/NarrowView.qml:122
510+#: qml/Greeter/NarrowView.qml:138
329msgid "Sorry, incorrect passcode"
511msgid "Sorry, incorrect passcode"
330msgstr ""
512msgstr ""
331
513
@@ -400,18 +582,18 @@ msgstr "Duudumteh"
400msgid "Failed, tap to retry"
582msgid "Failed, tap to retry"
401msgstr ""
583msgstr ""
402
584
403−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
585+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
404−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
586+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
405msgctxt "Button: Send a reply message"
587msgctxt "Button: Send a reply message"
406msgid "Send"
588msgid "Send"
407msgstr "Rub"
589msgstr "Rub"
408
590
409−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
591+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
410msgctxt "Label: Hint in message indicator line edit"
592msgctxt "Label: Hint in message indicator line edit"
411msgid "Reply"
593msgid "Reply"
412msgstr ""
594msgstr ""
413
595
414−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
596+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
415msgctxt "Button: Call back on phone"
597msgctxt "Button: Call back on phone"
416msgid "Call back"
598msgid "Call back"
417msgstr ""
599msgstr ""
@@ -420,32 +602,12 @@ msgstr ""
420msgid "Drag using 3 fingers any application from one window to the other"
602msgid "Drag using 3 fingers any application from one window to the other"
421msgstr ""
603msgstr ""
422
604
423−#: qml/Tutorial/TutorialBottom.qml:78
424−msgid "Swipe up to add a contact"
425−msgstr ""
426−
427−#: qml/Tutorial/TutorialBottom.qml:80
428−msgid "Swipe up for favorite calculations"
429−msgstr ""
430−
431−#: qml/Tutorial/TutorialBottom.qml:82
432−msgid "Swipe up for recent calls"
433−msgstr ""
434−
435−#: qml/Tutorial/TutorialBottom.qml:84
436−msgid "Swipe up to create a message"
437−msgstr ""
438−
439−#: qml/Tutorial/TutorialBottom.qml:85
440−msgid "Swipe up to manage the app"
441−msgstr ""
442−
443−#: qml/Tutorial/TutorialLeftLong.qml:47
605+#: qml/Tutorial/TutorialLeftLong.qml:49
444msgid "Long swipe from the left edge to open the Today scope"
606msgid "Long swipe from the left edge to open the Today scope"
445msgstr ""
607msgstr ""
446
608
447#: qml/Tutorial/TutorialLeft.qml:47
609#: qml/Tutorial/TutorialLeft.qml:47
448−msgid "Swipe from the left edge to open the launcher"
610+msgid "Short swipe from the left edge to open the launcher"
449msgstr ""
611msgstr ""
450
612
451#: qml/Tutorial/TutorialRight.qml:55
613#: qml/Tutorial/TutorialRight.qml:55
@@ -453,15 +615,11 @@ msgid "Push your mouse against the right edge to view your open apps"
453msgstr ""
615msgstr ""
454
616
455#: qml/Tutorial/TutorialRight.qml:56
617#: qml/Tutorial/TutorialRight.qml:56
456−msgid "Short or long swipe from the right edge to view your open apps"
618+msgid "Swipe from the right edge to view your open apps"
457msgstr ""
619msgstr ""
458
620
459#: qml/Tutorial/TutorialTop.qml:53
621#: qml/Tutorial/TutorialTop.qml:53
460−msgid "Swipe from the top right edge to open the notification bar"
622+msgid "Swipe from the top edge to access notifications and quick settings"
461−msgstr ""
462−
463−#: qml/Tutorial/TutorialTop.qml:54
464−msgid "Swipe from the top edge to open the notification bar"
465msgstr ""
623msgstr ""
466
624
467#: qml/Wizard/Page.qml:54
625#: qml/Wizard/Page.qml:54
@@ -473,11 +631,11 @@ msgstr "Derre"
473msgid "Language"
631msgid "Language"
474msgstr ""
632msgstr ""
475
633
476−#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
634+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
477−#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
635+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
478#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
636#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
479#: qml/Wizard/Pages/75-report-check.qml:84
637#: qml/Wizard/Pages/75-report-check.qml:84
480−#: qml/Wizard/Pages/passcode-desktop.qml:124
638+#: qml/Wizard/Pages/passcode-desktop.qml:141
481#: qml/Wizard/Pages/password-set.qml:141
639#: qml/Wizard/Pages/password-set.qml:141
482msgid "Next"
640msgid "Next"
483msgstr ""
641msgstr ""
@@ -539,7 +697,7 @@ msgstr ""
539msgid "Time Zone"
697msgid "Time Zone"
540msgstr ""
698msgstr ""
541
699
542−#: qml/Wizard/Pages/50-timezone.qml:178
700+#: qml/Wizard/Pages/50-timezone.qml:181
543msgid "Enter your city"
701msgid "Enter your city"
544msgstr ""
702msgstr ""
545
703
@@ -629,7 +787,7 @@ msgid "Service Terms"
629msgstr ""
787msgstr ""
630
788
631#: qml/Wizard/Pages/passcode-confirm.qml:43
789#: qml/Wizard/Pages/passcode-confirm.qml:43
632−#: qml/Wizard/Pages/passcode-desktop.qml:80
790+#: qml/Wizard/Pages/passcode-desktop.qml:96
633msgid "Confirm passcode"
791msgid "Confirm passcode"
634msgstr ""
792msgstr ""
635
793
@@ -646,24 +804,24 @@ msgstr ""
646msgid "Lock Screen Passcode"
804msgid "Lock Screen Passcode"
647msgstr ""
805msgstr ""
648
806
649−#: qml/Wizard/Pages/passcode-desktop.qml:56
807+#: qml/Wizard/Pages/passcode-desktop.qml:60
650msgid "Enter 4 numbers to setup your passcode"
808msgid "Enter 4 numbers to setup your passcode"
651msgstr ""
809msgstr ""
652
810
653−#: qml/Wizard/Pages/passcode-desktop.qml:65
811+#: qml/Wizard/Pages/passcode-desktop.qml:76
654#: qml/Wizard/Pages/passcode-set.qml:54
812#: qml/Wizard/Pages/passcode-set.qml:54
655msgid "Choose passcode"
813msgid "Choose passcode"
656msgstr ""
814msgstr ""
657
815
658−#: qml/Wizard/Pages/passcode-desktop.qml:105
816+#: qml/Wizard/Pages/passcode-desktop.qml:126
659msgid "Passcode too short"
817msgid "Passcode too short"
660msgstr ""
818msgstr ""
661
819
662−#: qml/Wizard/Pages/passcode-desktop.qml:107
820+#: qml/Wizard/Pages/passcode-desktop.qml:128
663msgid "Passcodes match"
821msgid "Passcodes match"
664msgstr ""
822msgstr ""
665
823
666−#: qml/Wizard/Pages/passcode-desktop.qml:109
824+#: qml/Wizard/Pages/passcode-desktop.qml:130
667msgid "Passcodes do not match"
825msgid "Passcodes do not match"
668msgstr ""
826msgstr ""
669
827
@@ -712,26 +870,30 @@ msgid "To proceed with no SIM tap Skip."
712msgstr ""
870msgstr ""
713
871
714#: qml/Wizard/PasswordMeter.qml:87
872#: qml/Wizard/PasswordMeter.qml:87
715−msgid "Passwords match"
873+msgid "Password too short"
716msgstr ""
874msgstr ""
717
875
718#: qml/Wizard/PasswordMeter.qml:89
876#: qml/Wizard/PasswordMeter.qml:89
877+msgid "Passwords match"
878+msgstr ""
879+
880+#: qml/Wizard/PasswordMeter.qml:91
719msgid "Passwords do not match"
881msgid "Passwords do not match"
720msgstr ""
882msgstr ""
721
883
722−#: qml/Wizard/PasswordMeter.qml:93
884+#: qml/Wizard/PasswordMeter.qml:95
723msgid "Strong password"
885msgid "Strong password"
724msgstr ""
886msgstr ""
725
887
726−#: qml/Wizard/PasswordMeter.qml:95
888+#: qml/Wizard/PasswordMeter.qml:97
727msgid "Fair password"
889msgid "Fair password"
728msgstr ""
890msgstr ""
729
891
730−#: qml/Wizard/PasswordMeter.qml:97
892+#: qml/Wizard/PasswordMeter.qml:99
731msgid "Weak password"
893msgid "Weak password"
732msgstr ""
894msgstr ""
733
895
734−#: qml/Wizard/PasswordMeter.qml:99
896+#: qml/Wizard/PasswordMeter.qml:101
735msgid "Very weak password"
897msgid "Very weak password"
736msgstr ""
898msgstr ""
737
899
po/am.po+300−108
@@ -7,47 +7,47 @@ 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-05-18 11:19+0000\n"
10+"POT-Creation-Date: 2016-07-11 17:24+0000\n"
11−"PO-Revision-Date: 2016-03-24 19:07+0000\n"
11+"PO-Revision-Date: 2016-07-05 02:15+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-05-19 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2016-07-14 06:00+0000\n"
19−"X-Generator: Launchpad (build 18025)\n"
19+"X-Generator: Launchpad (build 18115)\n"
20
20
21−#: plugins/IntegratedLightDM/Greeter.cpp:112
21+#: plugins/LightDM/Greeter.cpp:123
22msgid "Password: "
22msgid "Password: "
23msgstr "የ መግቢያ ቃል: "
23msgstr "የ መግቢያ ቃል: "
24
24
25−#: plugins/Unity/Launcher/launcheritem.cpp:48
25+#: plugins/Unity/Launcher/launcheritem.cpp:49
26−#: plugins/Unity/Launcher/launcheritem.cpp:107
26+#: plugins/Unity/Launcher/launcheritem.cpp:108
27msgid "Pin shortcut"
27msgid "Pin shortcut"
28msgstr "አቋራጭ ማጣበቂያ"
28msgstr "አቋራጭ ማጣበቂያ"
29
29
30−#: plugins/Unity/Launcher/launcheritem.cpp:53
30+#: plugins/Unity/Launcher/launcheritem.cpp:54
31msgid "Quit"
31msgid "Quit"
32msgstr "ማጥፊያ"
32msgstr "ማጥፊያ"
33
33
34−#: plugins/Unity/Launcher/launcheritem.cpp:107
34+#: plugins/Unity/Launcher/launcheritem.cpp:108
35msgid "Unpin shortcut"
35msgid "Unpin shortcut"
36msgstr "አቋራጭ መለያያ"
36msgstr "አቋራጭ መለያያ"
37
37
38−#: qml/Components/DelayedLockscreen.qml:49
38+#: qml/Components/DelayedLockscreen.qml:50
39msgid "Device Locked"
39msgid "Device Locked"
40msgstr "አካሉ ተቆልፏል"
40msgstr "አካሉ ተቆልፏል"
41
41
42−#: qml/Components/DelayedLockscreen.qml:64
42+#: qml/Components/DelayedLockscreen.qml:65
43msgid "You have been locked out due to too many failed passphrase attempts."
43msgid "You have been locked out due to too many failed passphrase attempts."
44msgstr "ብዙ ጊዜ የተሳሳተ የ ማለፊያ ሀረግ ለማስገባት በ መሞከር ምክንያት ስልኩ ተቆልፏል"
44msgstr "ብዙ ጊዜ የተሳሳተ የ ማለፊያ ሀረግ ለማስገባት በ መሞከር ምክንያት ስልኩ ተቆልፏል"
45
45
46−#: qml/Components/DelayedLockscreen.qml:65
46+#: qml/Components/DelayedLockscreen.qml:66
47msgid "You have been locked out due to too many failed passcode attempts."
47msgid "You have been locked out due to too many failed passcode attempts."
48msgstr "ብዙ ጊዜ የተሳሳተ የ ማለፊያ ኮድ ለማስገባት በ መሞከር ምክንያት ስልኩ ተቆልፏል"
48msgstr "ብዙ ጊዜ የተሳሳተ የ ማለፊያ ኮድ ለማስገባት በ መሞከር ምክንያት ስልኩ ተቆልፏል"
49
49
50−#: qml/Components/DelayedLockscreen.qml:74
50+#: qml/Components/DelayedLockscreen.qml:75
51#, qt-format
51#, qt-format
52msgid "Please wait %1 minute and then try again…"
52msgid "Please wait %1 minute and then try again…"
53msgid_plural "Please wait %1 minutes and then try again…"
53msgid_plural "Please wait %1 minutes and then try again…"
@@ -74,7 +74,7 @@ msgid "Log Out"
74msgstr "መውጫ"
74msgstr "መውጫ"
75
75
76#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
76#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
77−#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
77+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
78#: qml/Wizard/Pages/passcode-set.qml:32
78#: qml/Wizard/Pages/passcode-set.qml:32
79msgid "Cancel"
79msgid "Cancel"
80msgstr "መሰረዣ"
80msgstr "መሰረዣ"
@@ -119,18 +119,188 @@ msgctxt "Button: Restart the system"
119msgid "Restart"
119msgid "Restart"
120msgstr "እንደገና ማስጀመሪያ"
120msgstr "እንደገና ማስጀመሪያ"
121
121
122+#: qml/Components/KeyboardShortcutsOverlay.qml:41
123+msgid "Keyboard Shortcuts"
124+msgstr "የ ፊደል ገበታ አቋራጮች"
125+
126+#: qml/Components/KeyboardShortcutsOverlay.qml:55
127+msgid "Unity 8"
128+msgstr "Unity 8"
129+
130+#: qml/Components/KeyboardShortcutsOverlay.qml:62
131+msgid "PrtScr"
132+msgstr "PrtScr"
133+
134+#: qml/Components/KeyboardShortcutsOverlay.qml:67
135+msgid "Takes a screenshot."
136+msgstr "መመልከቻ ፎቶ ማንሻ"
137+
138+#: qml/Components/KeyboardShortcutsOverlay.qml:75
139+msgid "Alt + PrtScr"
140+msgstr "Alt + PrtScr"
141+
142+#: qml/Components/KeyboardShortcutsOverlay.qml:80
143+msgid "Takes a screenshot of a window."
144+msgstr "የ መስኮት መመልከቻ ፎቶ ማንሻ"
145+
146+#: qml/Components/KeyboardShortcutsOverlay.qml:88
147+msgid "Super + Space"
148+msgstr "Super + Space"
149+
150+#: qml/Components/KeyboardShortcutsOverlay.qml:93
151+msgid "Switches to next keyboard layout."
152+msgstr "የሚቀጥለው የ ፊደል ገበታ እቅድ መቀየሪያ"
153+
154+#: qml/Components/KeyboardShortcutsOverlay.qml:101
155+msgid "Super + Shift + Space"
156+msgstr "Super + Shift + Space"
157+
158+#: qml/Components/KeyboardShortcutsOverlay.qml:106
159+msgid "Switches to previous keyboard layout."
160+msgstr "ወዳለፈው የ ፊደል ገበታ እቅድ መቀየሪያ"
161+
162+#: qml/Components/KeyboardShortcutsOverlay.qml:118
163+msgid "Launcher"
164+msgstr "ማስነሻ"
165+
166+#: qml/Components/KeyboardShortcutsOverlay.qml:125
167+msgid "Super (Hold)"
168+msgstr "Super (ይጫኑ)"
169+
170+#: qml/Components/KeyboardShortcutsOverlay.qml:130
171+msgid "Opens the launcher, displays shortcuts."
172+msgstr "ማስነሻውን መክፈቻ እና አቋራጮች ማሳያ"
173+
174+#: qml/Components/KeyboardShortcutsOverlay.qml:138
175+msgid "Alt + F1"
176+msgstr "Alt + F1"
177+
178+#: qml/Components/KeyboardShortcutsOverlay.qml:143
179+msgid "Opens launcher keyboard navigation mode."
180+msgstr "መክፈቻ በ ፊደል ገበታ መቃኛ ዘዴ ማስነሻ"
181+
182+#: qml/Components/KeyboardShortcutsOverlay.qml:151
183+msgid "Super + Tab"
184+msgstr "Super + Tab"
185+
186+#: qml/Components/KeyboardShortcutsOverlay.qml:156
187+msgid "Switches applications via the launcher."
188+msgstr "መተግበሪያዎችን በ ማስጀመሪያ መቀየሪያ"
189+
190+#: qml/Components/KeyboardShortcutsOverlay.qml:164
191+msgid "Super + 0 to 9"
192+msgstr "Super + 0 እስከ 9"
193+
194+#: qml/Components/KeyboardShortcutsOverlay.qml:169
195+msgid "Same as clicking on a launcher icon."
196+msgstr "ተመሳሳይ በ ማስጀመሪያ ምልክት ላይ እንደ መጫን"
197+
198+#: qml/Components/KeyboardShortcutsOverlay.qml:181
199+msgid "Scopes"
200+msgstr "ክልል"
201+
202+#: qml/Components/KeyboardShortcutsOverlay.qml:188
203+msgid "Super (Tap)"
204+msgstr "Super (Tap)"
205+
206+#: qml/Components/KeyboardShortcutsOverlay.qml:193
207+msgid "Opens the Scopes home."
208+msgstr "የ ክልል ቤት መክፈቻ"
209+
210+#: qml/Components/KeyboardShortcutsOverlay.qml:209
211+msgid "Switching"
212+msgstr "በ መቀየር ላይ"
213+
214+#: qml/Components/KeyboardShortcutsOverlay.qml:216
215+msgid "Alt + Tab"
216+msgstr "Alt + Tab"
217+
218+#: qml/Components/KeyboardShortcutsOverlay.qml:221
219+msgid "Switches between applications."
220+msgstr "በ መተግበሪያዎች መካከል መቀያየሪያ"
221+
222+#: qml/Components/KeyboardShortcutsOverlay.qml:229
223+msgid "Super + W"
224+msgstr "Super + W"
225+
226+#: qml/Components/KeyboardShortcutsOverlay.qml:234
227+msgid "Opens the desktop spread."
228+msgstr "የ ዴስክቶፕ ማስፊያ መክፈቻ"
229+
230+#: qml/Components/KeyboardShortcutsOverlay.qml:242
231+msgid "Cursor Left or Right"
232+msgstr "መጠቆሚያ የ ግራ ወይንም የ ቀኝ"
233+
234+#: qml/Components/KeyboardShortcutsOverlay.qml:247
235+msgid "Moves the focus."
236+msgstr "ትኩረት ማንቀሳቀሻ"
237+
238+#: qml/Components/KeyboardShortcutsOverlay.qml:259
239+msgid "Windows"
240+msgstr "መስኮቶች"
241+
242+#: qml/Components/KeyboardShortcutsOverlay.qml:266
243+msgid "Ctrl + Super + D"
244+msgstr "Ctrl + Super + D"
245+
246+#: qml/Components/KeyboardShortcutsOverlay.qml:271
247+msgid "Minimizes all windows."
248+msgstr "ሁሉንም መስኮቶች ማሳነሻ"
249+
250+#: qml/Components/KeyboardShortcutsOverlay.qml:279
251+msgid "Ctrl + Super + Up"
252+msgstr "Ctrl + Super + Up"
253+
254+#: qml/Components/KeyboardShortcutsOverlay.qml:284
255+msgid "Maximizes the current window."
256+msgstr "የ አሁኑን መስኮት ማሳደጊያ"
257+
258+#: qml/Components/KeyboardShortcutsOverlay.qml:292
259+msgid "Ctrl + Super + Down"
260+msgstr "Ctrl + Super + Down"
261+
262+#: qml/Components/KeyboardShortcutsOverlay.qml:297
263+msgid "Minimizes or restores the current window."
264+msgstr "የ አሁኑን መስኮትማሳነሻ ወይንም እንደ ነበር መመለሻ"
265+
266+#: qml/Components/KeyboardShortcutsOverlay.qml:305
267+msgid "Ctrl + Super + Left or Right"
268+msgstr "Ctrl + Super + Left or Right"
269+
270+#: qml/Components/KeyboardShortcutsOverlay.qml:310
271+msgid "Semi-maximizes the current window."
272+msgstr "የ አሁኑን መስኮት በ ንዑስ-ማሳደጊያ"
273+
274+#: qml/Components/KeyboardShortcutsOverlay.qml:318
275+msgid "Alt + F4"
276+msgstr "Alt + F4"
277+
278+#: qml/Components/KeyboardShortcutsOverlay.qml:323
279+msgid "Closes the current window."
280+msgstr "የ አሁኑን መስኮት መዝጊያ"
281+
122−#: qml/Components/Lockscreen.qml:231
282+#: qml/Components/Lockscreen.qml:239
123msgid "Return to Call"
283msgid "Return to Call"
124msgstr "ወደ ጥሪ መመለሻ"
284msgstr "ወደ ጥሪ መመለሻ"
125
285
126−#: qml/Components/Lockscreen.qml:231
286+#: qml/Components/Lockscreen.qml:239
127msgid "Emergency Call"
287msgid "Emergency Call"
128msgstr "የ ድንገተኛ ጥሪ"
288msgstr "የ ድንገተኛ ጥሪ"
129
289
130−#: qml/Components/Lockscreen.qml:263
290+#: qml/Components/Lockscreen.qml:271
131msgid "OK"
291msgid "OK"
132msgstr "እሺ"
292msgstr "እሺ"
133
293
294+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
295+#, qt-format
296+msgid "%1:%2:%3"
297+msgstr "%1:%2:%3"
298+
299+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
300+#, qt-format
301+msgid "%1:%2"
302+msgstr "%1:%2"
303+
134#: qml/Components/ModeSwitchWarningDialog.qml:32
304#: qml/Components/ModeSwitchWarningDialog.qml:32
135msgid "Apps may have unsaved data:"
305msgid "Apps may have unsaved data:"
136msgstr "መተግበሪያው ያልተቀመጠ ዳታ ይዟል:"
306msgstr "መተግበሪያው ያልተቀመጠ ዳታ ይዟል:"
@@ -157,26 +327,30 @@ msgstr "አሁን እንደገና መገናኛ!"
157msgid "Close all"
327msgid "Close all"
158msgstr "ሁሉንም መዝጊያ"
328msgstr "ሁሉንም መዝጊያ"
159
329
330+#: qml/Components/SharingPicker.qml:54
331+msgid "Preview Share Item"
332+msgstr "የሚካፈሉትን እቃ ቅድመ እይታ"
333+
160−#: qml/Dash/DashPageHeader.qml:337
334+#: qml/Dash/DashPageHeader.qml:333
161msgctxt "Button: Open the Ubuntu Store"
335msgctxt "Button: Open the Ubuntu Store"
162msgid "Store"
336msgid "Store"
163msgstr "ማስቀመጫ"
337msgstr "ማስቀመጫ"
164
338
165−#: qml/Dash/DashPageHeader.qml:344
339+#: qml/Dash/DashPageHeader.qml:340
166msgctxt "Button: Start a search in the current dash scope"
340msgctxt "Button: Start a search in the current dash scope"
167msgid "Search"
341msgid "Search"
168msgstr "መፈለጊያ"
342msgstr "መፈለጊያ"
169
343
170−#: qml/Dash/DashPageHeader.qml:354
344+#: qml/Dash/DashPageHeader.qml:350
171msgctxt "Button: Show the current dash scope settings"
345msgctxt "Button: Show the current dash scope settings"
172msgid "Settings"
346msgid "Settings"
173msgstr "ማሰናጃዎች"
347msgstr "ማሰናጃዎች"
174
348
175−#: qml/Dash/DashPageHeader.qml:361
349+#: qml/Dash/DashPageHeader.qml:357
176msgid "Remove from Favorites"
350msgid "Remove from Favorites"
177msgstr "ከምወዳቸው ማስወገጃ"
351msgstr "ከምወዳቸው ማስወገጃ"
178
352
179−#: qml/Dash/DashPageHeader.qml:361
353+#: qml/Dash/DashPageHeader.qml:357
180msgid "Add to Favorites"
354msgid "Add to Favorites"
181msgstr "ወደምወዳቸው መጨመሪያ"
355msgstr "ወደምወዳቸው መጨመሪያ"
182
356
@@ -188,24 +362,24 @@ msgstr "የ እርስዎን ውጤቶች እንደገና ማጣሪያ"
188msgid "Reset"
362msgid "Reset"
189msgstr "እንደ ነበረ መመለሻ"
363msgstr "እንደ ነበረ መመለሻ"
190
364
191−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:764
365+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
192msgid "Show less"
366msgid "Show less"
193−msgstr ""
367+msgstr "ትንሽ ማሳያ"
194
368
195−#: qml/Dash/GenericScopeView.qml:579
369+#: qml/Dash/GenericScopeView.qml:580
196msgid "Show all"
370msgid "Show all"
197−msgstr ""
371+msgstr "ሁሉንም ማሳያ"
198
372
199−#: qml/Dash/GenericScopeView.qml:636
373+#: qml/Dash/GenericScopeView.qml:637
200msgctxt "Label: Hint for dash search line edit"
374msgctxt "Label: Hint for dash search line edit"
201msgid "Search"
375msgid "Search"
202msgstr "መፈለጊያ"
376msgstr "መፈለጊያ"
203
377
204−#: qml/Dash/PageHeaderExtraPanel.qml:55
378+#: qml/Dash/PageHeaderExtraPanel.qml:56
205msgid "Recent Searches"
379msgid "Recent Searches"
206msgstr "የ ቅርብ ጊዜ ፍለጋዎች"
380msgstr "የ ቅርብ ጊዜ ፍለጋዎች"
207
381
208−#: qml/Dash/PageHeaderExtraPanel.qml:66
382+#: qml/Dash/PageHeaderExtraPanel.qml:67
209msgid "Clear All"
383msgid "Clear All"
210msgstr "ሁሉንም ማጽጃ"
384msgstr "ሁሉንም ማጽጃ"
211
385
@@ -218,22 +392,18 @@ msgid "Less..."
218msgstr "አነስተኛ..."
392msgstr "አነስተኛ..."
219
393
220#: qml/Dash/Previews/PreviewCommentInput.qml:68
394#: qml/Dash/Previews/PreviewCommentInput.qml:68
221−#: qml/Dash/Previews/PreviewRatingInput.qml:174
395+#: qml/Dash/Previews/PreviewRatingInput.qml:175
222msgid "Send"
396msgid "Send"
223msgstr "መላኪያ"
397msgstr "መላኪያ"
224
398
225−#: qml/Dash/Previews/PreviewRatingInput.qml:84
399+#: qml/Dash/Previews/PreviewRatingInput.qml:82
226msgid "Rate this"
400msgid "Rate this"
227msgstr "ለዚህ ደረጃ ይስጡ"
401msgstr "ለዚህ ደረጃ ይስጡ"
228
402
229−#: qml/Dash/Previews/PreviewRatingInput.qml:129
403+#: qml/Dash/Previews/PreviewRatingInput.qml:157
230msgid "Add a review"
404msgid "Add a review"
231msgstr "ግምገማ መጨመሪያ"
405msgstr "ግምገማ መጨመሪያ"
232
406
233−#: qml/Dash/Previews/PreviewSharing.qml:66
234−msgid "Preview Share Item"
235−msgstr "የሚካፈሉትን እቃ ቅድመ እይታ"
236−
237#: qml/Dash/PullToRefreshScopeStyle.qml:55
407#: qml/Dash/PullToRefreshScopeStyle.qml:55
238msgid "Pull to refresh…"
408msgid "Pull to refresh…"
239msgstr "ይሳቡ ለማነቃቃት…"
409msgstr "ይሳቡ ለማነቃቃት…"
@@ -246,49 +416,61 @@ msgstr "ይልቀቁ ለማነቃቃት…"
246msgid "Enable location data"
416msgid "Enable location data"
247msgstr "የአካባቢ ዳታ ማስቻያ"
417msgstr "የአካባቢ ዳታ ማስቻያ"
248
418
249−#: qml/Dash/ScopesList.qml:67
419+#: qml/Dash/ScopesList.qml:55
250msgid "Manage"
420msgid "Manage"
251msgstr "አስተዳዳሪ"
421msgstr "አስተዳዳሪ"
252
422
253−#: qml/Dash/ScopesList.qml:113
423+#: qml/Dash/ScopesList.qml:102
254msgid "Home"
424msgid "Home"
255msgstr "ቤት"
425msgstr "ቤት"
256
426
257−#: qml/Dash/ScopesList.qml:114
427+#: qml/Dash/ScopesList.qml:103
258msgid "Also installed"
428msgid "Also installed"
259msgstr "እንዲሁም የተገጠሙ"
429msgstr "እንዲሁም የተገጠሙ"
260
430
261−#: qml/DisabledScreenNotice.qml:104
431+#: qml/DisabledScreenNotice.qml:109
262msgid ""
432msgid ""
263"Your device is now connected to an external display. Use this screen as a "
433"Your device is now connected to an external display. Use this screen as a "
264"touch pad to interact with the pointer."
434"touch pad to interact with the pointer."
265msgstr "የ እርስዎ አካል አሁን ከ ውጪ ማሳያ ጋር ተገናኝቷል: ይህን መመልከቻ እንደ ተችፓድ መጠቀሚያ"
435msgstr "የ እርስዎ አካል አሁን ከ ውጪ ማሳያ ጋር ተገናኝቷል: ይህን መመልከቻ እንደ ተችፓድ መጠቀሚያ"
266
436
267−#: qml/Greeter/CoverPage.qml:118
437+#: qml/Greeter/CoverPage.qml:127
268msgid "Unlock"
438msgid "Unlock"
269msgstr "መክፈቻ"
439msgstr "መክፈቻ"
270
440
441+#: qml/Greeter/Greeter.qml:555
442+msgid "Try again"
443+msgstr "እንደገና ይሞክሩ"
444+
445+#: qml/Greeter/LoginList.qml:63
446+msgid "Passphrase"
447+msgstr ""
448+
271−#: qml/Greeter/LoginList.qml:239
449+#: qml/Greeter/LoginList.qml:64
450+msgid "Passcode"
451+msgstr ""
452+
453+#: qml/Greeter/LoginList.qml:87
272msgid "Retry"
454msgid "Retry"
273msgstr "እንደገና ይሞክሩ"
455msgstr "እንደገና ይሞክሩ"
274
456
275−#: qml/Greeter/LoginList.qml:240
457+#: qml/Greeter/LoginList.qml:88
276−msgid "Tap to unlock"
458+msgid "Log In"
277−msgstr "ለመክፈት መታ ያድርጉ"
459+msgstr "መግቢያ"
278
460
279−#: qml/Greeter/NarrowView.qml:54
461+#: qml/Greeter/NarrowView.qml:55
280msgid "Sorry, incorrect passphrase."
462msgid "Sorry, incorrect passphrase."
281msgstr "አዝናለሁ የተሳሳተ የማለፊያ ሐረግ"
463msgstr "አዝናለሁ የተሳሳተ የማለፊያ ሐረግ"
282
464
283−#: qml/Greeter/NarrowView.qml:55
465+#: qml/Greeter/NarrowView.qml:56
284msgid "Sorry, incorrect passcode."
466msgid "Sorry, incorrect passcode."
285msgstr "አዝናለሁ የተሳሳተ የማለፊያ ኮድ"
467msgstr "አዝናለሁ የተሳሳተ የማለፊያ ኮድ"
286
468
287−#: qml/Greeter/NarrowView.qml:56
469+#: qml/Greeter/NarrowView.qml:57
288msgid "This will be your last attempt."
470msgid "This will be your last attempt."
289msgstr "ይህ የመጨረሻ ሙከራዎ ነው"
471msgstr "ይህ የመጨረሻ ሙከራዎ ነው"
290
472
291−#: qml/Greeter/NarrowView.qml:58
473+#: qml/Greeter/NarrowView.qml:59
292msgid ""
474msgid ""
293"If passphrase is entered incorrectly, your phone will conduct a factory "
475"If passphrase is entered incorrectly, your phone will conduct a factory "
294"reset and all personal data will be deleted."
476"reset and all personal data will be deleted."
@@ -296,7 +478,7 @@ msgstr ""
296"የተሳሳተ የማለፊያ ሐረግ ካስገቡ የ እርስዎ ስልክ ወደ ነበረበት ወደ ፋክቶሪው ዘዴ ይመለሳል: እና የ ግል ዳታ በሙሉ "
478"የተሳሳተ የማለፊያ ሐረግ ካስገቡ የ እርስዎ ስልክ ወደ ነበረበት ወደ ፋክቶሪው ዘዴ ይመለሳል: እና የ ግል ዳታ በሙሉ "
297"ይጠፋል"
479"ይጠፋል"
298
480
299−#: qml/Greeter/NarrowView.qml:59
481+#: qml/Greeter/NarrowView.qml:60
300msgid ""
482msgid ""
301"If passcode is entered incorrectly, your phone will conduct a factory reset "
483"If passcode is entered incorrectly, your phone will conduct a factory reset "
302"and all personal data will be deleted."
484"and all personal data will be deleted."
@@ -304,34 +486,34 @@ msgstr ""
304"የተሳሳተ የማለፊያ ኮድ ካስገቡ የ እርስዎ ስልክ ወደ ነበረበት ወደ ፋክቶሪው ዘዴ ይመለሳል: እና የ ግል ዳታ በሙሉ "
486"የተሳሳተ የማለፊያ ኮድ ካስገቡ የ እርስዎ ስልክ ወደ ነበረበት ወደ ፋክቶሪው ዘዴ ይመለሳል: እና የ ግል ዳታ በሙሉ "
305"ይጠፋል"
487"ይጠፋል"
306
488
307−#: qml/Greeter/NarrowView.qml:116
489+#: qml/Greeter/NarrowView.qml:129
308#, qt-format
490#, qt-format
309msgid "Enter %1"
491msgid "Enter %1"
310msgstr "ማስገቢያ %1"
492msgstr "ማስገቢያ %1"
311
493
312−#: qml/Greeter/NarrowView.qml:117
494+#: qml/Greeter/NarrowView.qml:130
313msgid "Enter passphrase"
495msgid "Enter passphrase"
314msgstr "የ ማለፊያ ሀረግ ያስገቡ"
496msgstr "የ ማለፊያ ሀረግ ያስገቡ"
315
497
316−#: qml/Greeter/NarrowView.qml:118
498+#: qml/Greeter/NarrowView.qml:131
317msgid "Enter passcode"
499msgid "Enter passcode"
318msgstr "የ ማለፊያ ኮድ ያስገቡ"
500msgstr "የ ማለፊያ ኮድ ያስገቡ"
319
501
320−#: qml/Greeter/NarrowView.qml:119
502+#: qml/Greeter/NarrowView.qml:135
321#, qt-format
503#, qt-format
322msgid "Sorry, incorrect %1"
504msgid "Sorry, incorrect %1"
323msgstr "አዝናለሁ: የተሳሳተ%1"
505msgstr "አዝናለሁ: የተሳሳተ%1"
324
506
325−#: qml/Greeter/NarrowView.qml:120
507+#: qml/Greeter/NarrowView.qml:136
326msgid "Sorry, incorrect passphrase"
508msgid "Sorry, incorrect passphrase"
327msgstr "አዝናለሁ የተሳሳተ የማለፊያ ሐረግ"
509msgstr "አዝናለሁ የተሳሳተ የማለፊያ ሐረግ"
328
510
329−#: qml/Greeter/NarrowView.qml:121
511+#: qml/Greeter/NarrowView.qml:137
330msgctxt "passphrase"
512msgctxt "passphrase"
331msgid "Please re-enter"
513msgid "Please re-enter"
332msgstr "እባክዎን እንደገና-ያስገቡ"
514msgstr "እባክዎን እንደገና-ያስገቡ"
333
515
334−#: qml/Greeter/NarrowView.qml:122
516+#: qml/Greeter/NarrowView.qml:138
335msgid "Sorry, incorrect passcode"
517msgid "Sorry, incorrect passcode"
336msgstr "አዝናለሁ የተሳሳተ የማለፊያ ኮድ"
518msgstr "አዝናለሁ የተሳሳተ የማለፊያ ኮድ"
337
519
@@ -406,18 +588,18 @@ msgstr "ጨርሷል"
406msgid "Failed, tap to retry"
588msgid "Failed, tap to retry"
407msgstr "አልተቻለም: እንደገና ለመሞከር መታ ያድርጉ"
589msgstr "አልተቻለም: እንደገና ለመሞከር መታ ያድርጉ"
408
590
409−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
591+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
410−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
592+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
411msgctxt "Button: Send a reply message"
593msgctxt "Button: Send a reply message"
412msgid "Send"
594msgid "Send"
413msgstr "መላኪያ"
595msgstr "መላኪያ"
414
596
415−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
597+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
416msgctxt "Label: Hint in message indicator line edit"
598msgctxt "Label: Hint in message indicator line edit"
417msgid "Reply"
599msgid "Reply"
418msgstr "መመለሻ"
600msgstr "መመለሻ"
419
601
420−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
602+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
421msgctxt "Button: Call back on phone"
603msgctxt "Button: Call back on phone"
422msgid "Call back"
604msgid "Call back"
423msgstr "መልሶ መደወያ"
605msgstr "መልሶ መደወያ"
@@ -426,49 +608,25 @@ msgstr "መልሶ መደወያ"
426msgid "Drag using 3 fingers any application from one window to the other"
608msgid "Drag using 3 fingers any application from one window to the other"
427msgstr "መጎተቻ 3 ጣቶች በ መጠቀም ማንኛውንም መተግበሪያ ከ አንድ መስኮት ወደ ሌላ"
609msgstr "መጎተቻ 3 ጣቶች በ መጠቀም ማንኛውንም መተግበሪያ ከ አንድ መስኮት ወደ ሌላ"
428
610
429−#: qml/Tutorial/TutorialBottom.qml:78
430−msgid "Swipe up to add a contact"
431−msgstr "ወደ ላይ ይጥረጉ ግንኙነት ለ መጨመር"
432−
433−#: qml/Tutorial/TutorialBottom.qml:80
434−msgid "Swipe up for favorite calculations"
435−msgstr "ወደ ላይ ይጥረጉ የሚወዱትን ለማስላት"
436−
437−#: qml/Tutorial/TutorialBottom.qml:82
438−msgid "Swipe up for recent calls"
439−msgstr "ወደ ላይ ይጥረጉ ለ ቅርብ ጊዜ ጥሪዎች"
440−
441−#: qml/Tutorial/TutorialBottom.qml:84
442−msgid "Swipe up to create a message"
443−msgstr "ወደ ላይ ይጥረጉ መልእክት ለ መፍጠር"
444−
445−#: qml/Tutorial/TutorialBottom.qml:85
446−msgid "Swipe up to manage the app"
447−msgstr "ወደ ላይ ይጥረጉ መተግበሪያ ለማስተዳደር"
448−
449−#: qml/Tutorial/TutorialLeftLong.qml:47
611+#: qml/Tutorial/TutorialLeftLong.qml:49
450msgid "Long swipe from the left edge to open the Today scope"
612msgid "Long swipe from the left edge to open the Today scope"
451msgstr "በ ረጅሙ ከ ግራ ጠርዝ በኩል ይጥረጉ የ ዛሬን ክልል ለ መክፈት"
613msgstr "በ ረጅሙ ከ ግራ ጠርዝ በኩል ይጥረጉ የ ዛሬን ክልል ለ መክፈት"
452
614
453#: qml/Tutorial/TutorialLeft.qml:47
615#: qml/Tutorial/TutorialLeft.qml:47
454−msgid "Swipe from the left edge to open the launcher"
616+msgid "Short swipe from the left edge to open the launcher"
455−msgstr "ከ ግራ ጠርዝ በኩል ይጥረጉ ማስጀመሪያውን ለ መክፈት"
617+msgstr "በ አጭሩ ይጥረጉ ከ ግራ ጠርዝ በኩል ማስጀመሪያውን ለ መክፈት"
456
618
457#: qml/Tutorial/TutorialRight.qml:55
619#: qml/Tutorial/TutorialRight.qml:55
458msgid "Push your mouse against the right edge to view your open apps"
620msgid "Push your mouse against the right edge to view your open apps"
459−msgstr ""
621+msgstr "የ እርስዎን አይጥ መጠቆሚያ ወደ ቀኝ ጠርዝ በኩል ያስጠጉ የ ተከፈቱ መተግበሪያዎችን ለ መመልከት"
460
622
461#: qml/Tutorial/TutorialRight.qml:56
623#: qml/Tutorial/TutorialRight.qml:56
462−msgid "Short or long swipe from the right edge to view your open apps"
624+msgid "Swipe from the right edge to view your open apps"
463−msgstr "በ አጭሩ ወይንም በ ረጅሙ ይጥረጉ ከ ቀኝ ጠረዝ በኩል የ ተከፈቱ መተግበሪያዎችን ለማየት"
625+msgstr "ከ ቀኝ በኩል ይጥረጉ የ ተከፈቱ መተግበሪያዎችን ለ መመልከት"
464
626
465#: qml/Tutorial/TutorialTop.qml:53
627#: qml/Tutorial/TutorialTop.qml:53
466−msgid "Swipe from the top right edge to open the notification bar"
628+msgid "Swipe from the top edge to access notifications and quick settings"
467−msgstr "ከ ላይ ቀኝ ጠርዝ በኩል ይጥረጉ የ ማስታወቂያ መደርደሪያ ለ መክፈት"
629+msgstr "ከ ላይ ጠረዝ በኩል ይጥረጉ ማስታወቂያዎች እና በፍጥነት ማሰናጃዎች ጋር ለ መድረስ"
468−
469−#: qml/Tutorial/TutorialTop.qml:54
470−msgid "Swipe from the top edge to open the notification bar"
471−msgstr "ከ ላይ ጠርዝ በኩል ይጥረጉ የ ማስታወቂያ መደርደሪያ ለ መክፈት"
472
630
473#: qml/Wizard/Page.qml:54
631#: qml/Wizard/Page.qml:54
474msgctxt "Button: Go back one page in the Wizard"
632msgctxt "Button: Go back one page in the Wizard"
@@ -479,11 +637,11 @@ msgstr "ወደ ኋላ"
479msgid "Language"
637msgid "Language"
480msgstr "ቋንቋ"
638msgstr "ቋንቋ"
481
639
482−#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
640+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
483−#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
641+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
484#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
642#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
485#: qml/Wizard/Pages/75-report-check.qml:84
643#: qml/Wizard/Pages/75-report-check.qml:84
486−#: qml/Wizard/Pages/passcode-desktop.qml:124
644+#: qml/Wizard/Pages/passcode-desktop.qml:141
487#: qml/Wizard/Pages/password-set.qml:141
645#: qml/Wizard/Pages/password-set.qml:141
488msgid "Next"
646msgid "Next"
489msgstr "ይቀጥሉ"
647msgstr "ይቀጥሉ"
@@ -545,7 +703,7 @@ msgstr "እርስዎ በኋላ በ ስርአት ማሰናጃ ውስጥ መቀየ
545msgid "Time Zone"
703msgid "Time Zone"
546msgstr "የ ሰአት ክልል"
704msgstr "የ ሰአት ክልል"
547
705
548−#: qml/Wizard/Pages/50-timezone.qml:178
706+#: qml/Wizard/Pages/50-timezone.qml:181
549msgid "Enter your city"
707msgid "Enter your city"
550msgstr "የ እርስዎን ከተማ ያስገቡ"
708msgstr "የ እርስዎን ከተማ ያስገቡ"
551
709
@@ -637,7 +795,7 @@ msgid "Service Terms"
637msgstr "የ ግልጋሎት ስምምነቶች"
795msgstr "የ ግልጋሎት ስምምነቶች"
638
796
639#: qml/Wizard/Pages/passcode-confirm.qml:43
797#: qml/Wizard/Pages/passcode-confirm.qml:43
640−#: qml/Wizard/Pages/passcode-desktop.qml:80
798+#: qml/Wizard/Pages/passcode-desktop.qml:96
641msgid "Confirm passcode"
799msgid "Confirm passcode"
642msgstr "የማለፊያ ኮድ ማረጋገጫ"
800msgstr "የማለፊያ ኮድ ማረጋገጫ"
643
801
@@ -654,24 +812,24 @@ msgstr "እባክዎን እንደገና-ያስገቡ"
654msgid "Lock Screen Passcode"
812msgid "Lock Screen Passcode"
655msgstr "የ መመልከቻው መቆለፊያ የ ማለፊያ ኮድ"
813msgstr "የ መመልከቻው መቆለፊያ የ ማለፊያ ኮድ"
656
814
657−#: qml/Wizard/Pages/passcode-desktop.qml:56
815+#: qml/Wizard/Pages/passcode-desktop.qml:60
658msgid "Enter 4 numbers to setup your passcode"
816msgid "Enter 4 numbers to setup your passcode"
659msgstr "ያስገቡ 4 ቁጥሮች የ እርስዎን የ ማለፊያ ኮድ ለማሰናዳት"
817msgstr "ያስገቡ 4 ቁጥሮች የ እርስዎን የ ማለፊያ ኮድ ለማሰናዳት"
660
818
661−#: qml/Wizard/Pages/passcode-desktop.qml:65
819+#: qml/Wizard/Pages/passcode-desktop.qml:76
662#: qml/Wizard/Pages/passcode-set.qml:54
820#: qml/Wizard/Pages/passcode-set.qml:54
663msgid "Choose passcode"
821msgid "Choose passcode"
664msgstr "የ ማለፊያ ኮድ ይምረጡ"
822msgstr "የ ማለፊያ ኮድ ይምረጡ"
665
823
666−#: qml/Wizard/Pages/passcode-desktop.qml:105
824+#: qml/Wizard/Pages/passcode-desktop.qml:126
667msgid "Passcode too short"
825msgid "Passcode too short"
668msgstr "የ ማለፊያ ኮዱ በጣም አጭር ነው"
826msgstr "የ ማለፊያ ኮዱ በጣም አጭር ነው"
669
827
670−#: qml/Wizard/Pages/passcode-desktop.qml:107
828+#: qml/Wizard/Pages/passcode-desktop.qml:128
671msgid "Passcodes match"
829msgid "Passcodes match"
672msgstr "የ ማለፊያ ኮዶቹ ተመሳሳይ ናቸው"
830msgstr "የ ማለፊያ ኮዶቹ ተመሳሳይ ናቸው"
673
831
674−#: qml/Wizard/Pages/passcode-desktop.qml:109
832+#: qml/Wizard/Pages/passcode-desktop.qml:130
675msgid "Passcodes do not match"
833msgid "Passcodes do not match"
676msgstr "የ ማለፊያ ኮዶቹ አይመሳሰሉም"
834msgstr "የ ማለፊያ ኮዶቹ አይመሳሰሉም"
677
835
@@ -720,26 +878,30 @@ msgid "To proceed with no SIM tap Skip."
720msgstr "ያለ ሲም ለ መቀጠል መዝለያውን መታ ያድርጉ"
878msgstr "ያለ ሲም ለ መቀጠል መዝለያውን መታ ያድርጉ"
721
879
722#: qml/Wizard/PasswordMeter.qml:87
880#: qml/Wizard/PasswordMeter.qml:87
881+msgid "Password too short"
882+msgstr "የ መግቢያ ቃል በጣም አጭር ነው"
883+
884+#: qml/Wizard/PasswordMeter.qml:89
723msgid "Passwords match"
885msgid "Passwords match"
724msgstr "የ መግቢያ ቃሎቹ ተመሳሳይ ናቸው"
886msgstr "የ መግቢያ ቃሎቹ ተመሳሳይ ናቸው"
725
887
726−#: qml/Wizard/PasswordMeter.qml:89
888+#: qml/Wizard/PasswordMeter.qml:91
727msgid "Passwords do not match"
889msgid "Passwords do not match"
728msgstr "የ መግቢያ ቃሎቹ ተመሳሳይ አይደሉም"
890msgstr "የ መግቢያ ቃሎቹ ተመሳሳይ አይደሉም"
729
891
730−#: qml/Wizard/PasswordMeter.qml:93
892+#: qml/Wizard/PasswordMeter.qml:95
731msgid "Strong password"
893msgid "Strong password"
732msgstr "ጠንካራ የ መግቢያ ቃል"
894msgstr "ጠንካራ የ መግቢያ ቃል"
733
895
734−#: qml/Wizard/PasswordMeter.qml:95
896+#: qml/Wizard/PasswordMeter.qml:97
735msgid "Fair password"
897msgid "Fair password"
736msgstr "ደህና የ መግቢያ ቃል"
898msgstr "ደህና የ መግቢያ ቃል"
737
899
738−#: qml/Wizard/PasswordMeter.qml:97
900+#: qml/Wizard/PasswordMeter.qml:99
739msgid "Weak password"
901msgid "Weak password"
740msgstr "ደካማ የ መግቢያ ቃል"
902msgstr "ደካማ የ መግቢያ ቃል"
741
903
742−#: qml/Wizard/PasswordMeter.qml:99
904+#: qml/Wizard/PasswordMeter.qml:101
743msgid "Very weak password"
905msgid "Very weak password"
744msgstr "በጣም ደካማ የ መግቢያ ቃል"
906msgstr "በጣም ደካማ የ መግቢያ ቃል"
745
907
@@ -988,6 +1150,9 @@ msgstr "በጣም ደካማ የ መግቢያ ቃል"
988#~ msgid "View all your running tasks."
1150#~ msgid "View all your running tasks."
989#~ msgstr "እርስዎ የሚያስኬዱትን ተግባሮች በሙሉ መመልከቻ"
1151#~ msgstr "እርስዎ የሚያስኬዱትን ተግባሮች በሙሉ መመልከቻ"
990
1152
1153+#~ msgid "Tap to unlock"
1154+#~ msgstr "ለመክፈት መታ ያድርጉ"
1155+
991#~ msgctxt "Button: Shut down the system"
1156#~ msgctxt "Button: Shut down the system"
992#~ msgid "Shut down"
1157#~ msgid "Shut down"
993#~ msgstr "ማጥፊያ"
1158#~ msgstr "ማጥፊያ"
@@ -1057,5 +1222,32 @@ msgstr "በጣም ደካማ የ መግቢያ ቃል"
1057#~ msgid "Call back"
1222#~ msgid "Call back"
1058#~ msgstr "መልሶ መደወያ"
1223#~ msgstr "መልሶ መደወያ"
1059
1224
1225+#~ msgid "Swipe up for recent calls"
1226+#~ msgstr "ወደ ላይ ይጥረጉ ለ ቅርብ ጊዜ ጥሪዎች"
1227+
1228+#~ msgid "Swipe up for favorite calculations"
1229+#~ msgstr "ወደ ላይ ይጥረጉ የሚወዱትን ለማስላት"
1230+
1231+#~ msgid "Swipe up to manage the app"
1232+#~ msgstr "ወደ ላይ ይጥረጉ መተግበሪያ ለማስተዳደር"
1233+
1234+#~ msgid "Swipe up to create a message"
1235+#~ msgstr "ወደ ላይ ይጥረጉ መልእክት ለ መፍጠር"
1236+
1237+#~ msgid "Swipe up to add a contact"
1238+#~ msgstr "ወደ ላይ ይጥረጉ ግንኙነት ለ መጨመር"
1239+
1240+#~ msgid "Swipe from the top right edge to open the notification bar"
1241+#~ msgstr "ከ ላይ ቀኝ ጠርዝ በኩል ይጥረጉ የ ማስታወቂያ መደርደሪያ ለ መክፈት"
1242+
1243+#~ msgid "Swipe from the top edge to open the notification bar"
1244+#~ msgstr "ከ ላይ ጠርዝ በኩል ይጥረጉ የ ማስታወቂያ መደርደሪያ ለ መክፈት"
1245+
1246+#~ msgid "Short or long swipe from the right edge to view your open apps"
1247+#~ msgstr "በ አጭሩ ወይንም በ ረጅሙ ይጥረጉ ከ ቀኝ ጠረዝ በኩል የ ተከፈቱ መተግበሪያዎችን ለማየት"
1248+
1249+#~ msgid "Swipe from the left edge to open the launcher"
1250+#~ msgstr "ከ ግራ ጠርዝ በኩል ይጥረጉ ማስጀመሪያውን ለ መክፈት"
1251+
1060#~ msgid "Hover your mouse on the right edge to view your open apps"
1252#~ msgid "Hover your mouse on the right edge to view your open apps"
1061#~ msgstr "የ እርስዎን አይጥ ወደ ቀኝ ጠርዝ በኩል ሲያደርጉ የ ተከፈቱ መተግበሪያዎች መመልከቻ"
1253#~ msgstr "የ እርስዎን አይጥ ወደ ቀኝ ጠርዝ በኩል ሲያደርጉ የ ተከፈቱ መተግበሪያዎች መመልከቻ"
po/ar.po+266−101
@@ -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-05-18 11:19+0000\n"
10+"POT-Creation-Date: 2016-07-11 17:24+0000\n"
11"PO-Revision-Date: 2015-07-29 09:41+0000\n"
11"PO-Revision-Date: 2015-07-29 09:41+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"
@@ -16,41 +16,41 @@ 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-05-19 05:49+0000\n"
19+"X-Launchpad-Export-Date: 2016-07-14 06:00+0000\n"
20−"X-Generator: Launchpad (build 18025)\n"
20+"X-Generator: Launchpad (build 18115)\n"
21
21
22−#: plugins/IntegratedLightDM/Greeter.cpp:112
22+#: plugins/LightDM/Greeter.cpp:123
23msgid "Password: "
23msgid "Password: "
24msgstr "كلمة السر: "
24msgstr "كلمة السر: "
25
25
26−#: plugins/Unity/Launcher/launcheritem.cpp:48
26+#: plugins/Unity/Launcher/launcheritem.cpp:49
27−#: plugins/Unity/Launcher/launcheritem.cpp:107
27+#: plugins/Unity/Launcher/launcheritem.cpp:108
28msgid "Pin shortcut"
28msgid "Pin shortcut"
29msgstr "تثبيت الاختصار"
29msgstr "تثبيت الاختصار"
30
30
31−#: plugins/Unity/Launcher/launcheritem.cpp:53
31+#: plugins/Unity/Launcher/launcheritem.cpp:54
32msgid "Quit"
32msgid "Quit"
33msgstr "خروج"
33msgstr "خروج"
34
34
35−#: plugins/Unity/Launcher/launcheritem.cpp:107
35+#: plugins/Unity/Launcher/launcheritem.cpp:108
36msgid "Unpin shortcut"
36msgid "Unpin shortcut"
37msgstr "إزالة تثبيت الاختصار"
37msgstr "إزالة تثبيت الاختصار"
38
38
39−#: qml/Components/DelayedLockscreen.qml:49
39+#: qml/Components/DelayedLockscreen.qml:50
40msgid "Device Locked"
40msgid "Device Locked"
41msgstr "الجهاز موصد"
41msgstr "الجهاز موصد"
42
42
43−#: qml/Components/DelayedLockscreen.qml:64
43+#: qml/Components/DelayedLockscreen.qml:65
44msgid "You have been locked out due to too many failed passphrase attempts."
44msgid "You have been locked out due to too many failed passphrase attempts."
45msgstr ""
45msgstr ""
46"لقد تم تأمين الجهاز ضد الفتح بسبب المحاولات العديدة الفاشلة للعبارة السرّية."
46"لقد تم تأمين الجهاز ضد الفتح بسبب المحاولات العديدة الفاشلة للعبارة السرّية."
47
47
48−#: qml/Components/DelayedLockscreen.qml:65
48+#: qml/Components/DelayedLockscreen.qml:66
49msgid "You have been locked out due to too many failed passcode attempts."
49msgid "You have been locked out due to too many failed passcode attempts."
50msgstr ""
50msgstr ""
51"لقد تم تأمين الجهاز ضد الفتح بسبب المحاولات العديدة الفاشلة للرمز السرّي."
51"لقد تم تأمين الجهاز ضد الفتح بسبب المحاولات العديدة الفاشلة للرمز السرّي."
52
52
53−#: qml/Components/DelayedLockscreen.qml:74
53+#: qml/Components/DelayedLockscreen.qml:75
54#, qt-format
54#, qt-format
55msgid "Please wait %1 minute and then try again…"
55msgid "Please wait %1 minute and then try again…"
56msgid_plural "Please wait %1 minutes and then try again…"
56msgid_plural "Please wait %1 minutes and then try again…"
@@ -81,7 +81,7 @@ msgid "Log Out"
81msgstr "خروج"
81msgstr "خروج"
82
82
83#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
83#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
84−#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
84+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
85#: qml/Wizard/Pages/passcode-set.qml:32
85#: qml/Wizard/Pages/passcode-set.qml:32
86msgid "Cancel"
86msgid "Cancel"
87msgstr "إلغاء"
87msgstr "إلغاء"
@@ -126,18 +126,188 @@ msgctxt "Button: Restart the system"
126msgid "Restart"
126msgid "Restart"
127msgstr "إعادة التشغيل"
127msgstr "إعادة التشغيل"
128
128
129+#: qml/Components/KeyboardShortcutsOverlay.qml:41
130+msgid "Keyboard Shortcuts"
131+msgstr ""
132+
133+#: qml/Components/KeyboardShortcutsOverlay.qml:55
134+msgid "Unity 8"
135+msgstr ""
136+
137+#: qml/Components/KeyboardShortcutsOverlay.qml:62
138+msgid "PrtScr"
139+msgstr ""
140+
141+#: qml/Components/KeyboardShortcutsOverlay.qml:67
142+msgid "Takes a screenshot."
143+msgstr ""
144+
145+#: qml/Components/KeyboardShortcutsOverlay.qml:75
146+msgid "Alt + PrtScr"
147+msgstr ""
148+
149+#: qml/Components/KeyboardShortcutsOverlay.qml:80
150+msgid "Takes a screenshot of a window."
151+msgstr ""
152+
153+#: qml/Components/KeyboardShortcutsOverlay.qml:88
154+msgid "Super + Space"
155+msgstr ""
156+
157+#: qml/Components/KeyboardShortcutsOverlay.qml:93
158+msgid "Switches to next keyboard layout."
159+msgstr ""
160+
161+#: qml/Components/KeyboardShortcutsOverlay.qml:101
162+msgid "Super + Shift + Space"
163+msgstr ""
164+
165+#: qml/Components/KeyboardShortcutsOverlay.qml:106
166+msgid "Switches to previous keyboard layout."
167+msgstr ""
168+
169+#: qml/Components/KeyboardShortcutsOverlay.qml:118
170+msgid "Launcher"
171+msgstr ""
172+
173+#: qml/Components/KeyboardShortcutsOverlay.qml:125
174+msgid "Super (Hold)"
175+msgstr ""
176+
177+#: qml/Components/KeyboardShortcutsOverlay.qml:130
178+msgid "Opens the launcher, displays shortcuts."
179+msgstr ""
180+
181+#: qml/Components/KeyboardShortcutsOverlay.qml:138
182+msgid "Alt + F1"
183+msgstr ""
184+
185+#: qml/Components/KeyboardShortcutsOverlay.qml:143
186+msgid "Opens launcher keyboard navigation mode."
187+msgstr ""
188+
189+#: qml/Components/KeyboardShortcutsOverlay.qml:151
190+msgid "Super + Tab"
191+msgstr ""
192+
193+#: qml/Components/KeyboardShortcutsOverlay.qml:156
194+msgid "Switches applications via the launcher."
195+msgstr ""
196+
197+#: qml/Components/KeyboardShortcutsOverlay.qml:164
198+msgid "Super + 0 to 9"
199+msgstr ""
200+
201+#: qml/Components/KeyboardShortcutsOverlay.qml:169
202+msgid "Same as clicking on a launcher icon."
203+msgstr ""
204+
205+#: qml/Components/KeyboardShortcutsOverlay.qml:181
206+msgid "Scopes"
207+msgstr ""
208+
209+#: qml/Components/KeyboardShortcutsOverlay.qml:188
210+msgid "Super (Tap)"
211+msgstr ""
212+
213+#: qml/Components/KeyboardShortcutsOverlay.qml:193
214+msgid "Opens the Scopes home."
215+msgstr ""
216+
217+#: qml/Components/KeyboardShortcutsOverlay.qml:209
218+msgid "Switching"
219+msgstr ""
220+
221+#: qml/Components/KeyboardShortcutsOverlay.qml:216
222+msgid "Alt + Tab"
223+msgstr ""
224+
225+#: qml/Components/KeyboardShortcutsOverlay.qml:221
226+msgid "Switches between applications."
227+msgstr ""
228+
229+#: qml/Components/KeyboardShortcutsOverlay.qml:229
230+msgid "Super + W"
231+msgstr ""
232+
233+#: qml/Components/KeyboardShortcutsOverlay.qml:234
234+msgid "Opens the desktop spread."
235+msgstr ""
236+
237+#: qml/Components/KeyboardShortcutsOverlay.qml:242
238+msgid "Cursor Left or Right"
239+msgstr ""
240+
241+#: qml/Components/KeyboardShortcutsOverlay.qml:247
242+msgid "Moves the focus."
243+msgstr ""
244+
245+#: qml/Components/KeyboardShortcutsOverlay.qml:259
246+msgid "Windows"
247+msgstr ""
248+
249+#: qml/Components/KeyboardShortcutsOverlay.qml:266
250+msgid "Ctrl + Super + D"
251+msgstr ""
252+
253+#: qml/Components/KeyboardShortcutsOverlay.qml:271
254+msgid "Minimizes all windows."
255+msgstr ""
256+
257+#: qml/Components/KeyboardShortcutsOverlay.qml:279
258+msgid "Ctrl + Super + Up"
259+msgstr ""
260+
261+#: qml/Components/KeyboardShortcutsOverlay.qml:284
262+msgid "Maximizes the current window."
263+msgstr ""
264+
265+#: qml/Components/KeyboardShortcutsOverlay.qml:292
266+msgid "Ctrl + Super + Down"
267+msgstr ""
268+
269+#: qml/Components/KeyboardShortcutsOverlay.qml:297
270+msgid "Minimizes or restores the current window."
271+msgstr ""
272+
273+#: qml/Components/KeyboardShortcutsOverlay.qml:305
274+msgid "Ctrl + Super + Left or Right"
275+msgstr ""
276+
277+#: qml/Components/KeyboardShortcutsOverlay.qml:310
278+msgid "Semi-maximizes the current window."
279+msgstr ""
280+
281+#: qml/Components/KeyboardShortcutsOverlay.qml:318
282+msgid "Alt + F4"
283+msgstr ""
284+
285+#: qml/Components/KeyboardShortcutsOverlay.qml:323
286+msgid "Closes the current window."
287+msgstr ""
288+
129−#: qml/Components/Lockscreen.qml:231
289+#: qml/Components/Lockscreen.qml:239
130msgid "Return to Call"
290msgid "Return to Call"
131msgstr "العودة إلى المكالمة"
291msgstr "العودة إلى المكالمة"
132
292
133−#: qml/Components/Lockscreen.qml:231
293+#: qml/Components/Lockscreen.qml:239
134msgid "Emergency Call"
294msgid "Emergency Call"
135msgstr "مكالمة طوارئ"
295msgstr "مكالمة طوارئ"
136
296
137−#: qml/Components/Lockscreen.qml:263
297+#: qml/Components/Lockscreen.qml:271
138msgid "OK"
298msgid "OK"
139msgstr "موافق"
299msgstr "موافق"
140
300
301+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
302+#, qt-format
303+msgid "%1:%2:%3"
304+msgstr ""
305+
306+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
307+#, qt-format
308+msgid "%1:%2"
309+msgstr ""
310+
141#: qml/Components/ModeSwitchWarningDialog.qml:32
311#: qml/Components/ModeSwitchWarningDialog.qml:32
142msgid "Apps may have unsaved data:"
312msgid "Apps may have unsaved data:"
143msgstr ""
313msgstr ""
@@ -164,26 +334,30 @@ msgstr ""
164msgid "Close all"
334msgid "Close all"
165msgstr ""
335msgstr ""
166
336
337+#: qml/Components/SharingPicker.qml:54
338+msgid "Preview Share Item"
339+msgstr ""
340+
167−#: qml/Dash/DashPageHeader.qml:337
341+#: qml/Dash/DashPageHeader.qml:333
168msgctxt "Button: Open the Ubuntu Store"
342msgctxt "Button: Open the Ubuntu Store"
169msgid "Store"
343msgid "Store"
170msgstr "المتجر"
344msgstr "المتجر"
171
345
172−#: qml/Dash/DashPageHeader.qml:344
346+#: qml/Dash/DashPageHeader.qml:340
173msgctxt "Button: Start a search in the current dash scope"
347msgctxt "Button: Start a search in the current dash scope"
174msgid "Search"
348msgid "Search"
175msgstr "بحث"
349msgstr "بحث"
176
350
177−#: qml/Dash/DashPageHeader.qml:354
351+#: qml/Dash/DashPageHeader.qml:350
178msgctxt "Button: Show the current dash scope settings"
352msgctxt "Button: Show the current dash scope settings"
179msgid "Settings"
353msgid "Settings"
180msgstr "الإعدادات"
354msgstr "الإعدادات"
181
355
182−#: qml/Dash/DashPageHeader.qml:361
356+#: qml/Dash/DashPageHeader.qml:357
183msgid "Remove from Favorites"
357msgid "Remove from Favorites"
184msgstr "حذف من المفضلات"
358msgstr "حذف من المفضلات"
185
359
186−#: qml/Dash/DashPageHeader.qml:361
360+#: qml/Dash/DashPageHeader.qml:357
187msgid "Add to Favorites"
361msgid "Add to Favorites"
188msgstr "إضافة إلى المفضلات"
362msgstr "إضافة إلى المفضلات"
189
363
@@ -195,24 +369,24 @@ msgstr ""
195msgid "Reset"
369msgid "Reset"
196msgstr ""
370msgstr ""
197
371
198−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:764
372+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
199msgid "Show less"
373msgid "Show less"
200msgstr ""
374msgstr ""
201
375
202−#: qml/Dash/GenericScopeView.qml:579
376+#: qml/Dash/GenericScopeView.qml:580
203msgid "Show all"
377msgid "Show all"
204msgstr ""
378msgstr ""
205
379
206−#: qml/Dash/GenericScopeView.qml:636
380+#: qml/Dash/GenericScopeView.qml:637
207msgctxt "Label: Hint for dash search line edit"
381msgctxt "Label: Hint for dash search line edit"
208msgid "Search"
382msgid "Search"
209msgstr "بحث"
383msgstr "بحث"
210
384
211−#: qml/Dash/PageHeaderExtraPanel.qml:55
385+#: qml/Dash/PageHeaderExtraPanel.qml:56
212msgid "Recent Searches"
386msgid "Recent Searches"
213msgstr ""
387msgstr ""
214
388
215−#: qml/Dash/PageHeaderExtraPanel.qml:66
389+#: qml/Dash/PageHeaderExtraPanel.qml:67
216msgid "Clear All"
390msgid "Clear All"
217msgstr ""
391msgstr ""
218
392
@@ -225,22 +399,18 @@ msgid "Less..."
225msgstr "أقل..."
399msgstr "أقل..."
226
400
227#: qml/Dash/Previews/PreviewCommentInput.qml:68
401#: qml/Dash/Previews/PreviewCommentInput.qml:68
228−#: qml/Dash/Previews/PreviewRatingInput.qml:174
402+#: qml/Dash/Previews/PreviewRatingInput.qml:175
229msgid "Send"
403msgid "Send"
230msgstr "أرسل"
404msgstr "أرسل"
231
405
232−#: qml/Dash/Previews/PreviewRatingInput.qml:84
406+#: qml/Dash/Previews/PreviewRatingInput.qml:82
233msgid "Rate this"
407msgid "Rate this"
234msgstr "قيّم ذلك"
408msgstr "قيّم ذلك"
235
409
236−#: qml/Dash/Previews/PreviewRatingInput.qml:129
410+#: qml/Dash/Previews/PreviewRatingInput.qml:157
237msgid "Add a review"
411msgid "Add a review"
238msgstr "أضف تعليق"
412msgstr "أضف تعليق"
239
413
240−#: qml/Dash/Previews/PreviewSharing.qml:66
241−msgid "Preview Share Item"
242−msgstr ""
243−
244#: qml/Dash/PullToRefreshScopeStyle.qml:55
414#: qml/Dash/PullToRefreshScopeStyle.qml:55
245msgid "Pull to refresh…"
415msgid "Pull to refresh…"
246msgstr "اسحب للتحديث..."
416msgstr "اسحب للتحديث..."
@@ -253,49 +423,61 @@ msgstr "حرّر للتحديث..."
253msgid "Enable location data"
423msgid "Enable location data"
254msgstr "تفعيل بيانات الموقع"
424msgstr "تفعيل بيانات الموقع"
255
425
256−#: qml/Dash/ScopesList.qml:67
426+#: qml/Dash/ScopesList.qml:55
257msgid "Manage"
427msgid "Manage"
258msgstr "إدارة"
428msgstr "إدارة"
259
429
260−#: qml/Dash/ScopesList.qml:113
430+#: qml/Dash/ScopesList.qml:102
261msgid "Home"
431msgid "Home"
262msgstr "الرئيسية"
432msgstr "الرئيسية"
263
433
264−#: qml/Dash/ScopesList.qml:114
434+#: qml/Dash/ScopesList.qml:103
265msgid "Also installed"
435msgid "Also installed"
266msgstr "أيضا تم تثبيت"
436msgstr "أيضا تم تثبيت"
267
437
268−#: qml/DisabledScreenNotice.qml:104
438+#: qml/DisabledScreenNotice.qml:109
269msgid ""
439msgid ""
270"Your device is now connected to an external display. Use this screen as a "
440"Your device is now connected to an external display. Use this screen as a "
271"touch pad to interact with the pointer."
441"touch pad to interact with the pointer."
272msgstr ""
442msgstr ""
273
443
274−#: qml/Greeter/CoverPage.qml:118
444+#: qml/Greeter/CoverPage.qml:127
275msgid "Unlock"
445msgid "Unlock"
276msgstr "فك القفل"
446msgstr "فك القفل"
277
447
448+#: qml/Greeter/Greeter.qml:555
449+msgid "Try again"
450+msgstr ""
451+
278−#: qml/Greeter/LoginList.qml:239
452+#: qml/Greeter/LoginList.qml:63
453+msgid "Passphrase"
454+msgstr ""
455+
456+#: qml/Greeter/LoginList.qml:64
457+msgid "Passcode"
458+msgstr ""
459+
460+#: qml/Greeter/LoginList.qml:87
279msgid "Retry"
461msgid "Retry"
280msgstr "إعادة المحاولة"
462msgstr "إعادة المحاولة"
281
463
282−#: qml/Greeter/LoginList.qml:240
464+#: qml/Greeter/LoginList.qml:88
283−msgid "Tap to unlock"
465+msgid "Log In"
284−msgstr "انقر لفك القفل"
466+msgstr ""
285
467
286−#: qml/Greeter/NarrowView.qml:54
468+#: qml/Greeter/NarrowView.qml:55
287msgid "Sorry, incorrect passphrase."
469msgid "Sorry, incorrect passphrase."
288msgstr "عذرًا، عبارة سرّية خاطئة."
470msgstr "عذرًا، عبارة سرّية خاطئة."
289
471
290−#: qml/Greeter/NarrowView.qml:55
472+#: qml/Greeter/NarrowView.qml:56
291msgid "Sorry, incorrect passcode."
473msgid "Sorry, incorrect passcode."
292msgstr "عذرًا، رمز سرّي خاطيء."
474msgstr "عذرًا، رمز سرّي خاطيء."
293
475
294−#: qml/Greeter/NarrowView.qml:56
476+#: qml/Greeter/NarrowView.qml:57
295msgid "This will be your last attempt."
477msgid "This will be your last attempt."
296msgstr "هذه ستكون المحاولة الأخيرة لك."
478msgstr "هذه ستكون المحاولة الأخيرة لك."
297
479
298−#: qml/Greeter/NarrowView.qml:58
480+#: qml/Greeter/NarrowView.qml:59
299msgid ""
481msgid ""
300"If passphrase is entered incorrectly, your phone will conduct a factory "
482"If passphrase is entered incorrectly, your phone will conduct a factory "
301"reset and all personal data will be deleted."
483"reset and all personal data will be deleted."
@@ -303,7 +485,7 @@ msgstr ""
303"إذا تم إدخال العبارة السرية بشكل خاطئ، فسوف يتم إعادة الهاتف لحالة ضبط "
485"إذا تم إدخال العبارة السرية بشكل خاطئ، فسوف يتم إعادة الهاتف لحالة ضبط "
304"المصنع وسيتم حذف كافة البيانات الشخصية."
486"المصنع وسيتم حذف كافة البيانات الشخصية."
305
487
306−#: qml/Greeter/NarrowView.qml:59
488+#: qml/Greeter/NarrowView.qml:60
307msgid ""
489msgid ""
308"If passcode is entered incorrectly, your phone will conduct a factory reset "
490"If passcode is entered incorrectly, your phone will conduct a factory reset "
309"and all personal data will be deleted."
491"and all personal data will be deleted."
@@ -311,34 +493,34 @@ msgstr ""
311"إذا تم إدخال العبارة السرية بشكل خاطئ، فسوف يتم إعادة الهاتف لحالة ضبط "
493"إذا تم إدخال العبارة السرية بشكل خاطئ، فسوف يتم إعادة الهاتف لحالة ضبط "
312"المصنع وسيتم حذف كافة البيانات الشخصية."
494"المصنع وسيتم حذف كافة البيانات الشخصية."
313
495
314−#: qml/Greeter/NarrowView.qml:116
496+#: qml/Greeter/NarrowView.qml:129
315#, qt-format
497#, qt-format
316msgid "Enter %1"
498msgid "Enter %1"
317msgstr "أدخِل %1"
499msgstr "أدخِل %1"
318
500
319−#: qml/Greeter/NarrowView.qml:117
501+#: qml/Greeter/NarrowView.qml:130
320msgid "Enter passphrase"
502msgid "Enter passphrase"
321msgstr "أدخِل العبارة السرية"
503msgstr "أدخِل العبارة السرية"
322
504
323−#: qml/Greeter/NarrowView.qml:118
505+#: qml/Greeter/NarrowView.qml:131
324msgid "Enter passcode"
506msgid "Enter passcode"
325msgstr "أدخِل الرمز السرّي"
507msgstr "أدخِل الرمز السرّي"
326
508
327−#: qml/Greeter/NarrowView.qml:119
509+#: qml/Greeter/NarrowView.qml:135
328#, qt-format
510#, qt-format
329msgid "Sorry, incorrect %1"
511msgid "Sorry, incorrect %1"
330msgstr "نأسف، %1 غير صحيحية"
512msgstr "نأسف، %1 غير صحيحية"
331
513
332−#: qml/Greeter/NarrowView.qml:120
514+#: qml/Greeter/NarrowView.qml:136
333msgid "Sorry, incorrect passphrase"
515msgid "Sorry, incorrect passphrase"
334msgstr "نأسف، عبارة السّر غير صحيحية"
516msgstr "نأسف، عبارة السّر غير صحيحية"
335
517
336−#: qml/Greeter/NarrowView.qml:121
518+#: qml/Greeter/NarrowView.qml:137
337msgctxt "passphrase"
519msgctxt "passphrase"
338msgid "Please re-enter"
520msgid "Please re-enter"
339msgstr "برجاء إعادة إدخالها"
521msgstr "برجاء إعادة إدخالها"
340
522
341−#: qml/Greeter/NarrowView.qml:122
523+#: qml/Greeter/NarrowView.qml:138
342msgid "Sorry, incorrect passcode"
524msgid "Sorry, incorrect passcode"
343msgstr "نأسف، الرمز السري غير صحيح"
525msgstr "نأسف، الرمز السري غير صحيح"
344
526
@@ -425,18 +607,18 @@ msgstr "انتهى"
425msgid "Failed, tap to retry"
607msgid "Failed, tap to retry"
426msgstr "فشل، انقل لإعادة المحاولة"
608msgstr "فشل، انقل لإعادة المحاولة"
427
609
428−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
610+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
429−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
611+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
430msgctxt "Button: Send a reply message"
612msgctxt "Button: Send a reply message"
431msgid "Send"
613msgid "Send"
432msgstr ""
614msgstr ""
433
615
434−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
616+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
435msgctxt "Label: Hint in message indicator line edit"
617msgctxt "Label: Hint in message indicator line edit"
436msgid "Reply"
618msgid "Reply"
437msgstr "رد"
619msgstr "رد"
438
620
439−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
621+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
440msgctxt "Button: Call back on phone"
622msgctxt "Button: Call back on phone"
441msgid "Call back"
623msgid "Call back"
442msgstr ""
624msgstr ""
@@ -445,32 +627,12 @@ msgstr ""
445msgid "Drag using 3 fingers any application from one window to the other"
627msgid "Drag using 3 fingers any application from one window to the other"
446msgstr ""
628msgstr ""
447
629
448−#: qml/Tutorial/TutorialBottom.qml:78
449−msgid "Swipe up to add a contact"
450−msgstr ""
451−
452−#: qml/Tutorial/TutorialBottom.qml:80
453−msgid "Swipe up for favorite calculations"
454−msgstr ""
455−
456−#: qml/Tutorial/TutorialBottom.qml:82
457−msgid "Swipe up for recent calls"
458−msgstr ""
459−
460−#: qml/Tutorial/TutorialBottom.qml:84
461−msgid "Swipe up to create a message"
462−msgstr ""
463−
464−#: qml/Tutorial/TutorialBottom.qml:85
465−msgid "Swipe up to manage the app"
466−msgstr ""
467−
468−#: qml/Tutorial/TutorialLeftLong.qml:47
630+#: qml/Tutorial/TutorialLeftLong.qml:49
469msgid "Long swipe from the left edge to open the Today scope"
631msgid "Long swipe from the left edge to open the Today scope"
470msgstr ""
632msgstr ""
471
633
472#: qml/Tutorial/TutorialLeft.qml:47
634#: qml/Tutorial/TutorialLeft.qml:47
473−msgid "Swipe from the left edge to open the launcher"
635+msgid "Short swipe from the left edge to open the launcher"
474msgstr ""
636msgstr ""
475
637
476#: qml/Tutorial/TutorialRight.qml:55
638#: qml/Tutorial/TutorialRight.qml:55
@@ -478,15 +640,11 @@ msgid "Push your mouse against the right edge to view your open apps"
478msgstr ""
640msgstr ""
479
641
480#: qml/Tutorial/TutorialRight.qml:56
642#: qml/Tutorial/TutorialRight.qml:56
481−msgid "Short or long swipe from the right edge to view your open apps"
643+msgid "Swipe from the right edge to view your open apps"
482msgstr ""
644msgstr ""
483
645
484#: qml/Tutorial/TutorialTop.qml:53
646#: qml/Tutorial/TutorialTop.qml:53
485−msgid "Swipe from the top right edge to open the notification bar"
647+msgid "Swipe from the top edge to access notifications and quick settings"
486−msgstr ""
487−
488−#: qml/Tutorial/TutorialTop.qml:54
489−msgid "Swipe from the top edge to open the notification bar"
490msgstr ""
648msgstr ""
491
649
492#: qml/Wizard/Page.qml:54
650#: qml/Wizard/Page.qml:54
@@ -498,11 +656,11 @@ msgstr "عودة"
498msgid "Language"
656msgid "Language"
499msgstr ""
657msgstr ""
500
658
501−#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
659+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
502−#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
660+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
503#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
661#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
504#: qml/Wizard/Pages/75-report-check.qml:84
662#: qml/Wizard/Pages/75-report-check.qml:84
505−#: qml/Wizard/Pages/passcode-desktop.qml:124
663+#: qml/Wizard/Pages/passcode-desktop.qml:141
506#: qml/Wizard/Pages/password-set.qml:141
664#: qml/Wizard/Pages/password-set.qml:141
507msgid "Next"
665msgid "Next"
508msgstr ""
666msgstr ""
@@ -564,7 +722,7 @@ msgstr ""
564msgid "Time Zone"
722msgid "Time Zone"
565msgstr ""
723msgstr ""
566
724
567−#: qml/Wizard/Pages/50-timezone.qml:178
725+#: qml/Wizard/Pages/50-timezone.qml:181
568msgid "Enter your city"
726msgid "Enter your city"
569msgstr ""
727msgstr ""
570
728
@@ -654,7 +812,7 @@ msgid "Service Terms"
654msgstr ""
812msgstr ""
655
813
656#: qml/Wizard/Pages/passcode-confirm.qml:43
814#: qml/Wizard/Pages/passcode-confirm.qml:43
657−#: qml/Wizard/Pages/passcode-desktop.qml:80
815+#: qml/Wizard/Pages/passcode-desktop.qml:96
658msgid "Confirm passcode"
816msgid "Confirm passcode"
659msgstr "تأكيد الرمز السري"
817msgstr "تأكيد الرمز السري"
660
818
@@ -671,24 +829,24 @@ msgstr ""
671msgid "Lock Screen Passcode"
829msgid "Lock Screen Passcode"
672msgstr ""
830msgstr ""
673
831
674−#: qml/Wizard/Pages/passcode-desktop.qml:56
832+#: qml/Wizard/Pages/passcode-desktop.qml:60
675msgid "Enter 4 numbers to setup your passcode"
833msgid "Enter 4 numbers to setup your passcode"
676msgstr ""
834msgstr ""
677
835
678−#: qml/Wizard/Pages/passcode-desktop.qml:65
836+#: qml/Wizard/Pages/passcode-desktop.qml:76
679#: qml/Wizard/Pages/passcode-set.qml:54
837#: qml/Wizard/Pages/passcode-set.qml:54
680msgid "Choose passcode"
838msgid "Choose passcode"
681msgstr ""
839msgstr ""
682
840
683−#: qml/Wizard/Pages/passcode-desktop.qml:105
841+#: qml/Wizard/Pages/passcode-desktop.qml:126
684msgid "Passcode too short"
842msgid "Passcode too short"
685msgstr ""
843msgstr ""
686
844
687−#: qml/Wizard/Pages/passcode-desktop.qml:107
845+#: qml/Wizard/Pages/passcode-desktop.qml:128
688msgid "Passcodes match"
846msgid "Passcodes match"
689msgstr ""
847msgstr ""
690
848
691−#: qml/Wizard/Pages/passcode-desktop.qml:109
849+#: qml/Wizard/Pages/passcode-desktop.qml:130
692msgid "Passcodes do not match"
850msgid "Passcodes do not match"
693msgstr ""
851msgstr ""
694
852
@@ -737,26 +895,30 @@ msgid "To proceed with no SIM tap Skip."
737msgstr ""
895msgstr ""
738
896
739#: qml/Wizard/PasswordMeter.qml:87
897#: qml/Wizard/PasswordMeter.qml:87
740−msgid "Passwords match"
898+msgid "Password too short"
741msgstr ""
899msgstr ""
742
900
743#: qml/Wizard/PasswordMeter.qml:89
901#: qml/Wizard/PasswordMeter.qml:89
902+msgid "Passwords match"
903+msgstr ""
904+
905+#: qml/Wizard/PasswordMeter.qml:91
744msgid "Passwords do not match"
906msgid "Passwords do not match"
745msgstr ""
907msgstr ""
746
908
747−#: qml/Wizard/PasswordMeter.qml:93
909+#: qml/Wizard/PasswordMeter.qml:95
748msgid "Strong password"
910msgid "Strong password"
749msgstr ""
911msgstr ""
750
912
751−#: qml/Wizard/PasswordMeter.qml:95
913+#: qml/Wizard/PasswordMeter.qml:97
752msgid "Fair password"
914msgid "Fair password"
753msgstr ""
915msgstr ""
754
916
755−#: qml/Wizard/PasswordMeter.qml:97
917+#: qml/Wizard/PasswordMeter.qml:99
756msgid "Weak password"
918msgid "Weak password"
757msgstr ""
919msgstr ""
758
920
759−#: qml/Wizard/PasswordMeter.qml:99
921+#: qml/Wizard/PasswordMeter.qml:101
760msgid "Very weak password"
922msgid "Very weak password"
761msgstr ""
923msgstr ""
762
924
@@ -867,6 +1029,9 @@ msgstr ""
867#~ msgid "See all"
1029#~ msgid "See all"
868#~ msgstr "عرض الكل"
1030#~ msgstr "عرض الكل"
869
1031
1032+#~ msgid "Tap to unlock"
1033+#~ msgstr "انقر لفك القفل"
1034+
870#~ msgid "Please re-enter"
1035#~ msgid "Please re-enter"
871#~ msgstr "برجاء إعادة إدخالها"
1036#~ msgstr "برجاء إعادة إدخالها"
872
1037
po/ast.po+296−104
@@ -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-05-18 11:19+0000\n"
10+"POT-Creation-Date: 2016-07-11 17:24+0000\n"
11"PO-Revision-Date: 2016-05-16 14:07+0000\n"
11"PO-Revision-Date: 2016-05-16 14:07+0000\n"
12"Last-Translator: Xuacu Saturio <xuacusk8@gmail.com>\n"
12"Last-Translator: Xuacu Saturio <xuacusk8@gmail.com>\n"
13"Language-Team: Asturian <ast@li.org>\n"
13"Language-Team: Asturian <ast@li.org>\n"
@@ -15,40 +15,40 @@ 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-05-19 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2016-07-14 06:00+0000\n"
19−"X-Generator: Launchpad (build 18025)\n"
19+"X-Generator: Launchpad (build 18115)\n"
20
20
21−#: plugins/IntegratedLightDM/Greeter.cpp:112
21+#: plugins/LightDM/Greeter.cpp:123
22msgid "Password: "
22msgid "Password: "
23msgstr "Contraseña: "
23msgstr "Contraseña: "
24
24
25−#: plugins/Unity/Launcher/launcheritem.cpp:48
25+#: plugins/Unity/Launcher/launcheritem.cpp:49
26−#: plugins/Unity/Launcher/launcheritem.cpp:107
26+#: plugins/Unity/Launcher/launcheritem.cpp:108
27msgid "Pin shortcut"
27msgid "Pin shortcut"
28msgstr "Anclar atayu"
28msgstr "Anclar atayu"
29
29
30−#: plugins/Unity/Launcher/launcheritem.cpp:53
30+#: plugins/Unity/Launcher/launcheritem.cpp:54
31msgid "Quit"
31msgid "Quit"
32msgstr "Colar"
32msgstr "Colar"
33
33
34−#: plugins/Unity/Launcher/launcheritem.cpp:107
34+#: plugins/Unity/Launcher/launcheritem.cpp:108
35msgid "Unpin shortcut"
35msgid "Unpin shortcut"
36msgstr "Desanclar atayu"
36msgstr "Desanclar atayu"
37
37
38−#: qml/Components/DelayedLockscreen.qml:49
38+#: qml/Components/DelayedLockscreen.qml:50
39msgid "Device Locked"
39msgid "Device Locked"
40msgstr "Preséu bloquiáu"
40msgstr "Preséu bloquiáu"
41
41
42−#: qml/Components/DelayedLockscreen.qml:64
42+#: qml/Components/DelayedLockscreen.qml:65
43msgid "You have been locked out due to too many failed passphrase attempts."
43msgid "You have been locked out due to too many failed passphrase attempts."
44msgstr "Quedasti bloquiáu polos escesivos intentos fallíos de fras de pasu."
44msgstr "Quedasti bloquiáu polos escesivos intentos fallíos de fras de pasu."
45
45
46−#: qml/Components/DelayedLockscreen.qml:65
46+#: qml/Components/DelayedLockscreen.qml:66
47msgid "You have been locked out due to too many failed passcode attempts."
47msgid "You have been locked out due to too many failed passcode attempts."
48msgstr ""
48msgstr ""
49"Quedasti bloquiáu polos escesivos intentos fallíos de códigu de pasu."
49"Quedasti bloquiáu polos escesivos intentos fallíos de códigu de pasu."
50
50
51−#: qml/Components/DelayedLockscreen.qml:74
51+#: qml/Components/DelayedLockscreen.qml:75
52#, qt-format
52#, qt-format
53msgid "Please wait %1 minute and then try again…"
53msgid "Please wait %1 minute and then try again…"
54msgid_plural "Please wait %1 minutes and then try again…"
54msgid_plural "Please wait %1 minutes and then try again…"
@@ -75,7 +75,7 @@ msgid "Log Out"
75msgstr "Zarrar sesión"
75msgstr "Zarrar sesión"
76
76
77#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
77#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
78−#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
78+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
79#: qml/Wizard/Pages/passcode-set.qml:32
79#: qml/Wizard/Pages/passcode-set.qml:32
80msgid "Cancel"
80msgid "Cancel"
81msgstr "Encaboxar"
81msgstr "Encaboxar"
@@ -120,18 +120,188 @@ msgctxt "Button: Restart the system"
120msgid "Restart"
120msgid "Restart"
121msgstr "Reaniciar"
121msgstr "Reaniciar"
122
122
123+#: qml/Components/KeyboardShortcutsOverlay.qml:41
124+msgid "Keyboard Shortcuts"
125+msgstr ""
126+
127+#: qml/Components/KeyboardShortcutsOverlay.qml:55
128+msgid "Unity 8"
129+msgstr ""
130+
131+#: qml/Components/KeyboardShortcutsOverlay.qml:62
132+msgid "PrtScr"
133+msgstr ""
134+
135+#: qml/Components/KeyboardShortcutsOverlay.qml:67
136+msgid "Takes a screenshot."
137+msgstr ""
138+
139+#: qml/Components/KeyboardShortcutsOverlay.qml:75
140+msgid "Alt + PrtScr"
141+msgstr ""
142+
143+#: qml/Components/KeyboardShortcutsOverlay.qml:80
144+msgid "Takes a screenshot of a window."
145+msgstr ""
146+
147+#: qml/Components/KeyboardShortcutsOverlay.qml:88
148+msgid "Super + Space"
149+msgstr ""
150+
151+#: qml/Components/KeyboardShortcutsOverlay.qml:93
152+msgid "Switches to next keyboard layout."
153+msgstr ""
154+
155+#: qml/Components/KeyboardShortcutsOverlay.qml:101
156+msgid "Super + Shift + Space"
157+msgstr ""
158+
159+#: qml/Components/KeyboardShortcutsOverlay.qml:106
160+msgid "Switches to previous keyboard layout."
161+msgstr ""
162+
163+#: qml/Components/KeyboardShortcutsOverlay.qml:118
164+msgid "Launcher"
165+msgstr ""
166+
167+#: qml/Components/KeyboardShortcutsOverlay.qml:125
168+msgid "Super (Hold)"
169+msgstr ""
170+
171+#: qml/Components/KeyboardShortcutsOverlay.qml:130
172+msgid "Opens the launcher, displays shortcuts."
173+msgstr ""
174+
175+#: qml/Components/KeyboardShortcutsOverlay.qml:138
176+msgid "Alt + F1"
177+msgstr ""
178+
179+#: qml/Components/KeyboardShortcutsOverlay.qml:143
180+msgid "Opens launcher keyboard navigation mode."
181+msgstr ""
182+
183+#: qml/Components/KeyboardShortcutsOverlay.qml:151
184+msgid "Super + Tab"
185+msgstr ""
186+
187+#: qml/Components/KeyboardShortcutsOverlay.qml:156
188+msgid "Switches applications via the launcher."
189+msgstr ""
190+
191+#: qml/Components/KeyboardShortcutsOverlay.qml:164
192+msgid "Super + 0 to 9"
193+msgstr ""
194+
195+#: qml/Components/KeyboardShortcutsOverlay.qml:169
196+msgid "Same as clicking on a launcher icon."
197+msgstr ""
198+
199+#: qml/Components/KeyboardShortcutsOverlay.qml:181
200+msgid "Scopes"
201+msgstr ""
202+
203+#: qml/Components/KeyboardShortcutsOverlay.qml:188
204+msgid "Super (Tap)"
205+msgstr ""
206+
207+#: qml/Components/KeyboardShortcutsOverlay.qml:193
208+msgid "Opens the Scopes home."
209+msgstr ""
210+
211+#: qml/Components/KeyboardShortcutsOverlay.qml:209
212+msgid "Switching"
213+msgstr ""
214+
215+#: qml/Components/KeyboardShortcutsOverlay.qml:216
216+msgid "Alt + Tab"
217+msgstr ""
218+
219+#: qml/Components/KeyboardShortcutsOverlay.qml:221
220+msgid "Switches between applications."
221+msgstr ""
222+
223+#: qml/Components/KeyboardShortcutsOverlay.qml:229
224+msgid "Super + W"
225+msgstr ""
226+
227+#: qml/Components/KeyboardShortcutsOverlay.qml:234
228+msgid "Opens the desktop spread."
229+msgstr ""
230+
231+#: qml/Components/KeyboardShortcutsOverlay.qml:242
232+msgid "Cursor Left or Right"
233+msgstr ""
234+
235+#: qml/Components/KeyboardShortcutsOverlay.qml:247
236+msgid "Moves the focus."
237+msgstr ""
238+
239+#: qml/Components/KeyboardShortcutsOverlay.qml:259
240+msgid "Windows"
241+msgstr ""
242+
243+#: qml/Components/KeyboardShortcutsOverlay.qml:266
244+msgid "Ctrl + Super + D"
245+msgstr ""
246+
247+#: qml/Components/KeyboardShortcutsOverlay.qml:271
248+msgid "Minimizes all windows."
249+msgstr ""
250+
251+#: qml/Components/KeyboardShortcutsOverlay.qml:279
252+msgid "Ctrl + Super + Up"
253+msgstr ""
254+
255+#: qml/Components/KeyboardShortcutsOverlay.qml:284
256+msgid "Maximizes the current window."
257+msgstr ""
258+
259+#: qml/Components/KeyboardShortcutsOverlay.qml:292
260+msgid "Ctrl + Super + Down"
261+msgstr ""
262+
263+#: qml/Components/KeyboardShortcutsOverlay.qml:297
264+msgid "Minimizes or restores the current window."
265+msgstr ""
266+
267+#: qml/Components/KeyboardShortcutsOverlay.qml:305
268+msgid "Ctrl + Super + Left or Right"
269+msgstr ""
270+
271+#: qml/Components/KeyboardShortcutsOverlay.qml:310
272+msgid "Semi-maximizes the current window."
273+msgstr ""
274+
275+#: qml/Components/KeyboardShortcutsOverlay.qml:318
276+msgid "Alt + F4"
277+msgstr ""
278+
279+#: qml/Components/KeyboardShortcutsOverlay.qml:323
280+msgid "Closes the current window."
281+msgstr ""
282+
123−#: qml/Components/Lockscreen.qml:231
283+#: qml/Components/Lockscreen.qml:239
124msgid "Return to Call"
284msgid "Return to Call"
125msgstr "Tornar a la llamada"
285msgstr "Tornar a la llamada"
126
286
127−#: qml/Components/Lockscreen.qml:231
287+#: qml/Components/Lockscreen.qml:239
128msgid "Emergency Call"
288msgid "Emergency Call"
129msgstr "Llamada d'emerxencia"
289msgstr "Llamada d'emerxencia"
130
290
131−#: qml/Components/Lockscreen.qml:263
291+#: qml/Components/Lockscreen.qml:271
132msgid "OK"
292msgid "OK"
133msgstr "Aceutar"
293msgstr "Aceutar"
134
294
295+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
296+#, qt-format
297+msgid "%1:%2:%3"
298+msgstr ""
299+
300+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
301+#, qt-format
302+msgid "%1:%2"
303+msgstr ""
304+
135#: qml/Components/ModeSwitchWarningDialog.qml:32
305#: qml/Components/ModeSwitchWarningDialog.qml:32
136msgid "Apps may have unsaved data:"
306msgid "Apps may have unsaved data:"
137msgstr "Apps que pueden tener datos sin guardar:"
307msgstr "Apps que pueden tener datos sin guardar:"
@@ -158,26 +328,30 @@ msgstr "Reconeutar agora."
158msgid "Close all"
328msgid "Close all"
159msgstr "Zarrar too"
329msgstr "Zarrar too"
160
330
331+#: qml/Components/SharingPicker.qml:54
332+msgid "Preview Share Item"
333+msgstr "Entever l'elementu compartíu"
334+
161−#: qml/Dash/DashPageHeader.qml:337
335+#: qml/Dash/DashPageHeader.qml:333
162msgctxt "Button: Open the Ubuntu Store"
336msgctxt "Button: Open the Ubuntu Store"
163msgid "Store"
337msgid "Store"
164msgstr "Tienda"
338msgstr "Tienda"
165
339
166−#: qml/Dash/DashPageHeader.qml:344
340+#: qml/Dash/DashPageHeader.qml:340
167msgctxt "Button: Start a search in the current dash scope"
341msgctxt "Button: Start a search in the current dash scope"
168msgid "Search"
342msgid "Search"
169msgstr "Guetar"
343msgstr "Guetar"
170
344
171−#: qml/Dash/DashPageHeader.qml:354
345+#: qml/Dash/DashPageHeader.qml:350
172msgctxt "Button: Show the current dash scope settings"
346msgctxt "Button: Show the current dash scope settings"
173msgid "Settings"
347msgid "Settings"
174msgstr "Axustes"
348msgstr "Axustes"
175
349
176−#: qml/Dash/DashPageHeader.qml:361
350+#: qml/Dash/DashPageHeader.qml:357
177msgid "Remove from Favorites"
351msgid "Remove from Favorites"
178msgstr "Desaniciar de favoritos"
352msgstr "Desaniciar de favoritos"
179
353
180−#: qml/Dash/DashPageHeader.qml:361
354+#: qml/Dash/DashPageHeader.qml:357
181msgid "Add to Favorites"
355msgid "Add to Favorites"
182msgstr "Amestar a favoritos"
356msgstr "Amestar a favoritos"
183
357
@@ -189,24 +363,24 @@ msgstr "Refina los resultaos"
189msgid "Reset"
363msgid "Reset"
190msgstr "Reafitar"
364msgstr "Reafitar"
191
365
192−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:764
366+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
193msgid "Show less"
367msgid "Show less"
194msgstr "Ver menos"
368msgstr "Ver menos"
195
369
196−#: qml/Dash/GenericScopeView.qml:579
370+#: qml/Dash/GenericScopeView.qml:580
197msgid "Show all"
371msgid "Show all"
198msgstr "Ver too"
372msgstr "Ver too"
199
373
200−#: qml/Dash/GenericScopeView.qml:636
374+#: qml/Dash/GenericScopeView.qml:637
201msgctxt "Label: Hint for dash search line edit"
375msgctxt "Label: Hint for dash search line edit"
202msgid "Search"
376msgid "Search"
203msgstr "Guetar"
377msgstr "Guetar"
204
378
205−#: qml/Dash/PageHeaderExtraPanel.qml:55
379+#: qml/Dash/PageHeaderExtraPanel.qml:56
206msgid "Recent Searches"
380msgid "Recent Searches"
207msgstr "Guetes recién"
381msgstr "Guetes recién"
208
382
209−#: qml/Dash/PageHeaderExtraPanel.qml:66
383+#: qml/Dash/PageHeaderExtraPanel.qml:67
210msgid "Clear All"
384msgid "Clear All"
211msgstr "Llimpiar too"
385msgstr "Llimpiar too"
212
386
@@ -219,22 +393,18 @@ msgid "Less..."
219msgstr "Menos…"
393msgstr "Menos…"
220
394
221#: qml/Dash/Previews/PreviewCommentInput.qml:68
395#: qml/Dash/Previews/PreviewCommentInput.qml:68
222−#: qml/Dash/Previews/PreviewRatingInput.qml:174
396+#: qml/Dash/Previews/PreviewRatingInput.qml:175
223msgid "Send"
397msgid "Send"
224msgstr "Unviar"
398msgstr "Unviar"
225
399
226−#: qml/Dash/Previews/PreviewRatingInput.qml:84
400+#: qml/Dash/Previews/PreviewRatingInput.qml:82
227msgid "Rate this"
401msgid "Rate this"
228msgstr "Valorar esto"
402msgstr "Valorar esto"
229
403
230−#: qml/Dash/Previews/PreviewRatingInput.qml:129
404+#: qml/Dash/Previews/PreviewRatingInput.qml:157
231msgid "Add a review"
405msgid "Add a review"
232msgstr "Amestar una reseña"
406msgstr "Amestar una reseña"
233
407
234−#: qml/Dash/Previews/PreviewSharing.qml:66
235−msgid "Preview Share Item"
236−msgstr "Entever l'elementu compartíu"
237−
238#: qml/Dash/PullToRefreshScopeStyle.qml:55
408#: qml/Dash/PullToRefreshScopeStyle.qml:55
239msgid "Pull to refresh…"
409msgid "Pull to refresh…"
240msgstr "Tira p'anovar..."
410msgstr "Tira p'anovar..."
@@ -247,19 +417,19 @@ msgstr "Sueltar p'anovar..."
247msgid "Enable location data"
417msgid "Enable location data"
248msgstr "Habilitar datos d'allugamientu"
418msgstr "Habilitar datos d'allugamientu"
249
419
250−#: qml/Dash/ScopesList.qml:67
420+#: qml/Dash/ScopesList.qml:55
251msgid "Manage"
421msgid "Manage"
252msgstr "Xestionar"
422msgstr "Xestionar"
253
423
254−#: qml/Dash/ScopesList.qml:113
424+#: qml/Dash/ScopesList.qml:102
255msgid "Home"
425msgid "Home"
256msgstr "Aniciu"
426msgstr "Aniciu"
257
427
258−#: qml/Dash/ScopesList.qml:114
428+#: qml/Dash/ScopesList.qml:103
259msgid "Also installed"
429msgid "Also installed"
260msgstr "Tamién instalaos"
430msgstr "Tamién instalaos"
261
431
262−#: qml/DisabledScreenNotice.qml:104
432+#: qml/DisabledScreenNotice.qml:109
263msgid ""
433msgid ""
264"Your device is now connected to an external display. Use this screen as a "
434"Your device is now connected to an external display. Use this screen as a "
265"touch pad to interact with the pointer."
435"touch pad to interact with the pointer."
@@ -267,31 +437,43 @@ msgstr ""
267"El preséu agora ta coneutáu con una pantalla esterna. Usa esta pantalla como "
437"El preséu agora ta coneutáu con una pantalla esterna. Usa esta pantalla como "
268"touch pad pa interactuar col punteru."
438"touch pad pa interactuar col punteru."
269
439
270−#: qml/Greeter/CoverPage.qml:118
440+#: qml/Greeter/CoverPage.qml:127
271msgid "Unlock"
441msgid "Unlock"
272msgstr "Desbloquiar"
442msgstr "Desbloquiar"
273
443
444+#: qml/Greeter/Greeter.qml:555
445+msgid "Try again"
446+msgstr ""
447+
274−#: qml/Greeter/LoginList.qml:239
448+#: qml/Greeter/LoginList.qml:63
449+msgid "Passphrase"
450+msgstr ""
451+
452+#: qml/Greeter/LoginList.qml:64
453+msgid "Passcode"
454+msgstr ""
455+
456+#: qml/Greeter/LoginList.qml:87
275msgid "Retry"
457msgid "Retry"
276msgstr "Reintentar"
458msgstr "Reintentar"
277
459
278−#: qml/Greeter/LoginList.qml:240
460+#: qml/Greeter/LoginList.qml:88
279−msgid "Tap to unlock"
461+msgid "Log In"
280−msgstr "Calca pa desbloquiar"
462+msgstr ""
281
463
282−#: qml/Greeter/NarrowView.qml:54
464+#: qml/Greeter/NarrowView.qml:55
283msgid "Sorry, incorrect passphrase."
465msgid "Sorry, incorrect passphrase."
284msgstr "Perdón, fras de pasu incorreuta"
466msgstr "Perdón, fras de pasu incorreuta"
285
467
286−#: qml/Greeter/NarrowView.qml:55
468+#: qml/Greeter/NarrowView.qml:56
287msgid "Sorry, incorrect passcode."
469msgid "Sorry, incorrect passcode."
288msgstr "Perdón, códigu de pasu incorreutu."
470msgstr "Perdón, códigu de pasu incorreutu."
289
471
290−#: qml/Greeter/NarrowView.qml:56
472+#: qml/Greeter/NarrowView.qml:57
291msgid "This will be your last attempt."
473msgid "This will be your last attempt."
292msgstr "Esti sedra'l to caberu intentu"
474msgstr "Esti sedra'l to caberu intentu"
293
475
294−#: qml/Greeter/NarrowView.qml:58
476+#: qml/Greeter/NarrowView.qml:59
295msgid ""
477msgid ""
296"If passphrase is entered incorrectly, your phone will conduct a factory "
478"If passphrase is entered incorrectly, your phone will conduct a factory "
297"reset and all personal data will be deleted."
479"reset and all personal data will be deleted."
@@ -299,7 +481,7 @@ msgstr ""
299"Si s'inxerta la fras de pasu incorreutamente, el to teléfonu va reafitase y "
481"Si s'inxerta la fras de pasu incorreutamente, el to teléfonu va reafitase y "
300"van desaniciase tolos datos personales."
482"van desaniciase tolos datos personales."
301
483
302−#: qml/Greeter/NarrowView.qml:59
484+#: qml/Greeter/NarrowView.qml:60
303msgid ""
485msgid ""
304"If passcode is entered incorrectly, your phone will conduct a factory reset "
486"If passcode is entered incorrectly, your phone will conduct a factory reset "
305"and all personal data will be deleted."
487"and all personal data will be deleted."
@@ -307,34 +489,34 @@ msgstr ""
307"Si s'inxerta'l códigu de pasu incorreutamente, el to teléfonu va reafitase y "
489"Si s'inxerta'l códigu de pasu incorreutamente, el to teléfonu va reafitase y "
308"van desaniciase tolos datos personales."
490"van desaniciase tolos datos personales."
309
491
310−#: qml/Greeter/NarrowView.qml:116
492+#: qml/Greeter/NarrowView.qml:129
311#, qt-format
493#, qt-format
312msgid "Enter %1"
494msgid "Enter %1"
313msgstr "Introduz %1"
495msgstr "Introduz %1"
314
496
315−#: qml/Greeter/NarrowView.qml:117
497+#: qml/Greeter/NarrowView.qml:130
316msgid "Enter passphrase"
498msgid "Enter passphrase"
317msgstr "Introduz la fras de pasu"
499msgstr "Introduz la fras de pasu"
318
500
319−#: qml/Greeter/NarrowView.qml:118
501+#: qml/Greeter/NarrowView.qml:131
320msgid "Enter passcode"
502msgid "Enter passcode"
321msgstr "Introduz el códigu de pasu"
503msgstr "Introduz el códigu de pasu"
322
504
323−#: qml/Greeter/NarrowView.qml:119
505+#: qml/Greeter/NarrowView.qml:135
324#, qt-format
506#, qt-format
325msgid "Sorry, incorrect %1"
507msgid "Sorry, incorrect %1"
326msgstr "Sentímoslo, %1 incorreutu"
508msgstr "Sentímoslo, %1 incorreutu"
327
509
328−#: qml/Greeter/NarrowView.qml:120
510+#: qml/Greeter/NarrowView.qml:136
329msgid "Sorry, incorrect passphrase"
511msgid "Sorry, incorrect passphrase"
330msgstr "Sentímoslo, contraseña incorreuta"
512msgstr "Sentímoslo, contraseña incorreuta"
331
513
332−#: qml/Greeter/NarrowView.qml:121
514+#: qml/Greeter/NarrowView.qml:137
333msgctxt "passphrase"
515msgctxt "passphrase"
334msgid "Please re-enter"
516msgid "Please re-enter"
335msgstr "Vuelve a escribila"
517msgstr "Vuelve a escribila"
336
518
337−#: qml/Greeter/NarrowView.qml:122
519+#: qml/Greeter/NarrowView.qml:138
338msgid "Sorry, incorrect passcode"
520msgid "Sorry, incorrect passcode"
339msgstr "Sentímoslo, códigu de pasu incorreutu"
521msgstr "Sentímoslo, códigu de pasu incorreutu"
340
522
@@ -409,18 +591,18 @@ msgstr "Finó"
409msgid "Failed, tap to retry"
591msgid "Failed, tap to retry"
410msgstr "Falló, toca pa reintentar"
592msgstr "Falló, toca pa reintentar"
411
593
412−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
594+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
413−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
595+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
414msgctxt "Button: Send a reply message"
596msgctxt "Button: Send a reply message"
415msgid "Send"
597msgid "Send"
416msgstr "Unviar"
598msgstr "Unviar"
417
599
418−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
600+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
419msgctxt "Label: Hint in message indicator line edit"
601msgctxt "Label: Hint in message indicator line edit"
420msgid "Reply"
602msgid "Reply"
421msgstr "Responder"
603msgstr "Responder"
422
604
423−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
605+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
424msgctxt "Button: Call back on phone"
606msgctxt "Button: Call back on phone"
425msgid "Call back"
607msgid "Call back"
426msgstr "Devolver llamada"
608msgstr "Devolver llamada"
@@ -429,51 +611,25 @@ msgstr "Devolver llamada"
429msgid "Drag using 3 fingers any application from one window to the other"
611msgid "Drag using 3 fingers any application from one window to the other"
430msgstr "Abasnar cualquier aplicación d'una ventana a otra usando 3 deos"
612msgstr "Abasnar cualquier aplicación d'una ventana a otra usando 3 deos"
431
613
432−#: qml/Tutorial/TutorialBottom.qml:78
433−msgid "Swipe up to add a contact"
434−msgstr "Eslizar p'amestar un contactu"
435−
436−#: qml/Tutorial/TutorialBottom.qml:80
437−msgid "Swipe up for favorite calculations"
438−msgstr "Eslizar pa los cálculos favoritos"
439−
440−#: qml/Tutorial/TutorialBottom.qml:82
441−msgid "Swipe up for recent calls"
442−msgstr "Eslizar pa llamaes recién"
443−
444−#: qml/Tutorial/TutorialBottom.qml:84
445−msgid "Swipe up to create a message"
446−msgstr "Eslizar pa crear un mensaxe"
447−
448−#: qml/Tutorial/TutorialBottom.qml:85
449−msgid "Swipe up to manage the app"
450−msgstr "Eslizar p'alministrar la app"
451−
452−#: qml/Tutorial/TutorialLeftLong.qml:47
614+#: qml/Tutorial/TutorialLeftLong.qml:49
453msgid "Long swipe from the left edge to open the Today scope"
615msgid "Long swipe from the left edge to open the Today scope"
454msgstr "Eslizamientu llargu dende'l berbesu izquierdu pa ver el scope Güei"
616msgstr "Eslizamientu llargu dende'l berbesu izquierdu pa ver el scope Güei"
455
617
456#: qml/Tutorial/TutorialLeft.qml:47
618#: qml/Tutorial/TutorialLeft.qml:47
457−msgid "Swipe from the left edge to open the launcher"
619+msgid "Short swipe from the left edge to open the launcher"
458−msgstr "Eslizar dende'l berbesu izquierdu p'abrir el llanzador"
620+msgstr ""
459
621
460#: qml/Tutorial/TutorialRight.qml:55
622#: qml/Tutorial/TutorialRight.qml:55
461msgid "Push your mouse against the right edge to view your open apps"
623msgid "Push your mouse against the right edge to view your open apps"
462msgstr "Emburria'l mur escontra'l berbesu drechu pa ver les apps abiertes"
624msgstr "Emburria'l mur escontra'l berbesu drechu pa ver les apps abiertes"
463
625
464#: qml/Tutorial/TutorialRight.qml:56
626#: qml/Tutorial/TutorialRight.qml:56
465−msgid "Short or long swipe from the right edge to view your open apps"
627+msgid "Swipe from the right edge to view your open apps"
466msgstr ""
628msgstr ""
467−"Eslizamientu curtiu o llargu dende'l berbesu drechu pa ver les apps abiertes"
468
629
469#: qml/Tutorial/TutorialTop.qml:53
630#: qml/Tutorial/TutorialTop.qml:53
470−msgid "Swipe from the top right edge to open the notification bar"
631+msgid "Swipe from the top edge to access notifications and quick settings"
471msgstr ""
632msgstr ""
472−"Esliza dende'l berbesu superior drechu p'abrir la barra de notificaciones"
473−
474−#: qml/Tutorial/TutorialTop.qml:54
475−msgid "Swipe from the top edge to open the notification bar"
476−msgstr "Esliza dende'l berbesu superior p'abrir la barra de notificaciones"
477
633
478#: qml/Wizard/Page.qml:54
634#: qml/Wizard/Page.qml:54
479msgctxt "Button: Go back one page in the Wizard"
635msgctxt "Button: Go back one page in the Wizard"
@@ -484,11 +640,11 @@ msgstr "Atrás"
484msgid "Language"
640msgid "Language"
485msgstr "Llingua"
641msgstr "Llingua"
486
642
487−#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
643+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
488−#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
644+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
489#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
645#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
490#: qml/Wizard/Pages/75-report-check.qml:84
646#: qml/Wizard/Pages/75-report-check.qml:84
491−#: qml/Wizard/Pages/passcode-desktop.qml:124
647+#: qml/Wizard/Pages/passcode-desktop.qml:141
492#: qml/Wizard/Pages/password-set.qml:141
648#: qml/Wizard/Pages/password-set.qml:141
493msgid "Next"
649msgid "Next"
494msgstr "Siguiente"
650msgstr "Siguiente"
@@ -552,7 +708,7 @@ msgstr "Pues camudalo sero na Configuración del Sistema."
552msgid "Time Zone"
708msgid "Time Zone"
553msgstr "Estaya horaria"
709msgstr "Estaya horaria"
554
710
555−#: qml/Wizard/Pages/50-timezone.qml:178
711+#: qml/Wizard/Pages/50-timezone.qml:181
556msgid "Enter your city"
712msgid "Enter your city"
557msgstr "Escribe la ciudá"
713msgstr "Escribe la ciudá"
558
714
@@ -644,7 +800,7 @@ msgid "Service Terms"
644msgstr ""
800msgstr ""
645
801
646#: qml/Wizard/Pages/passcode-confirm.qml:43
802#: qml/Wizard/Pages/passcode-confirm.qml:43
647−#: qml/Wizard/Pages/passcode-desktop.qml:80
803+#: qml/Wizard/Pages/passcode-desktop.qml:96
648msgid "Confirm passcode"
804msgid "Confirm passcode"
649msgstr "Confirmar códigu de pasu"
805msgstr "Confirmar códigu de pasu"
650
806
@@ -661,24 +817,24 @@ msgstr ""
661msgid "Lock Screen Passcode"
817msgid "Lock Screen Passcode"
662msgstr ""
818msgstr ""
663
819
664−#: qml/Wizard/Pages/passcode-desktop.qml:56
820+#: qml/Wizard/Pages/passcode-desktop.qml:60
665msgid "Enter 4 numbers to setup your passcode"
821msgid "Enter 4 numbers to setup your passcode"
666msgstr ""
822msgstr ""
667
823
668−#: qml/Wizard/Pages/passcode-desktop.qml:65
824+#: qml/Wizard/Pages/passcode-desktop.qml:76
669#: qml/Wizard/Pages/passcode-set.qml:54
825#: qml/Wizard/Pages/passcode-set.qml:54
670msgid "Choose passcode"
826msgid "Choose passcode"
671msgstr ""
827msgstr ""
672
828
673−#: qml/Wizard/Pages/passcode-desktop.qml:105
829+#: qml/Wizard/Pages/passcode-desktop.qml:126
674msgid "Passcode too short"
830msgid "Passcode too short"
675msgstr ""
831msgstr ""
676
832
677−#: qml/Wizard/Pages/passcode-desktop.qml:107
833+#: qml/Wizard/Pages/passcode-desktop.qml:128
678msgid "Passcodes match"
834msgid "Passcodes match"
679msgstr ""
835msgstr ""
680
836
681−#: qml/Wizard/Pages/passcode-desktop.qml:109
837+#: qml/Wizard/Pages/passcode-desktop.qml:130
682msgid "Passcodes do not match"
838msgid "Passcodes do not match"
683msgstr ""
839msgstr ""
684
840
@@ -727,26 +883,30 @@ msgid "To proceed with no SIM tap Skip."
727msgstr ""
883msgstr ""
728
884
729#: qml/Wizard/PasswordMeter.qml:87
885#: qml/Wizard/PasswordMeter.qml:87
730−msgid "Passwords match"
886+msgid "Password too short"
731msgstr ""
887msgstr ""
732
888
733#: qml/Wizard/PasswordMeter.qml:89
889#: qml/Wizard/PasswordMeter.qml:89
890+msgid "Passwords match"
891+msgstr ""
892+
893+#: qml/Wizard/PasswordMeter.qml:91
734msgid "Passwords do not match"
894msgid "Passwords do not match"
735msgstr ""
895msgstr ""
736
896
737−#: qml/Wizard/PasswordMeter.qml:93
897+#: qml/Wizard/PasswordMeter.qml:95
738msgid "Strong password"
898msgid "Strong password"
739msgstr "Contraseña fuerte"
899msgstr "Contraseña fuerte"
740
900
741−#: qml/Wizard/PasswordMeter.qml:95
901+#: qml/Wizard/PasswordMeter.qml:97
742msgid "Fair password"
902msgid "Fair password"
743msgstr "Contraseña aceutable"
903msgstr "Contraseña aceutable"
744
904
745−#: qml/Wizard/PasswordMeter.qml:97
905+#: qml/Wizard/PasswordMeter.qml:99
746msgid "Weak password"
906msgid "Weak password"
747msgstr "Contraseña feble"
907msgstr "Contraseña feble"
748
908
749−#: qml/Wizard/PasswordMeter.qml:99
909+#: qml/Wizard/PasswordMeter.qml:101
750msgid "Very weak password"
910msgid "Very weak password"
751msgstr "Contraseña feble enforma"
911msgstr "Contraseña feble enforma"
752
912
@@ -914,6 +1074,9 @@ msgstr "Contraseña feble enforma"
914#~ msgid "Reboot"
1074#~ msgid "Reboot"
915#~ msgstr "Reaniciar"
1075#~ msgstr "Reaniciar"
916
1076
1077+#~ msgid "Tap to unlock"
1078+#~ msgstr "Calca pa desbloquiar"
1079+
917#~ msgid "These are the shortcuts to favorite apps"
1080#~ msgid "These are the shortcuts to favorite apps"
918#~ msgstr "Estos son los atayos a les aplicaciones favorites"
1081#~ msgstr "Estos son los atayos a les aplicaciones favorites"
919
1082
@@ -1070,3 +1233,32 @@ msgstr "Contraseña feble enforma"
1070
1233
1071#~ msgid "Call back"
1234#~ msgid "Call back"
1072#~ msgstr "Devolver llamada"
1235#~ msgstr "Devolver llamada"
1236+
1237+#~ msgid "Swipe up for recent calls"
1238+#~ msgstr "Eslizar pa llamaes recién"
1239+
1240+#~ msgid "Swipe up for favorite calculations"
1241+#~ msgstr "Eslizar pa los cálculos favoritos"
1242+
1243+#~ msgid "Swipe up to add a contact"
1244+#~ msgstr "Eslizar p'amestar un contactu"
1245+
1246+#~ msgid "Swipe from the left edge to open the launcher"
1247+#~ msgstr "Eslizar dende'l berbesu izquierdu p'abrir el llanzador"
1248+
1249+#~ msgid "Swipe from the top right edge to open the notification bar"
1250+#~ msgstr ""
1251+#~ "Esliza dende'l berbesu superior drechu p'abrir la barra de notificaciones"
1252+
1253+#~ msgid "Swipe from the top edge to open the notification bar"
1254+#~ msgstr "Esliza dende'l berbesu superior p'abrir la barra de notificaciones"
1255+
1256+#~ msgid "Short or long swipe from the right edge to view your open apps"
1257+#~ msgstr ""
1258+#~ "Eslizamientu curtiu o llargu dende'l berbesu drechu pa ver les apps abiertes"
1259+
1260+#~ msgid "Swipe up to manage the app"
1261+#~ msgstr "Eslizar p'alministrar la app"
1262+
1263+#~ msgid "Swipe up to create a message"
1264+#~ msgstr "Eslizar pa crear un mensaxe"
po/az.po+262−100
@@ -7,7 +7,7 @@ msgid ""
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-05-18 11:19+0000\n"
10+"POT-Creation-Date: 2016-07-11 17:24+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,39 +15,39 @@ 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-05-19 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2016-07-14 06:00+0000\n"
19−"X-Generator: Launchpad (build 18025)\n"
19+"X-Generator: Launchpad (build 18115)\n"
20
20
21−#: plugins/IntegratedLightDM/Greeter.cpp:112
21+#: plugins/LightDM/Greeter.cpp:123
22msgid "Password: "
22msgid "Password: "
23msgstr "Şifrә: "
23msgstr "Şifrә: "
24
24
25−#: plugins/Unity/Launcher/launcheritem.cpp:48
25+#: plugins/Unity/Launcher/launcheritem.cpp:49
26−#: plugins/Unity/Launcher/launcheritem.cpp:107
26+#: plugins/Unity/Launcher/launcheritem.cpp:108
27msgid "Pin shortcut"
27msgid "Pin shortcut"
28msgstr "Pin qısayolu"
28msgstr "Pin qısayolu"
29
29
30−#: plugins/Unity/Launcher/launcheritem.cpp:53
30+#: plugins/Unity/Launcher/launcheritem.cpp:54
31msgid "Quit"
31msgid "Quit"
32msgstr ""
32msgstr ""
33
33
34−#: plugins/Unity/Launcher/launcheritem.cpp:107
34+#: plugins/Unity/Launcher/launcheritem.cpp:108
35msgid "Unpin shortcut"
35msgid "Unpin shortcut"
36msgstr "Açma qısayolu"
36msgstr "Açma qısayolu"
37
37
38−#: qml/Components/DelayedLockscreen.qml:49
38+#: qml/Components/DelayedLockscreen.qml:50
39msgid "Device Locked"
39msgid "Device Locked"
40msgstr ""
40msgstr ""
41
41
42−#: qml/Components/DelayedLockscreen.qml:64
42+#: qml/Components/DelayedLockscreen.qml:65
43msgid "You have been locked out due to too many failed passphrase attempts."
43msgid "You have been locked out due to too many failed passphrase attempts."
44msgstr ""
44msgstr ""
45
45
46−#: qml/Components/DelayedLockscreen.qml:65
46+#: qml/Components/DelayedLockscreen.qml:66
47msgid "You have been locked out due to too many failed passcode attempts."
47msgid "You have been locked out due to too many failed passcode attempts."
48msgstr ""
48msgstr ""
49
49
50−#: qml/Components/DelayedLockscreen.qml:74
50+#: qml/Components/DelayedLockscreen.qml:75
51#, qt-format
51#, qt-format
52msgid "Please wait %1 minute and then try again…"
52msgid "Please wait %1 minute and then try again…"
53msgid_plural "Please wait %1 minutes and then try again…"
53msgid_plural "Please wait %1 minutes and then try again…"
@@ -74,7 +74,7 @@ msgid "Log Out"
74msgstr ""
74msgstr ""
75
75
76#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
76#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
77−#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
77+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
78#: qml/Wizard/Pages/passcode-set.qml:32
78#: qml/Wizard/Pages/passcode-set.qml:32
79msgid "Cancel"
79msgid "Cancel"
80msgstr "İmtina"
80msgstr "İmtina"
@@ -117,18 +117,188 @@ msgctxt "Button: Restart the system"
117msgid "Restart"
117msgid "Restart"
118msgstr ""
118msgstr ""
119
119
120+#: qml/Components/KeyboardShortcutsOverlay.qml:41
121+msgid "Keyboard Shortcuts"
122+msgstr ""
123+
124+#: qml/Components/KeyboardShortcutsOverlay.qml:55
125+msgid "Unity 8"
126+msgstr ""
127+
128+#: qml/Components/KeyboardShortcutsOverlay.qml:62
129+msgid "PrtScr"
130+msgstr ""
131+
132+#: qml/Components/KeyboardShortcutsOverlay.qml:67
133+msgid "Takes a screenshot."
134+msgstr ""
135+
136+#: qml/Components/KeyboardShortcutsOverlay.qml:75
137+msgid "Alt + PrtScr"
138+msgstr ""
139+
140+#: qml/Components/KeyboardShortcutsOverlay.qml:80
141+msgid "Takes a screenshot of a window."
142+msgstr ""
143+
144+#: qml/Components/KeyboardShortcutsOverlay.qml:88
145+msgid "Super + Space"
146+msgstr ""
147+
148+#: qml/Components/KeyboardShortcutsOverlay.qml:93
149+msgid "Switches to next keyboard layout."
150+msgstr ""
151+
152+#: qml/Components/KeyboardShortcutsOverlay.qml:101
153+msgid "Super + Shift + Space"
154+msgstr ""
155+
156+#: qml/Components/KeyboardShortcutsOverlay.qml:106
157+msgid "Switches to previous keyboard layout."
158+msgstr ""
159+
160+#: qml/Components/KeyboardShortcutsOverlay.qml:118
161+msgid "Launcher"
162+msgstr ""
163+
164+#: qml/Components/KeyboardShortcutsOverlay.qml:125
165+msgid "Super (Hold)"
166+msgstr ""
167+
168+#: qml/Components/KeyboardShortcutsOverlay.qml:130
169+msgid "Opens the launcher, displays shortcuts."
170+msgstr ""
171+
172+#: qml/Components/KeyboardShortcutsOverlay.qml:138
173+msgid "Alt + F1"
174+msgstr ""
175+
176+#: qml/Components/KeyboardShortcutsOverlay.qml:143
177+msgid "Opens launcher keyboard navigation mode."
178+msgstr ""
179+
180+#: qml/Components/KeyboardShortcutsOverlay.qml:151
181+msgid "Super + Tab"
182+msgstr ""
183+
184+#: qml/Components/KeyboardShortcutsOverlay.qml:156
185+msgid "Switches applications via the launcher."
186+msgstr ""
187+
188+#: qml/Components/KeyboardShortcutsOverlay.qml:164
189+msgid "Super + 0 to 9"
190+msgstr ""
191+
192+#: qml/Components/KeyboardShortcutsOverlay.qml:169
193+msgid "Same as clicking on a launcher icon."
194+msgstr ""
195+
196+#: qml/Components/KeyboardShortcutsOverlay.qml:181
197+msgid "Scopes"
198+msgstr ""
199+
200+#: qml/Components/KeyboardShortcutsOverlay.qml:188
201+msgid "Super (Tap)"
202+msgstr ""
203+
204+#: qml/Components/KeyboardShortcutsOverlay.qml:193
205+msgid "Opens the Scopes home."
206+msgstr ""
207+
208+#: qml/Components/KeyboardShortcutsOverlay.qml:209
209+msgid "Switching"
210+msgstr ""
211+
212+#: qml/Components/KeyboardShortcutsOverlay.qml:216
213+msgid "Alt + Tab"
214+msgstr ""
215+
216+#: qml/Components/KeyboardShortcutsOverlay.qml:221
217+msgid "Switches between applications."
218+msgstr ""
219+
220+#: qml/Components/KeyboardShortcutsOverlay.qml:229
221+msgid "Super + W"
222+msgstr ""
223+
224+#: qml/Components/KeyboardShortcutsOverlay.qml:234
225+msgid "Opens the desktop spread."
226+msgstr ""
227+
228+#: qml/Components/KeyboardShortcutsOverlay.qml:242
229+msgid "Cursor Left or Right"
230+msgstr ""
231+
232+#: qml/Components/KeyboardShortcutsOverlay.qml:247
233+msgid "Moves the focus."
234+msgstr ""
235+
236+#: qml/Components/KeyboardShortcutsOverlay.qml:259
237+msgid "Windows"
238+msgstr ""
239+
240+#: qml/Components/KeyboardShortcutsOverlay.qml:266
241+msgid "Ctrl + Super + D"
242+msgstr ""
243+
244+#: qml/Components/KeyboardShortcutsOverlay.qml:271
245+msgid "Minimizes all windows."
246+msgstr ""
247+
248+#: qml/Components/KeyboardShortcutsOverlay.qml:279
249+msgid "Ctrl + Super + Up"
250+msgstr ""
251+
252+#: qml/Components/KeyboardShortcutsOverlay.qml:284
253+msgid "Maximizes the current window."
254+msgstr ""
255+
256+#: qml/Components/KeyboardShortcutsOverlay.qml:292
257+msgid "Ctrl + Super + Down"
258+msgstr ""
259+
260+#: qml/Components/KeyboardShortcutsOverlay.qml:297
261+msgid "Minimizes or restores the current window."
262+msgstr ""
263+
264+#: qml/Components/KeyboardShortcutsOverlay.qml:305
265+msgid "Ctrl + Super + Left or Right"
266+msgstr ""
267+
268+#: qml/Components/KeyboardShortcutsOverlay.qml:310
269+msgid "Semi-maximizes the current window."
270+msgstr ""
271+
272+#: qml/Components/KeyboardShortcutsOverlay.qml:318
273+msgid "Alt + F4"
274+msgstr ""
275+
276+#: qml/Components/KeyboardShortcutsOverlay.qml:323
277+msgid "Closes the current window."
278+msgstr ""
279+
120−#: qml/Components/Lockscreen.qml:231
280+#: qml/Components/Lockscreen.qml:239
121msgid "Return to Call"
281msgid "Return to Call"
122msgstr ""
282msgstr ""
123
283
124−#: qml/Components/Lockscreen.qml:231
284+#: qml/Components/Lockscreen.qml:239
125msgid "Emergency Call"
285msgid "Emergency Call"
126msgstr "Zərurət zəngi"
286msgstr "Zərurət zəngi"
127
287
128−#: qml/Components/Lockscreen.qml:263
288+#: qml/Components/Lockscreen.qml:271
129msgid "OK"
289msgid "OK"
130msgstr "Oldu"
290msgstr "Oldu"
131
291
292+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
293+#, qt-format
294+msgid "%1:%2:%3"
295+msgstr ""
296+
297+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
298+#, qt-format
299+msgid "%1:%2"
300+msgstr ""
301+
132#: qml/Components/ModeSwitchWarningDialog.qml:32
302#: qml/Components/ModeSwitchWarningDialog.qml:32
133msgid "Apps may have unsaved data:"
303msgid "Apps may have unsaved data:"
134msgstr ""
304msgstr ""
@@ -155,26 +325,30 @@ msgstr ""
155msgid "Close all"
325msgid "Close all"
156msgstr ""
326msgstr ""
157
327
328+#: qml/Components/SharingPicker.qml:54
329+msgid "Preview Share Item"
330+msgstr ""
331+
158−#: qml/Dash/DashPageHeader.qml:337
332+#: qml/Dash/DashPageHeader.qml:333
159msgctxt "Button: Open the Ubuntu Store"
333msgctxt "Button: Open the Ubuntu Store"
160msgid "Store"
334msgid "Store"
161msgstr ""
335msgstr ""
162
336
163−#: qml/Dash/DashPageHeader.qml:344
337+#: qml/Dash/DashPageHeader.qml:340
164msgctxt "Button: Start a search in the current dash scope"
338msgctxt "Button: Start a search in the current dash scope"
165msgid "Search"
339msgid "Search"
166msgstr ""
340msgstr ""
167
341
168−#: qml/Dash/DashPageHeader.qml:354
342+#: qml/Dash/DashPageHeader.qml:350
169msgctxt "Button: Show the current dash scope settings"
343msgctxt "Button: Show the current dash scope settings"
170msgid "Settings"
344msgid "Settings"
171msgstr ""
345msgstr ""
172
346
173−#: qml/Dash/DashPageHeader.qml:361
347+#: qml/Dash/DashPageHeader.qml:357
174msgid "Remove from Favorites"
348msgid "Remove from Favorites"
175msgstr "Seçilmişlәrdәn çıxart"
349msgstr "Seçilmişlәrdәn çıxart"
176
350
177−#: qml/Dash/DashPageHeader.qml:361
351+#: qml/Dash/DashPageHeader.qml:357
178msgid "Add to Favorites"
352msgid "Add to Favorites"
179msgstr "Seçilmişlәrә әlavә et"
353msgstr "Seçilmişlәrә әlavә et"
180
354
@@ -186,24 +360,24 @@ msgstr ""
186msgid "Reset"
360msgid "Reset"
187msgstr ""
361msgstr ""
188
362
189−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:764
363+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
190msgid "Show less"
364msgid "Show less"
191msgstr ""
365msgstr ""
192
366
193−#: qml/Dash/GenericScopeView.qml:579
367+#: qml/Dash/GenericScopeView.qml:580
194msgid "Show all"
368msgid "Show all"
195msgstr ""
369msgstr ""
196
370
197−#: qml/Dash/GenericScopeView.qml:636
371+#: qml/Dash/GenericScopeView.qml:637
198msgctxt "Label: Hint for dash search line edit"
372msgctxt "Label: Hint for dash search line edit"
199msgid "Search"
373msgid "Search"
200msgstr ""
374msgstr ""
201
375
202−#: qml/Dash/PageHeaderExtraPanel.qml:55
376+#: qml/Dash/PageHeaderExtraPanel.qml:56
203msgid "Recent Searches"
377msgid "Recent Searches"
204msgstr ""
378msgstr ""
205
379
206−#: qml/Dash/PageHeaderExtraPanel.qml:66
380+#: qml/Dash/PageHeaderExtraPanel.qml:67
207msgid "Clear All"
381msgid "Clear All"
208msgstr ""
382msgstr ""
209
383
@@ -216,22 +390,18 @@ msgid "Less..."
216msgstr "Az..."
390msgstr "Az..."
217
391
218#: qml/Dash/Previews/PreviewCommentInput.qml:68
392#: qml/Dash/Previews/PreviewCommentInput.qml:68
219−#: qml/Dash/Previews/PreviewRatingInput.qml:174
393+#: qml/Dash/Previews/PreviewRatingInput.qml:175
220msgid "Send"
394msgid "Send"
221msgstr "Göndər"
395msgstr "Göndər"
222
396
223−#: qml/Dash/Previews/PreviewRatingInput.qml:84
397+#: qml/Dash/Previews/PreviewRatingInput.qml:82
224msgid "Rate this"
398msgid "Rate this"
225msgstr "Qiymәtlәndir"
399msgstr "Qiymәtlәndir"
226
400
227−#: qml/Dash/Previews/PreviewRatingInput.qml:129
401+#: qml/Dash/Previews/PreviewRatingInput.qml:157
228msgid "Add a review"
402msgid "Add a review"
229msgstr "Rəy yaz"
403msgstr "Rəy yaz"
230
404
231−#: qml/Dash/Previews/PreviewSharing.qml:66
232−msgid "Preview Share Item"
233−msgstr ""
234−
235#: qml/Dash/PullToRefreshScopeStyle.qml:55
405#: qml/Dash/PullToRefreshScopeStyle.qml:55
236msgid "Pull to refresh…"
406msgid "Pull to refresh…"
237msgstr ""
407msgstr ""
@@ -244,49 +414,61 @@ msgstr ""
244msgid "Enable location data"
414msgid "Enable location data"
245msgstr ""
415msgstr ""
246
416
247−#: qml/Dash/ScopesList.qml:67
417+#: qml/Dash/ScopesList.qml:55
248msgid "Manage"
418msgid "Manage"
249msgstr ""
419msgstr ""
250
420
251−#: qml/Dash/ScopesList.qml:113
421+#: qml/Dash/ScopesList.qml:102
252msgid "Home"
422msgid "Home"
253msgstr ""
423msgstr ""
254
424
255−#: qml/Dash/ScopesList.qml:114
425+#: qml/Dash/ScopesList.qml:103
256msgid "Also installed"
426msgid "Also installed"
257msgstr ""
427msgstr ""
258
428
259−#: qml/DisabledScreenNotice.qml:104
429+#: qml/DisabledScreenNotice.qml:109
260msgid ""
430msgid ""
261"Your device is now connected to an external display. Use this screen as a "
431"Your device is now connected to an external display. Use this screen as a "
262"touch pad to interact with the pointer."
432"touch pad to interact with the pointer."
263msgstr ""
433msgstr ""
264
434
265−#: qml/Greeter/CoverPage.qml:118
435+#: qml/Greeter/CoverPage.qml:127
266msgid "Unlock"
436msgid "Unlock"
267msgstr ""
437msgstr ""
268
438
439+#: qml/Greeter/Greeter.qml:555
440+msgid "Try again"
441+msgstr ""
442+
269−#: qml/Greeter/LoginList.qml:239
443+#: qml/Greeter/LoginList.qml:63
444+msgid "Passphrase"
445+msgstr ""
446+
447+#: qml/Greeter/LoginList.qml:64
448+msgid "Passcode"
449+msgstr ""
450+
451+#: qml/Greeter/LoginList.qml:87
270msgid "Retry"
452msgid "Retry"
271msgstr ""
453msgstr ""
272
454
273−#: qml/Greeter/LoginList.qml:240
455+#: qml/Greeter/LoginList.qml:88
274−msgid "Tap to unlock"
456+msgid "Log In"
275msgstr ""
457msgstr ""
276
458
277−#: qml/Greeter/NarrowView.qml:54
459+#: qml/Greeter/NarrowView.qml:55
278msgid "Sorry, incorrect passphrase."
460msgid "Sorry, incorrect passphrase."
279msgstr "Bağışlayın, açar söz yanlışdır."
461msgstr "Bağışlayın, açar söz yanlışdır."
280
462
281−#: qml/Greeter/NarrowView.qml:55
463+#: qml/Greeter/NarrowView.qml:56
282msgid "Sorry, incorrect passcode."
464msgid "Sorry, incorrect passcode."
283msgstr "Təəssüf ki, açar kod yanlışdır."
465msgstr "Təəssüf ki, açar kod yanlışdır."
284
466
285−#: qml/Greeter/NarrowView.qml:56
467+#: qml/Greeter/NarrowView.qml:57
286msgid "This will be your last attempt."
468msgid "This will be your last attempt."
287msgstr "Bu sizin son cəhdiniz olacaq."
469msgstr "Bu sizin son cəhdiniz olacaq."
288
470
289−#: qml/Greeter/NarrowView.qml:58
471+#: qml/Greeter/NarrowView.qml:59
290msgid ""
472msgid ""
291"If passphrase is entered incorrectly, your phone will conduct a factory "
473"If passphrase is entered incorrectly, your phone will conduct a factory "
292"reset and all personal data will be deleted."
474"reset and all personal data will be deleted."
@@ -294,7 +476,7 @@ msgstr ""
294"Əgər açar söz yanlış daxil edilibsə, onda telefonunuz fabrika parametrlərinə "
476"Əgər açar söz yanlış daxil edilibsə, onda telefonunuz fabrika parametrlərinə "
295"geri qayıdacaq və bütün şəxsi məlumatlarınız silinəcək."
477"geri qayıdacaq və bütün şəxsi məlumatlarınız silinəcək."
296
478
297−#: qml/Greeter/NarrowView.qml:59
479+#: qml/Greeter/NarrowView.qml:60
298msgid ""
480msgid ""
299"If passcode is entered incorrectly, your phone will conduct a factory reset "
481"If passcode is entered incorrectly, your phone will conduct a factory reset "
300"and all personal data will be deleted."
482"and all personal data will be deleted."
@@ -302,34 +484,34 @@ msgstr ""
302"Əgər açar kod yanlış daxil edilibsə, onda telefonunuz fabrika parametrlərinə "
484"Əgər açar kod yanlış daxil edilibsə, onda telefonunuz fabrika parametrlərinə "
303"geri qayıdacaq və bütün şəxsi məlumatlarınız silinəcək."
485"geri qayıdacaq və bütün şəxsi məlumatlarınız silinəcək."
304
486
305−#: qml/Greeter/NarrowView.qml:116
487+#: qml/Greeter/NarrowView.qml:129
306#, qt-format
488#, qt-format
307msgid "Enter %1"
489msgid "Enter %1"
308msgstr ""
490msgstr ""
309
491
310−#: qml/Greeter/NarrowView.qml:117
492+#: qml/Greeter/NarrowView.qml:130
311msgid "Enter passphrase"
493msgid "Enter passphrase"
312msgstr ""
494msgstr ""
313
495
314−#: qml/Greeter/NarrowView.qml:118
496+#: qml/Greeter/NarrowView.qml:131
315msgid "Enter passcode"
497msgid "Enter passcode"
316msgstr ""
498msgstr ""
317
499
318−#: qml/Greeter/NarrowView.qml:119
500+#: qml/Greeter/NarrowView.qml:135
319#, qt-format
501#, qt-format
320msgid "Sorry, incorrect %1"
502msgid "Sorry, incorrect %1"
321msgstr "Bağışlayın, %1 yanlışdır"
503msgstr "Bağışlayın, %1 yanlışdır"
322
504
323−#: qml/Greeter/NarrowView.qml:120
505+#: qml/Greeter/NarrowView.qml:136
324msgid "Sorry, incorrect passphrase"
506msgid "Sorry, incorrect passphrase"
325msgstr "Bağışlayın, açar söz yanlışdır"
507msgstr "Bağışlayın, açar söz yanlışdır"
326
508
327−#: qml/Greeter/NarrowView.qml:121
509+#: qml/Greeter/NarrowView.qml:137
328msgctxt "passphrase"
510msgctxt "passphrase"
329msgid "Please re-enter"
511msgid "Please re-enter"
330msgstr ""
512msgstr ""
331
513
332−#: qml/Greeter/NarrowView.qml:122
514+#: qml/Greeter/NarrowView.qml:138
333msgid "Sorry, incorrect passcode"
515msgid "Sorry, incorrect passcode"
334msgstr ""
516msgstr ""
335
517
@@ -404,18 +586,18 @@ msgstr "Bitdi"
404msgid "Failed, tap to retry"
586msgid "Failed, tap to retry"
405msgstr "Alınmadı. Yenidәn cәhd etmək üçün toxunun"
587msgstr "Alınmadı. Yenidәn cәhd etmək üçün toxunun"
406
588
407−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
589+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
408−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
590+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
409msgctxt "Button: Send a reply message"
591msgctxt "Button: Send a reply message"
410msgid "Send"
592msgid "Send"
411msgstr ""
593msgstr ""
412
594
413−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
595+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
414msgctxt "Label: Hint in message indicator line edit"
596msgctxt "Label: Hint in message indicator line edit"
415msgid "Reply"
597msgid "Reply"
416msgstr ""
598msgstr ""
417
599
418−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
600+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
419msgctxt "Button: Call back on phone"
601msgctxt "Button: Call back on phone"
420msgid "Call back"
602msgid "Call back"
421msgstr ""
603msgstr ""
@@ -424,32 +606,12 @@ msgstr ""
424msgid "Drag using 3 fingers any application from one window to the other"
606msgid "Drag using 3 fingers any application from one window to the other"
425msgstr ""
607msgstr ""
426
608
427−#: qml/Tutorial/TutorialBottom.qml:78
428−msgid "Swipe up to add a contact"
429−msgstr ""
430−
431−#: qml/Tutorial/TutorialBottom.qml:80
432−msgid "Swipe up for favorite calculations"
433−msgstr ""
434−
435−#: qml/Tutorial/TutorialBottom.qml:82
436−msgid "Swipe up for recent calls"
437−msgstr ""
438−
439−#: qml/Tutorial/TutorialBottom.qml:84
440−msgid "Swipe up to create a message"
441−msgstr ""
442−
443−#: qml/Tutorial/TutorialBottom.qml:85
444−msgid "Swipe up to manage the app"
445−msgstr ""
446−
447−#: qml/Tutorial/TutorialLeftLong.qml:47
609+#: qml/Tutorial/TutorialLeftLong.qml:49
448msgid "Long swipe from the left edge to open the Today scope"
610msgid "Long swipe from the left edge to open the Today scope"
449msgstr ""
611msgstr ""
450
612
451#: qml/Tutorial/TutorialLeft.qml:47
613#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Swipe from the left edge to open the launcher"
614+msgid "Short swipe from the left edge to open the launcher"
453msgstr ""
615msgstr ""
454
616
455#: qml/Tutorial/TutorialRight.qml:55
617#: qml/Tutorial/TutorialRight.qml:55
@@ -457,15 +619,11 @@ msgid "Push your mouse against the right edge to view your open apps"
457msgstr ""
619msgstr ""
458
620
459#: qml/Tutorial/TutorialRight.qml:56
621#: qml/Tutorial/TutorialRight.qml:56
460−msgid "Short or long swipe from the right edge to view your open apps"
622+msgid "Swipe from the right edge to view your open apps"
461msgstr ""
623msgstr ""
462
624
463#: qml/Tutorial/TutorialTop.qml:53
625#: qml/Tutorial/TutorialTop.qml:53
464−msgid "Swipe from the top right edge to open the notification bar"
626+msgid "Swipe from the top edge to access notifications and quick settings"
465−msgstr ""
466−
467−#: qml/Tutorial/TutorialTop.qml:54
468−msgid "Swipe from the top edge to open the notification bar"
469msgstr ""
627msgstr ""
470
628
471#: qml/Wizard/Page.qml:54
629#: qml/Wizard/Page.qml:54
@@ -477,11 +635,11 @@ msgstr ""
477msgid "Language"
635msgid "Language"
478msgstr ""
636msgstr ""
479
637
480−#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
638+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
481−#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
639+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
482#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
640#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
483#: qml/Wizard/Pages/75-report-check.qml:84
641#: qml/Wizard/Pages/75-report-check.qml:84
484−#: qml/Wizard/Pages/passcode-desktop.qml:124
642+#: qml/Wizard/Pages/passcode-desktop.qml:141
485#: qml/Wizard/Pages/password-set.qml:141
643#: qml/Wizard/Pages/password-set.qml:141
486msgid "Next"
644msgid "Next"
487msgstr ""
645msgstr ""
@@ -543,7 +701,7 @@ msgstr ""
543msgid "Time Zone"
701msgid "Time Zone"
544msgstr ""
702msgstr ""
545
703
546−#: qml/Wizard/Pages/50-timezone.qml:178
704+#: qml/Wizard/Pages/50-timezone.qml:181
547msgid "Enter your city"
705msgid "Enter your city"
548msgstr ""
706msgstr ""
549
707
@@ -633,7 +791,7 @@ msgid "Service Terms"
633msgstr ""
791msgstr ""
634
792
635#: qml/Wizard/Pages/passcode-confirm.qml:43
793#: qml/Wizard/Pages/passcode-confirm.qml:43
636−#: qml/Wizard/Pages/passcode-desktop.qml:80
794+#: qml/Wizard/Pages/passcode-desktop.qml:96
637msgid "Confirm passcode"
795msgid "Confirm passcode"
638msgstr ""
796msgstr ""
639
797
@@ -650,24 +808,24 @@ msgstr ""
650msgid "Lock Screen Passcode"
808msgid "Lock Screen Passcode"
651msgstr ""
809msgstr ""
652
810
653−#: qml/Wizard/Pages/passcode-desktop.qml:56
811+#: qml/Wizard/Pages/passcode-desktop.qml:60
654msgid "Enter 4 numbers to setup your passcode"
812msgid "Enter 4 numbers to setup your passcode"
655msgstr ""
813msgstr ""
656
814
657−#: qml/Wizard/Pages/passcode-desktop.qml:65
815+#: qml/Wizard/Pages/passcode-desktop.qml:76
658#: qml/Wizard/Pages/passcode-set.qml:54
816#: qml/Wizard/Pages/passcode-set.qml:54
659msgid "Choose passcode"
817msgid "Choose passcode"
660msgstr ""
818msgstr ""
661
819
662−#: qml/Wizard/Pages/passcode-desktop.qml:105
820+#: qml/Wizard/Pages/passcode-desktop.qml:126
663msgid "Passcode too short"
821msgid "Passcode too short"
664msgstr ""
822msgstr ""
665
823
666−#: qml/Wizard/Pages/passcode-desktop.qml:107
824+#: qml/Wizard/Pages/passcode-desktop.qml:128
667msgid "Passcodes match"
825msgid "Passcodes match"
668msgstr ""
826msgstr ""
669
827
670−#: qml/Wizard/Pages/passcode-desktop.qml:109
828+#: qml/Wizard/Pages/passcode-desktop.qml:130
671msgid "Passcodes do not match"
829msgid "Passcodes do not match"
672msgstr ""
830msgstr ""
673
831
@@ -716,26 +874,30 @@ msgid "To proceed with no SIM tap Skip."
716msgstr ""
874msgstr ""
717
875
718#: qml/Wizard/PasswordMeter.qml:87
876#: qml/Wizard/PasswordMeter.qml:87
719−msgid "Passwords match"
877+msgid "Password too short"
720msgstr ""
878msgstr ""
721
879
722#: qml/Wizard/PasswordMeter.qml:89
880#: qml/Wizard/PasswordMeter.qml:89
881+msgid "Passwords match"
882+msgstr ""
883+
884+#: qml/Wizard/PasswordMeter.qml:91
723msgid "Passwords do not match"
885msgid "Passwords do not match"
724msgstr ""
886msgstr ""
725
887
726−#: qml/Wizard/PasswordMeter.qml:93
888+#: qml/Wizard/PasswordMeter.qml:95
727msgid "Strong password"
889msgid "Strong password"
728msgstr ""
890msgstr ""
729
891
730−#: qml/Wizard/PasswordMeter.qml:95
892+#: qml/Wizard/PasswordMeter.qml:97
731msgid "Fair password"
893msgid "Fair password"
732msgstr ""
894msgstr ""
733
895
734−#: qml/Wizard/PasswordMeter.qml:97
896+#: qml/Wizard/PasswordMeter.qml:99
735msgid "Weak password"
897msgid "Weak password"
736msgstr ""
898msgstr ""
737
899
738−#: qml/Wizard/PasswordMeter.qml:99
900+#: qml/Wizard/PasswordMeter.qml:101
739msgid "Very weak password"
901msgid "Very weak password"
740msgstr ""
902msgstr ""
741
903
po/be.po+266−101
@@ -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-05-18 11:19+0000\n"
10+"POT-Creation-Date: 2016-07-11 17:24+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,42 +16,42 @@ 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-05-19 05:49+0000\n"
19+"X-Launchpad-Export-Date: 2016-07-14 06:00+0000\n"
20−"X-Generator: Launchpad (build 18025)\n"
20+"X-Generator: Launchpad (build 18115)\n"
21
21
22−#: plugins/IntegratedLightDM/Greeter.cpp:112
22+#: plugins/LightDM/Greeter.cpp:123
23msgid "Password: "
23msgid "Password: "
24msgstr "Пароль: "
24msgstr "Пароль: "
25
25
26−#: plugins/Unity/Launcher/launcheritem.cpp:48
26+#: plugins/Unity/Launcher/launcheritem.cpp:49
27−#: plugins/Unity/Launcher/launcheritem.cpp:107
27+#: plugins/Unity/Launcher/launcheritem.cpp:108
28msgid "Pin shortcut"
28msgid "Pin shortcut"
29msgstr "Замацаваць кнопку"
29msgstr "Замацаваць кнопку"
30
30
31−#: plugins/Unity/Launcher/launcheritem.cpp:53
31+#: plugins/Unity/Launcher/launcheritem.cpp:54
32msgid "Quit"
32msgid "Quit"
33msgstr "Выйсці"
33msgstr "Выйсці"
34
34
35−#: plugins/Unity/Launcher/launcheritem.cpp:107
35+#: plugins/Unity/Launcher/launcheritem.cpp:108
36msgid "Unpin shortcut"
36msgid "Unpin shortcut"
37msgstr "Адмацаваць кнопку"
37msgstr "Адмацаваць кнопку"
38
38
39−#: qml/Components/DelayedLockscreen.qml:49
39+#: qml/Components/DelayedLockscreen.qml:50
40msgid "Device Locked"
40msgid "Device Locked"
41msgstr "Прылада заблакаваная"
41msgstr "Прылада заблакаваная"
42
42
43−#: qml/Components/DelayedLockscreen.qml:64
43+#: qml/Components/DelayedLockscreen.qml:65
44msgid "You have been locked out due to too many failed passphrase attempts."
44msgid "You have been locked out due to too many failed passphrase attempts."
45msgstr ""
45msgstr ""
46"Вы былі заблакаваныя з-за занадта вялікай колькасці няўдалых спробаў."
46"Вы былі заблакаваныя з-за занадта вялікай колькасці няўдалых спробаў."
47
47
48−#: qml/Components/DelayedLockscreen.qml:65
48+#: qml/Components/DelayedLockscreen.qml:66
49msgid "You have been locked out due to too many failed passcode attempts."
49msgid "You have been locked out due to too many failed passcode attempts."
50msgstr ""
50msgstr ""
51"Вы былі заблакаваныя з-за занадта вялікай колькасці няўдалых спробаў уводу "
51"Вы былі заблакаваныя з-за занадта вялікай колькасці няўдалых спробаў уводу "
52"кода доступу."
52"кода доступу."
53
53
54−#: qml/Components/DelayedLockscreen.qml:74
54+#: qml/Components/DelayedLockscreen.qml:75
55#, qt-format
55#, qt-format
56msgid "Please wait %1 minute and then try again…"
56msgid "Please wait %1 minute and then try again…"
57msgid_plural "Please wait %1 minutes and then try again…"
57msgid_plural "Please wait %1 minutes and then try again…"
@@ -79,7 +79,7 @@ msgid "Log Out"
79msgstr "Выйсці"
79msgstr "Выйсці"
80
80
81#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
81#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
82−#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
82+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
83#: qml/Wizard/Pages/passcode-set.qml:32
83#: qml/Wizard/Pages/passcode-set.qml:32
84msgid "Cancel"
84msgid "Cancel"
85msgstr "Скасаваць"
85msgstr "Скасаваць"
@@ -124,18 +124,188 @@ msgctxt "Button: Restart the system"
124msgid "Restart"
124msgid "Restart"
125msgstr "Перазапуск"
125msgstr "Перазапуск"
126
126
127+#: qml/Components/KeyboardShortcutsOverlay.qml:41
128+msgid "Keyboard Shortcuts"
129+msgstr ""
130+
131+#: qml/Components/KeyboardShortcutsOverlay.qml:55
132+msgid "Unity 8"
133+msgstr ""
134+
135+#: qml/Components/KeyboardShortcutsOverlay.qml:62
136+msgid "PrtScr"
137+msgstr ""
138+
139+#: qml/Components/KeyboardShortcutsOverlay.qml:67
140+msgid "Takes a screenshot."
141+msgstr ""
142+
143+#: qml/Components/KeyboardShortcutsOverlay.qml:75
144+msgid "Alt + PrtScr"
145+msgstr ""
146+
147+#: qml/Components/KeyboardShortcutsOverlay.qml:80
148+msgid "Takes a screenshot of a window."
149+msgstr ""
150+
151+#: qml/Components/KeyboardShortcutsOverlay.qml:88
152+msgid "Super + Space"
153+msgstr ""
154+
155+#: qml/Components/KeyboardShortcutsOverlay.qml:93
156+msgid "Switches to next keyboard layout."
157+msgstr ""
158+
159+#: qml/Components/KeyboardShortcutsOverlay.qml:101
160+msgid "Super + Shift + Space"
161+msgstr ""
162+
163+#: qml/Components/KeyboardShortcutsOverlay.qml:106
164+msgid "Switches to previous keyboard layout."
165+msgstr ""
166+
167+#: qml/Components/KeyboardShortcutsOverlay.qml:118
168+msgid "Launcher"
169+msgstr ""
170+
171+#: qml/Components/KeyboardShortcutsOverlay.qml:125
172+msgid "Super (Hold)"
173+msgstr ""
174+
175+#: qml/Components/KeyboardShortcutsOverlay.qml:130
176+msgid "Opens the launcher, displays shortcuts."
177+msgstr ""
178+
179+#: qml/Components/KeyboardShortcutsOverlay.qml:138
180+msgid "Alt + F1"
181+msgstr ""
182+
183+#: qml/Components/KeyboardShortcutsOverlay.qml:143
184+msgid "Opens launcher keyboard navigation mode."
185+msgstr ""
186+
187+#: qml/Components/KeyboardShortcutsOverlay.qml:151
188+msgid "Super + Tab"
189+msgstr ""
190+
191+#: qml/Components/KeyboardShortcutsOverlay.qml:156
192+msgid "Switches applications via the launcher."
193+msgstr ""
194+
195+#: qml/Components/KeyboardShortcutsOverlay.qml:164
196+msgid "Super + 0 to 9"
197+msgstr ""
198+
199+#: qml/Components/KeyboardShortcutsOverlay.qml:169
200+msgid "Same as clicking on a launcher icon."
201+msgstr ""
202+
203+#: qml/Components/KeyboardShortcutsOverlay.qml:181
204+msgid "Scopes"
205+msgstr ""
206+
207+#: qml/Components/KeyboardShortcutsOverlay.qml:188
208+msgid "Super (Tap)"
209+msgstr ""
210+
211+#: qml/Components/KeyboardShortcutsOverlay.qml:193
212+msgid "Opens the Scopes home."
213+msgstr ""
214+
215+#: qml/Components/KeyboardShortcutsOverlay.qml:209
216+msgid "Switching"
217+msgstr ""
218+
219+#: qml/Components/KeyboardShortcutsOverlay.qml:216
220+msgid "Alt + Tab"
221+msgstr ""
222+
223+#: qml/Components/KeyboardShortcutsOverlay.qml:221
224+msgid "Switches between applications."
225+msgstr ""
226+
227+#: qml/Components/KeyboardShortcutsOverlay.qml:229
228+msgid "Super + W"
229+msgstr ""
230+
231+#: qml/Components/KeyboardShortcutsOverlay.qml:234
232+msgid "Opens the desktop spread."
233+msgstr ""
234+
235+#: qml/Components/KeyboardShortcutsOverlay.qml:242
236+msgid "Cursor Left or Right"
237+msgstr ""
238+
239+#: qml/Components/KeyboardShortcutsOverlay.qml:247
240+msgid "Moves the focus."
241+msgstr ""
242+
243+#: qml/Components/KeyboardShortcutsOverlay.qml:259
244+msgid "Windows"
245+msgstr ""
246+
247+#: qml/Components/KeyboardShortcutsOverlay.qml:266
248+msgid "Ctrl + Super + D"
249+msgstr ""
250+
251+#: qml/Components/KeyboardShortcutsOverlay.qml:271
252+msgid "Minimizes all windows."
253+msgstr ""
254+
255+#: qml/Components/KeyboardShortcutsOverlay.qml:279
256+msgid "Ctrl + Super + Up"
257+msgstr ""
258+
259+#: qml/Components/KeyboardShortcutsOverlay.qml:284
260+msgid "Maximizes the current window."
261+msgstr ""
262+
263+#: qml/Components/KeyboardShortcutsOverlay.qml:292
264+msgid "Ctrl + Super + Down"
265+msgstr ""
266+
267+#: qml/Components/KeyboardShortcutsOverlay.qml:297
268+msgid "Minimizes or restores the current window."
269+msgstr ""
270+
271+#: qml/Components/KeyboardShortcutsOverlay.qml:305
272+msgid "Ctrl + Super + Left or Right"
273+msgstr ""
274+
275+#: qml/Components/KeyboardShortcutsOverlay.qml:310
276+msgid "Semi-maximizes the current window."
277+msgstr ""
278+
279+#: qml/Components/KeyboardShortcutsOverlay.qml:318
280+msgid "Alt + F4"
281+msgstr ""
282+
283+#: qml/Components/KeyboardShortcutsOverlay.qml:323
284+msgid "Closes the current window."
285+msgstr ""
286+
127−#: qml/Components/Lockscreen.qml:231
287+#: qml/Components/Lockscreen.qml:239
128msgid "Return to Call"
288msgid "Return to Call"
129msgstr "Вярнуцца да выкліку"
289msgstr "Вярнуцца да выкліку"
130
290
131−#: qml/Components/Lockscreen.qml:231
291+#: qml/Components/Lockscreen.qml:239
132msgid "Emergency Call"
292msgid "Emergency Call"
133msgstr "Терміновы выклік"
293msgstr "Терміновы выклік"
134
294
135−#: qml/Components/Lockscreen.qml:263
295+#: qml/Components/Lockscreen.qml:271
136msgid "OK"
296msgid "OK"
137msgstr "Добра"
297msgstr "Добра"
138
298
299+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
300+#, qt-format
301+msgid "%1:%2:%3"
302+msgstr ""
303+
304+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
305+#, qt-format
306+msgid "%1:%2"
307+msgstr ""
308+
139#: qml/Components/ModeSwitchWarningDialog.qml:32
309#: qml/Components/ModeSwitchWarningDialog.qml:32
140msgid "Apps may have unsaved data:"
310msgid "Apps may have unsaved data:"
141msgstr "Прылады могуць мець незахованыя дадзеныя:"
311msgstr "Прылады могуць мець незахованыя дадзеныя:"
@@ -162,26 +332,30 @@ msgstr "Перападлучыцца зараз!"
162msgid "Close all"
332msgid "Close all"
163msgstr "Зачыніць усё"
333msgstr "Зачыніць усё"
164
334
335+#: qml/Components/SharingPicker.qml:54
336+msgid "Preview Share Item"
337+msgstr "Праглядзець элемент"
338+
165−#: qml/Dash/DashPageHeader.qml:337
339+#: qml/Dash/DashPageHeader.qml:333
166msgctxt "Button: Open the Ubuntu Store"
340msgctxt "Button: Open the Ubuntu Store"
167msgid "Store"
341msgid "Store"
168msgstr "Крама"
342msgstr "Крама"
169
343
170−#: qml/Dash/DashPageHeader.qml:344
344+#: qml/Dash/DashPageHeader.qml:340
171msgctxt "Button: Start a search in the current dash scope"
345msgctxt "Button: Start a search in the current dash scope"
172msgid "Search"
346msgid "Search"
173msgstr "Пошук"
347msgstr "Пошук"
174
348
175−#: qml/Dash/DashPageHeader.qml:354
349+#: qml/Dash/DashPageHeader.qml:350
176msgctxt "Button: Show the current dash scope settings"
350msgctxt "Button: Show the current dash scope settings"
177msgid "Settings"
351msgid "Settings"
178msgstr "Налады"
352msgstr "Налады"
179
353
180−#: qml/Dash/DashPageHeader.qml:361
354+#: qml/Dash/DashPageHeader.qml:357
181msgid "Remove from Favorites"
355msgid "Remove from Favorites"
182msgstr "Выдаліць з абранага"
356msgstr "Выдаліць з абранага"
183
357
184−#: qml/Dash/DashPageHeader.qml:361
358+#: qml/Dash/DashPageHeader.qml:357
185msgid "Add to Favorites"
359msgid "Add to Favorites"
186msgstr "Дадаць да абранага"
360msgstr "Дадаць да абранага"
187
361
@@ -193,24 +367,24 @@ msgstr ""
193msgid "Reset"
367msgid "Reset"
194msgstr ""
368msgstr ""
195
369
196−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:764
370+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
197msgid "Show less"
371msgid "Show less"
198msgstr ""
372msgstr ""
199
373
200−#: qml/Dash/GenericScopeView.qml:579
374+#: qml/Dash/GenericScopeView.qml:580
201msgid "Show all"
375msgid "Show all"
202msgstr ""
376msgstr ""
203
377
204−#: qml/Dash/GenericScopeView.qml:636
378+#: qml/Dash/GenericScopeView.qml:637
205msgctxt "Label: Hint for dash search line edit"
379msgctxt "Label: Hint for dash search line edit"
206msgid "Search"
380msgid "Search"
207msgstr "Пошук"
381msgstr "Пошук"
208
382
209−#: qml/Dash/PageHeaderExtraPanel.qml:55
383+#: qml/Dash/PageHeaderExtraPanel.qml:56
210msgid "Recent Searches"
384msgid "Recent Searches"
211msgstr ""
385msgstr ""
212
386
213−#: qml/Dash/PageHeaderExtraPanel.qml:66
387+#: qml/Dash/PageHeaderExtraPanel.qml:67
214msgid "Clear All"
388msgid "Clear All"
215msgstr ""
389msgstr ""
216
390
@@ -223,22 +397,18 @@ msgid "Less..."
223msgstr "Менш..."
397msgstr "Менш..."
224
398
225#: qml/Dash/Previews/PreviewCommentInput.qml:68
399#: qml/Dash/Previews/PreviewCommentInput.qml:68
226−#: qml/Dash/Previews/PreviewRatingInput.qml:174
400+#: qml/Dash/Previews/PreviewRatingInput.qml:175
227msgid "Send"
401msgid "Send"
228msgstr "Адправіць"
402msgstr "Адправіць"
229
403
230−#: qml/Dash/Previews/PreviewRatingInput.qml:84
404+#: qml/Dash/Previews/PreviewRatingInput.qml:82
231msgid "Rate this"
405msgid "Rate this"
232msgstr "Ацаніць"
406msgstr "Ацаніць"
233
407
234−#: qml/Dash/Previews/PreviewRatingInput.qml:129
408+#: qml/Dash/Previews/PreviewRatingInput.qml:157
235msgid "Add a review"
409msgid "Add a review"
236msgstr "Дадаць рэцэнзію"
410msgstr "Дадаць рэцэнзію"
237
411
238−#: qml/Dash/Previews/PreviewSharing.qml:66
239−msgid "Preview Share Item"
240−msgstr "Праглядзець элемент"
241−
242#: qml/Dash/PullToRefreshScopeStyle.qml:55
412#: qml/Dash/PullToRefreshScopeStyle.qml:55
243msgid "Pull to refresh…"
413msgid "Pull to refresh…"
244msgstr "Пацягніце для абнаўлення..."
414msgstr "Пацягніце для абнаўлення..."
@@ -251,49 +421,61 @@ msgstr "Адпусціце для абнаўлення..."
251msgid "Enable location data"
421msgid "Enable location data"
252msgstr "Уключыць дадзеныя аб месцазнаходжанні"
422msgstr "Уключыць дадзеныя аб месцазнаходжанні"
253
423
254−#: qml/Dash/ScopesList.qml:67
424+#: qml/Dash/ScopesList.qml:55
255msgid "Manage"
425msgid "Manage"
256msgstr "Кіраванне"
426msgstr "Кіраванне"
257
427
258−#: qml/Dash/ScopesList.qml:113
428+#: qml/Dash/ScopesList.qml:102
259msgid "Home"
429msgid "Home"
260msgstr "Хатняя папка"
430msgstr "Хатняя папка"
261
431
262−#: qml/Dash/ScopesList.qml:114
432+#: qml/Dash/ScopesList.qml:103
263msgid "Also installed"
433msgid "Also installed"
264msgstr "Таксама ўсталявана"
434msgstr "Таксама ўсталявана"
265
435
266−#: qml/DisabledScreenNotice.qml:104
436+#: qml/DisabledScreenNotice.qml:109
267msgid ""
437msgid ""
268"Your device is now connected to an external display. Use this screen as a "
438"Your device is now connected to an external display. Use this screen as a "
269"touch pad to interact with the pointer."
439"touch pad to interact with the pointer."
270msgstr ""
440msgstr ""
271
441
272−#: qml/Greeter/CoverPage.qml:118
442+#: qml/Greeter/CoverPage.qml:127
273msgid "Unlock"
443msgid "Unlock"
274msgstr "Разблакаваць"
444msgstr "Разблакаваць"
275
445
446+#: qml/Greeter/Greeter.qml:555
447+msgid "Try again"
448+msgstr ""
449+
276−#: qml/Greeter/LoginList.qml:239
450+#: qml/Greeter/LoginList.qml:63
451+msgid "Passphrase"
452+msgstr ""
453+
454+#: qml/Greeter/LoginList.qml:64
455+msgid "Passcode"
456+msgstr ""
457+
458+#: qml/Greeter/LoginList.qml:87
277msgid "Retry"
459msgid "Retry"
278msgstr "Паспрабаваць зноў"
460msgstr "Паспрабаваць зноў"
279
461
280−#: qml/Greeter/LoginList.qml:240
462+#: qml/Greeter/LoginList.qml:88
281−msgid "Tap to unlock"
463+msgid "Log In"
282−msgstr "Націсніце, каб разблакаваць"
464+msgstr ""
283
465
284−#: qml/Greeter/NarrowView.qml:54
466+#: qml/Greeter/NarrowView.qml:55
285msgid "Sorry, incorrect passphrase."
467msgid "Sorry, incorrect passphrase."
286msgstr "Даруйце, няслушны пароль."
468msgstr "Даруйце, няслушны пароль."
287
469
288−#: qml/Greeter/NarrowView.qml:55
470+#: qml/Greeter/NarrowView.qml:56
289msgid "Sorry, incorrect passcode."
471msgid "Sorry, incorrect passcode."
290msgstr "Даруйце, няслушны код."
472msgstr "Даруйце, няслушны код."
291
473
292−#: qml/Greeter/NarrowView.qml:56
474+#: qml/Greeter/NarrowView.qml:57
293msgid "This will be your last attempt."
475msgid "This will be your last attempt."
294msgstr "Апошняя спроба."
476msgstr "Апошняя спроба."
295
477
296−#: qml/Greeter/NarrowView.qml:58
478+#: qml/Greeter/NarrowView.qml:59
297msgid ""
479msgid ""
298"If passphrase is entered incorrectly, your phone will conduct a factory "
480"If passphrase is entered incorrectly, your phone will conduct a factory "
299"reset and all personal data will be deleted."
481"reset and all personal data will be deleted."
@@ -301,7 +483,7 @@ msgstr ""
301"Калі ўведзены пароль неправільны, Ваш тэлефон зробіць агульны скід налад і "
483"Калі ўведзены пароль неправільны, Ваш тэлефон зробіць агульны скід налад і "
302"ўсе асабістыя дадзеныя будуць выдалены."
484"ўсе асабістыя дадзеныя будуць выдалены."
303
485
304−#: qml/Greeter/NarrowView.qml:59
486+#: qml/Greeter/NarrowView.qml:60
305msgid ""
487msgid ""
306"If passcode is entered incorrectly, your phone will conduct a factory reset "
488"If passcode is entered incorrectly, your phone will conduct a factory reset "
307"and all personal data will be deleted."
489"and all personal data will be deleted."
@@ -309,34 +491,34 @@ msgstr ""
309"Калі ўведзены код неправільны, Ваш тэлефон зробіць агульны скід налад і ўсе "
491"Калі ўведзены код неправільны, Ваш тэлефон зробіць агульны скід налад і ўсе "
310"асабістыя дадзеныя будуць выдалены."
492"асабістыя дадзеныя будуць выдалены."
311
493
312−#: qml/Greeter/NarrowView.qml:116
494+#: qml/Greeter/NarrowView.qml:129
313#, qt-format
495#, qt-format
314msgid "Enter %1"
496msgid "Enter %1"
315msgstr "Увядзіце %1"
497msgstr "Увядзіце %1"
316
498
317−#: qml/Greeter/NarrowView.qml:117
499+#: qml/Greeter/NarrowView.qml:130
318msgid "Enter passphrase"
500msgid "Enter passphrase"
319msgstr "Увядзіце пароль"
501msgstr "Увядзіце пароль"
320
502
321−#: qml/Greeter/NarrowView.qml:118
503+#: qml/Greeter/NarrowView.qml:131
322msgid "Enter passcode"
504msgid "Enter passcode"
323msgstr "Увядзіце код"
505msgstr "Увядзіце код"
324
506
325−#: qml/Greeter/NarrowView.qml:119
507+#: qml/Greeter/NarrowView.qml:135
326#, qt-format
508#, qt-format
327msgid "Sorry, incorrect %1"
509msgid "Sorry, incorrect %1"
328msgstr "Даруйце, некарэктны %1"
510msgstr "Даруйце, некарэктны %1"
329
511
330−#: qml/Greeter/NarrowView.qml:120
512+#: qml/Greeter/NarrowView.qml:136
331msgid "Sorry, incorrect passphrase"
513msgid "Sorry, incorrect passphrase"
332msgstr "Даруйце, някарэктны пароль"
514msgstr "Даруйце, някарэктны пароль"
333
515
334−#: qml/Greeter/NarrowView.qml:121
516+#: qml/Greeter/NarrowView.qml:137
335msgctxt "passphrase"
517msgctxt "passphrase"
336msgid "Please re-enter"
518msgid "Please re-enter"
337msgstr "Калі ласка, паўтарыце ўвод"
519msgstr "Калі ласка, паўтарыце ўвод"
338
520
339−#: qml/Greeter/NarrowView.qml:122
521+#: qml/Greeter/NarrowView.qml:138
340msgid "Sorry, incorrect passcode"
522msgid "Sorry, incorrect passcode"
341msgstr "Даруйце, некарэктны код"
523msgstr "Даруйце, некарэктны код"
342
524
@@ -414,18 +596,18 @@ msgstr "Скончана"
414msgid "Failed, tap to retry"
596msgid "Failed, tap to retry"
415msgstr "Не атрымалася, націсніце, каб паўтарыць спробу"
597msgstr "Не атрымалася, націсніце, каб паўтарыць спробу"
416
598
417−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
599+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
418−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
600+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
419msgctxt "Button: Send a reply message"
601msgctxt "Button: Send a reply message"
420msgid "Send"
602msgid "Send"
421msgstr "Даслаць"
603msgstr "Даслаць"
422
604
423−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
605+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
424msgctxt "Label: Hint in message indicator line edit"
606msgctxt "Label: Hint in message indicator line edit"
425msgid "Reply"
607msgid "Reply"
426msgstr "Адказаць"
608msgstr "Адказаць"
427
609
428−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
610+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
429msgctxt "Button: Call back on phone"
611msgctxt "Button: Call back on phone"
430msgid "Call back"
612msgid "Call back"
431msgstr "Патэлефанаваць"
613msgstr "Патэлефанаваць"
@@ -434,32 +616,12 @@ msgstr "Патэлефанаваць"
434msgid "Drag using 3 fingers any application from one window to the other"
616msgid "Drag using 3 fingers any application from one window to the other"
435msgstr ""
617msgstr ""
436
618
437−#: qml/Tutorial/TutorialBottom.qml:78
438−msgid "Swipe up to add a contact"
439−msgstr ""
440−
441−#: qml/Tutorial/TutorialBottom.qml:80
442−msgid "Swipe up for favorite calculations"
443−msgstr ""
444−
445−#: qml/Tutorial/TutorialBottom.qml:82
446−msgid "Swipe up for recent calls"
447−msgstr ""
448−
449−#: qml/Tutorial/TutorialBottom.qml:84
450−msgid "Swipe up to create a message"
451−msgstr ""
452−
453−#: qml/Tutorial/TutorialBottom.qml:85
454−msgid "Swipe up to manage the app"
455−msgstr ""
456−
457−#: qml/Tutorial/TutorialLeftLong.qml:47
619+#: qml/Tutorial/TutorialLeftLong.qml:49
458msgid "Long swipe from the left edge to open the Today scope"
620msgid "Long swipe from the left edge to open the Today scope"
459msgstr ""
621msgstr ""
460
622
461#: qml/Tutorial/TutorialLeft.qml:47
623#: qml/Tutorial/TutorialLeft.qml:47
462−msgid "Swipe from the left edge to open the launcher"
624+msgid "Short swipe from the left edge to open the launcher"
463msgstr ""
625msgstr ""
464
626
465#: qml/Tutorial/TutorialRight.qml:55
627#: qml/Tutorial/TutorialRight.qml:55
@@ -467,15 +629,11 @@ msgid "Push your mouse against the right edge to view your open apps"
467msgstr ""
629msgstr ""
468
630
469#: qml/Tutorial/TutorialRight.qml:56
631#: qml/Tutorial/TutorialRight.qml:56
470−msgid "Short or long swipe from the right edge to view your open apps"
632+msgid "Swipe from the right edge to view your open apps"
471msgstr ""
633msgstr ""
472
634
473#: qml/Tutorial/TutorialTop.qml:53
635#: qml/Tutorial/TutorialTop.qml:53
474−msgid "Swipe from the top right edge to open the notification bar"
636+msgid "Swipe from the top edge to access notifications and quick settings"
475−msgstr ""
476−
477−#: qml/Tutorial/TutorialTop.qml:54
478−msgid "Swipe from the top edge to open the notification bar"
479msgstr ""
637msgstr ""
480
638
481#: qml/Wizard/Page.qml:54
639#: qml/Wizard/Page.qml:54
@@ -487,11 +645,11 @@ msgstr "Вярнуцца"
487msgid "Language"
645msgid "Language"
488msgstr ""
646msgstr ""
489
647
490−#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
648+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
491−#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
649+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
492#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
650#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
493#: qml/Wizard/Pages/75-report-check.qml:84
651#: qml/Wizard/Pages/75-report-check.qml:84
494−#: qml/Wizard/Pages/passcode-desktop.qml:124
652+#: qml/Wizard/Pages/passcode-desktop.qml:141
495#: qml/Wizard/Pages/password-set.qml:141
653#: qml/Wizard/Pages/password-set.qml:141
496msgid "Next"
654msgid "Next"
497msgstr ""
655msgstr ""
@@ -553,7 +711,7 @@ msgstr ""
553msgid "Time Zone"
711msgid "Time Zone"
554msgstr ""
712msgstr ""
555
713
556−#: qml/Wizard/Pages/50-timezone.qml:178
714+#: qml/Wizard/Pages/50-timezone.qml:181
557msgid "Enter your city"
715msgid "Enter your city"
558msgstr ""
716msgstr ""
559
717
@@ -643,7 +801,7 @@ msgid "Service Terms"
643msgstr ""
801msgstr ""
644
802
645#: qml/Wizard/Pages/passcode-confirm.qml:43
803#: qml/Wizard/Pages/passcode-confirm.qml:43
646−#: qml/Wizard/Pages/passcode-desktop.qml:80
804+#: qml/Wizard/Pages/passcode-desktop.qml:96
647msgid "Confirm passcode"
805msgid "Confirm passcode"
648msgstr "Пацвердзіце код-пароль"
806msgstr "Пацвердзіце код-пароль"
649
807
@@ -660,24 +818,24 @@ msgstr ""
660msgid "Lock Screen Passcode"
818msgid "Lock Screen Passcode"
661msgstr ""
819msgstr ""
662
820
663−#: qml/Wizard/Pages/passcode-desktop.qml:56
821+#: qml/Wizard/Pages/passcode-desktop.qml:60
664msgid "Enter 4 numbers to setup your passcode"
822msgid "Enter 4 numbers to setup your passcode"
665msgstr ""
823msgstr ""
666
824
667−#: qml/Wizard/Pages/passcode-desktop.qml:65
825+#: qml/Wizard/Pages/passcode-desktop.qml:76
668#: qml/Wizard/Pages/passcode-set.qml:54
826#: qml/Wizard/Pages/passcode-set.qml:54
669msgid "Choose passcode"
827msgid "Choose passcode"
670msgstr ""
828msgstr ""
671
829
672−#: qml/Wizard/Pages/passcode-desktop.qml:105
830+#: qml/Wizard/Pages/passcode-desktop.qml:126
673msgid "Passcode too short"
831msgid "Passcode too short"
674msgstr ""
832msgstr ""
675
833
676−#: qml/Wizard/Pages/passcode-desktop.qml:107
834+#: qml/Wizard/Pages/passcode-desktop.qml:128
677msgid "Passcodes match"
835msgid "Passcodes match"
678msgstr ""
836msgstr ""
679
837
680−#: qml/Wizard/Pages/passcode-desktop.qml:109
838+#: qml/Wizard/Pages/passcode-desktop.qml:130
681msgid "Passcodes do not match"
839msgid "Passcodes do not match"
682msgstr ""
840msgstr ""
683
841
@@ -726,26 +884,30 @@ msgid "To proceed with no SIM tap Skip."
726msgstr ""
884msgstr ""
727
885
728#: qml/Wizard/PasswordMeter.qml:87
886#: qml/Wizard/PasswordMeter.qml:87
729−msgid "Passwords match"
887+msgid "Password too short"
730msgstr ""
888msgstr ""
731
889
732#: qml/Wizard/PasswordMeter.qml:89
890#: qml/Wizard/PasswordMeter.qml:89
891+msgid "Passwords match"
892+msgstr ""
893+
894+#: qml/Wizard/PasswordMeter.qml:91
733msgid "Passwords do not match"
895msgid "Passwords do not match"
734msgstr ""
896msgstr ""
735
897
736−#: qml/Wizard/PasswordMeter.qml:93
898+#: qml/Wizard/PasswordMeter.qml:95
737msgid "Strong password"
899msgid "Strong password"
738msgstr ""
900msgstr ""
739
901
740−#: qml/Wizard/PasswordMeter.qml:95
902+#: qml/Wizard/PasswordMeter.qml:97
741msgid "Fair password"
903msgid "Fair password"
742msgstr ""
904msgstr ""
743
905
744−#: qml/Wizard/PasswordMeter.qml:97
906+#: qml/Wizard/PasswordMeter.qml:99
745msgid "Weak password"
907msgid "Weak password"
746msgstr ""
908msgstr ""
747
909
748−#: qml/Wizard/PasswordMeter.qml:99
910+#: qml/Wizard/PasswordMeter.qml:101
749msgid "Very weak password"
911msgid "Very weak password"
750msgstr ""
912msgstr ""
751
913
@@ -957,6 +1119,9 @@ msgstr ""
957#~ msgid "Reboot"
1119#~ msgid "Reboot"
958#~ msgstr "Перазагрузіць"
1120#~ msgstr "Перазагрузіць"
959
1121
1122+#~ msgid "Tap to unlock"
1123+#~ msgstr "Націсніце, каб разблакаваць"
1124+
960#~ msgid "Swipe up from the bottom edge."
1125#~ msgid "Swipe up from the bottom edge."
961#~ msgstr "Правесці уверх ад ніжняга краю."
1126#~ msgstr "Правесці уверх ад ніжняга краю."
962
1127
po/bg.po+262−100
@@ -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-05-18 11:19+0000\n"
10+"POT-Creation-Date: 2016-07-11 17:24+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,39 +15,39 @@ 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-05-19 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2016-07-14 06:00+0000\n"
19−"X-Generator: Launchpad (build 18025)\n"
19+"X-Generator: Launchpad (build 18115)\n"
20
20
21−#: plugins/IntegratedLightDM/Greeter.cpp:112
21+#: plugins/LightDM/Greeter.cpp:123
22msgid "Password: "
22msgid "Password: "
23msgstr ""
23msgstr ""
24
24
25−#: plugins/Unity/Launcher/launcheritem.cpp:48
25+#: plugins/Unity/Launcher/launcheritem.cpp:49
26−#: plugins/Unity/Launcher/launcheritem.cpp:107
26+#: plugins/Unity/Launcher/launcheritem.cpp:108
27msgid "Pin shortcut"
27msgid "Pin shortcut"
28msgstr ""
28msgstr ""
29
29
30−#: plugins/Unity/Launcher/launcheritem.cpp:53
30+#: plugins/Unity/Launcher/launcheritem.cpp:54
31msgid "Quit"
31msgid "Quit"
32msgstr ""
32msgstr ""
33
33
34−#: plugins/Unity/Launcher/launcheritem.cpp:107
34+#: plugins/Unity/Launcher/launcheritem.cpp:108
35msgid "Unpin shortcut"
35msgid "Unpin shortcut"
36msgstr ""
36msgstr ""
37
37
38−#: qml/Components/DelayedLockscreen.qml:49
38+#: qml/Components/DelayedLockscreen.qml:50
39msgid "Device Locked"
39msgid "Device Locked"
40msgstr ""
40msgstr ""
41
41
42−#: qml/Components/DelayedLockscreen.qml:64
42+#: qml/Components/DelayedLockscreen.qml:65
43msgid "You have been locked out due to too many failed passphrase attempts."
43msgid "You have been locked out due to too many failed passphrase attempts."
44msgstr ""
44msgstr ""
45
45
46−#: qml/Components/DelayedLockscreen.qml:65
46+#: qml/Components/DelayedLockscreen.qml:66
47msgid "You have been locked out due to too many failed passcode attempts."
47msgid "You have been locked out due to too many failed passcode attempts."
48msgstr ""
48msgstr ""
49
49
50−#: qml/Components/DelayedLockscreen.qml:74
50+#: qml/Components/DelayedLockscreen.qml:75
51#, qt-format
51#, qt-format
52msgid "Please wait %1 minute and then try again…"
52msgid "Please wait %1 minute and then try again…"
53msgid_plural "Please wait %1 minutes and then try again…"
53msgid_plural "Please wait %1 minutes and then try again…"
@@ -74,7 +74,7 @@ msgid "Log Out"
74msgstr ""
74msgstr ""
75
75
76#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
76#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
77−#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
77+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
78#: qml/Wizard/Pages/passcode-set.qml:32
78#: qml/Wizard/Pages/passcode-set.qml:32
79msgid "Cancel"
79msgid "Cancel"
80msgstr ""
80msgstr ""
@@ -119,18 +119,188 @@ msgctxt "Button: Restart the system"
119msgid "Restart"
119msgid "Restart"
120msgstr ""
120msgstr ""
121
121
122+#: qml/Components/KeyboardShortcutsOverlay.qml:41
123+msgid "Keyboard Shortcuts"
124+msgstr ""
125+
126+#: qml/Components/KeyboardShortcutsOverlay.qml:55
127+msgid "Unity 8"
128+msgstr ""
129+
130+#: qml/Components/KeyboardShortcutsOverlay.qml:62
131+msgid "PrtScr"
132+msgstr ""
133+
134+#: qml/Components/KeyboardShortcutsOverlay.qml:67
135+msgid "Takes a screenshot."
136+msgstr ""
137+
138+#: qml/Components/KeyboardShortcutsOverlay.qml:75
139+msgid "Alt + PrtScr"
140+msgstr ""
141+
142+#: qml/Components/KeyboardShortcutsOverlay.qml:80
143+msgid "Takes a screenshot of a window."
144+msgstr ""
145+
146+#: qml/Components/KeyboardShortcutsOverlay.qml:88
147+msgid "Super + Space"
148+msgstr ""
149+
150+#: qml/Components/KeyboardShortcutsOverlay.qml:93
151+msgid "Switches to next keyboard layout."
152+msgstr ""
153+
154+#: qml/Components/KeyboardShortcutsOverlay.qml:101
155+msgid "Super + Shift + Space"
156+msgstr ""
157+
158+#: qml/Components/KeyboardShortcutsOverlay.qml:106
159+msgid "Switches to previous keyboard layout."
160+msgstr ""
161+
162+#: qml/Components/KeyboardShortcutsOverlay.qml:118
163+msgid "Launcher"
164+msgstr ""
165+
166+#: qml/Components/KeyboardShortcutsOverlay.qml:125
167+msgid "Super (Hold)"
168+msgstr ""
169+
170+#: qml/Components/KeyboardShortcutsOverlay.qml:130
171+msgid "Opens the launcher, displays shortcuts."
172+msgstr ""
173+
174+#: qml/Components/KeyboardShortcutsOverlay.qml:138
175+msgid "Alt + F1"
176+msgstr ""
177+
178+#: qml/Components/KeyboardShortcutsOverlay.qml:143
179+msgid "Opens launcher keyboard navigation mode."
180+msgstr ""
181+
182+#: qml/Components/KeyboardShortcutsOverlay.qml:151
183+msgid "Super + Tab"
184+msgstr ""
185+
186+#: qml/Components/KeyboardShortcutsOverlay.qml:156
187+msgid "Switches applications via the launcher."
188+msgstr ""
189+
190+#: qml/Components/KeyboardShortcutsOverlay.qml:164
191+msgid "Super + 0 to 9"
192+msgstr ""
193+
194+#: qml/Components/KeyboardShortcutsOverlay.qml:169
195+msgid "Same as clicking on a launcher icon."
196+msgstr ""
197+
198+#: qml/Components/KeyboardShortcutsOverlay.qml:181
199+msgid "Scopes"
200+msgstr ""
201+
202+#: qml/Components/KeyboardShortcutsOverlay.qml:188
203+msgid "Super (Tap)"
204+msgstr ""
205+
206+#: qml/Components/KeyboardShortcutsOverlay.qml:193
207+msgid "Opens the Scopes home."
208+msgstr ""
209+
210+#: qml/Components/KeyboardShortcutsOverlay.qml:209
211+msgid "Switching"
212+msgstr ""
213+
214+#: qml/Components/KeyboardShortcutsOverlay.qml:216
215+msgid "Alt + Tab"
216+msgstr ""
217+
218+#: qml/Components/KeyboardShortcutsOverlay.qml:221
219+msgid "Switches between applications."
220+msgstr ""
221+
222+#: qml/Components/KeyboardShortcutsOverlay.qml:229
223+msgid "Super + W"
224+msgstr ""
225+
226+#: qml/Components/KeyboardShortcutsOverlay.qml:234
227+msgid "Opens the desktop spread."
228+msgstr ""
229+
230+#: qml/Components/KeyboardShortcutsOverlay.qml:242
231+msgid "Cursor Left or Right"
232+msgstr ""
233+
234+#: qml/Components/KeyboardShortcutsOverlay.qml:247
235+msgid "Moves the focus."
236+msgstr ""
237+
238+#: qml/Components/KeyboardShortcutsOverlay.qml:259
239+msgid "Windows"
240+msgstr ""
241+
242+#: qml/Components/KeyboardShortcutsOverlay.qml:266
243+msgid "Ctrl + Super + D"
244+msgstr ""
245+
246+#: qml/Components/KeyboardShortcutsOverlay.qml:271
247+msgid "Minimizes all windows."
248+msgstr ""
249+
250+#: qml/Components/KeyboardShortcutsOverlay.qml:279
251+msgid "Ctrl + Super + Up"
252+msgstr ""
253+
254+#: qml/Components/KeyboardShortcutsOverlay.qml:284
255+msgid "Maximizes the current window."
256+msgstr ""
257+
258+#: qml/Components/KeyboardShortcutsOverlay.qml:292
259+msgid "Ctrl + Super + Down"
260+msgstr ""
261+
262+#: qml/Components/KeyboardShortcutsOverlay.qml:297
263+msgid "Minimizes or restores the current window."
264+msgstr ""
265+
266+#: qml/Components/KeyboardShortcutsOverlay.qml:305
267+msgid "Ctrl + Super + Left or Right"
268+msgstr ""
269+
270+#: qml/Components/KeyboardShortcutsOverlay.qml:310
271+msgid "Semi-maximizes the current window."
272+msgstr ""
273+
274+#: qml/Components/KeyboardShortcutsOverlay.qml:318
275+msgid "Alt + F4"
276+msgstr ""
277+
278+#: qml/Components/KeyboardShortcutsOverlay.qml:323
279+msgid "Closes the current window."
280+msgstr ""
281+
122−#: qml/Components/Lockscreen.qml:231
282+#: qml/Components/Lockscreen.qml:239
123msgid "Return to Call"
283msgid "Return to Call"
124msgstr ""
284msgstr ""
125
285
126−#: qml/Components/Lockscreen.qml:231
286+#: qml/Components/Lockscreen.qml:239
127msgid "Emergency Call"
287msgid "Emergency Call"
128msgstr "Спешно повикване"
288msgstr "Спешно повикване"
129
289
130−#: qml/Components/Lockscreen.qml:263
290+#: qml/Components/Lockscreen.qml:271
131msgid "OK"
291msgid "OK"
132msgstr ""
292msgstr ""
133
293
294+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
295+#, qt-format
296+msgid "%1:%2:%3"
297+msgstr ""
298+
299+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
300+#, qt-format
301+msgid "%1:%2"
302+msgstr ""
303+
134#: qml/Components/ModeSwitchWarningDialog.qml:32
304#: qml/Components/ModeSwitchWarningDialog.qml:32
135msgid "Apps may have unsaved data:"
305msgid "Apps may have unsaved data:"
136msgstr ""
306msgstr ""
@@ -157,26 +327,30 @@ msgstr ""
157msgid "Close all"
327msgid "Close all"
158msgstr ""
328msgstr ""
159
329
330+#: qml/Components/SharingPicker.qml:54
331+msgid "Preview Share Item"
332+msgstr ""
333+
160−#: qml/Dash/DashPageHeader.qml:337
334+#: qml/Dash/DashPageHeader.qml:333
161msgctxt "Button: Open the Ubuntu Store"
335msgctxt "Button: Open the Ubuntu Store"
162msgid "Store"
336msgid "Store"
163msgstr ""
337msgstr ""
164
338
165−#: qml/Dash/DashPageHeader.qml:344
339+#: qml/Dash/DashPageHeader.qml:340
166msgctxt "Button: Start a search in the current dash scope"
340msgctxt "Button: Start a search in the current dash scope"
167msgid "Search"
341msgid "Search"
168msgstr ""
342msgstr ""
169
343
170−#: qml/Dash/DashPageHeader.qml:354
344+#: qml/Dash/DashPageHeader.qml:350
171msgctxt "Button: Show the current dash scope settings"
345msgctxt "Button: Show the current dash scope settings"
172msgid "Settings"
346msgid "Settings"
173msgstr ""
347msgstr ""
174
348
175−#: qml/Dash/DashPageHeader.qml:361
349+#: qml/Dash/DashPageHeader.qml:357
176msgid "Remove from Favorites"
350msgid "Remove from Favorites"
177msgstr ""
351msgstr ""
178
352
179−#: qml/Dash/DashPageHeader.qml:361
353+#: qml/Dash/DashPageHeader.qml:357
180msgid "Add to Favorites"
354msgid "Add to Favorites"
181msgstr ""
355msgstr ""
182
356
@@ -188,24 +362,24 @@ msgstr ""
188msgid "Reset"
362msgid "Reset"
189msgstr ""
363msgstr ""
190
364
191−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:764
365+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
192msgid "Show less"
366msgid "Show less"
193msgstr ""
367msgstr ""
194
368
195−#: qml/Dash/GenericScopeView.qml:579
369+#: qml/Dash/GenericScopeView.qml:580
196msgid "Show all"
370msgid "Show all"
197msgstr ""
371msgstr ""
198
372
199−#: qml/Dash/GenericScopeView.qml:636
373+#: qml/Dash/GenericScopeView.qml:637
200msgctxt "Label: Hint for dash search line edit"
374msgctxt "Label: Hint for dash search line edit"
201msgid "Search"
375msgid "Search"
202msgstr ""
376msgstr ""
203
377
204−#: qml/Dash/PageHeaderExtraPanel.qml:55
378+#: qml/Dash/PageHeaderExtraPanel.qml:56
205msgid "Recent Searches"
379msgid "Recent Searches"
206msgstr ""
380msgstr ""
207
381
208−#: qml/Dash/PageHeaderExtraPanel.qml:66
382+#: qml/Dash/PageHeaderExtraPanel.qml:67
209msgid "Clear All"
383msgid "Clear All"
210msgstr ""
384msgstr ""
211
385
@@ -218,22 +392,18 @@ msgid "Less..."
218msgstr "По-малко..."
392msgstr "По-малко..."
219
393
220#: qml/Dash/Previews/PreviewCommentInput.qml:68
394#: qml/Dash/Previews/PreviewCommentInput.qml:68
221−#: qml/Dash/Previews/PreviewRatingInput.qml:174
395+#: qml/Dash/Previews/PreviewRatingInput.qml:175
222msgid "Send"
396msgid "Send"
223msgstr "Изпрати"
397msgstr "Изпрати"
224
398
225−#: qml/Dash/Previews/PreviewRatingInput.qml:84
399+#: qml/Dash/Previews/PreviewRatingInput.qml:82
226msgid "Rate this"
400msgid "Rate this"
227msgstr "Оценете това"
401msgstr "Оценете това"
228
402
229−#: qml/Dash/Previews/PreviewRatingInput.qml:129
403+#: qml/Dash/Previews/PreviewRatingInput.qml:157
230msgid "Add a review"
404msgid "Add a review"
231msgstr "Добави отзив"
405msgstr "Добави отзив"
232
406
233−#: qml/Dash/Previews/PreviewSharing.qml:66
234−msgid "Preview Share Item"
235−msgstr ""
236−
237#: qml/Dash/PullToRefreshScopeStyle.qml:55
407#: qml/Dash/PullToRefreshScopeStyle.qml:55
238msgid "Pull to refresh…"
408msgid "Pull to refresh…"
239msgstr ""
409msgstr ""
@@ -246,88 +416,100 @@ msgstr ""
246msgid "Enable location data"
416msgid "Enable location data"
247msgstr ""
417msgstr ""
248
418
249−#: qml/Dash/ScopesList.qml:67
419+#: qml/Dash/ScopesList.qml:55
250msgid "Manage"
420msgid "Manage"
251msgstr ""
421msgstr ""
252
422
253−#: qml/Dash/ScopesList.qml:113
423+#: qml/Dash/ScopesList.qml:102
254msgid "Home"
424msgid "Home"
255msgstr ""
425msgstr ""
256
426
257−#: qml/Dash/ScopesList.qml:114
427+#: qml/Dash/ScopesList.qml:103
258msgid "Also installed"
428msgid "Also installed"
259msgstr ""
429msgstr ""
260
430
261−#: qml/DisabledScreenNotice.qml:104
431+#: qml/DisabledScreenNotice.qml:109
262msgid ""
432msgid ""
263"Your device is now connected to an external display. Use this screen as a "
433"Your device is now connected to an external display. Use this screen as a "
264"touch pad to interact with the pointer."
434"touch pad to interact with the pointer."
265msgstr ""
435msgstr ""
266
436
267−#: qml/Greeter/CoverPage.qml:118
437+#: qml/Greeter/CoverPage.qml:127
268msgid "Unlock"
438msgid "Unlock"
269msgstr ""
439msgstr ""
270
440
441+#: qml/Greeter/Greeter.qml:555
442+msgid "Try again"
443+msgstr ""
444+
271−#: qml/Greeter/LoginList.qml:239
445+#: qml/Greeter/LoginList.qml:63
446+msgid "Passphrase"
447+msgstr ""
448+
449+#: qml/Greeter/LoginList.qml:64
450+msgid "Passcode"
451+msgstr ""
452+
453+#: qml/Greeter/LoginList.qml:87
272msgid "Retry"
454msgid "Retry"
273msgstr ""
455msgstr ""
274
456
275−#: qml/Greeter/LoginList.qml:240
457+#: qml/Greeter/LoginList.qml:88
276−msgid "Tap to unlock"
458+msgid "Log In"
277msgstr ""
459msgstr ""
278
460
279−#: qml/Greeter/NarrowView.qml:54
461+#: qml/Greeter/NarrowView.qml:55
280msgid "Sorry, incorrect passphrase."
462msgid "Sorry, incorrect passphrase."
281msgstr ""
463msgstr ""
282
464
283−#: qml/Greeter/NarrowView.qml:55
465+#: qml/Greeter/NarrowView.qml:56
284msgid "Sorry, incorrect passcode."
466msgid "Sorry, incorrect passcode."
285msgstr ""
467msgstr ""
286
468
287−#: qml/Greeter/NarrowView.qml:56
469+#: qml/Greeter/NarrowView.qml:57
288msgid "This will be your last attempt."
470msgid "This will be your last attempt."
289msgstr ""
471msgstr ""
290
472
291−#: qml/Greeter/NarrowView.qml:58
473+#: qml/Greeter/NarrowView.qml:59
292msgid ""
474msgid ""
293"If passphrase is entered incorrectly, your phone will conduct a factory "
475"If passphrase is entered incorrectly, your phone will conduct a factory "
294"reset and all personal data will be deleted."
476"reset and all personal data will be deleted."
295msgstr ""
477msgstr ""
296
478
297−#: qml/Greeter/NarrowView.qml:59
479+#: qml/Greeter/NarrowView.qml:60
298msgid ""
480msgid ""
299"If passcode is entered incorrectly, your phone will conduct a factory reset "
481"If passcode is entered incorrectly, your phone will conduct a factory reset "
300"and all personal data will be deleted."
482"and all personal data will be deleted."
301msgstr ""
483msgstr ""
302
484
303−#: qml/Greeter/NarrowView.qml:116
485+#: qml/Greeter/NarrowView.qml:129
304#, qt-format
486#, qt-format
305msgid "Enter %1"
487msgid "Enter %1"
306msgstr ""
488msgstr ""
307
489
308−#: qml/Greeter/NarrowView.qml:117
490+#: qml/Greeter/NarrowView.qml:130
309msgid "Enter passphrase"
491msgid "Enter passphrase"
310msgstr ""
492msgstr ""
311
493
312−#: qml/Greeter/NarrowView.qml:118
494+#: qml/Greeter/NarrowView.qml:131
313msgid "Enter passcode"
495msgid "Enter passcode"
314msgstr ""
496msgstr ""
315
497
316−#: qml/Greeter/NarrowView.qml:119
498+#: qml/Greeter/NarrowView.qml:135
317#, qt-format
499#, qt-format
318msgid "Sorry, incorrect %1"
500msgid "Sorry, incorrect %1"
319msgstr ""
501msgstr ""
320
502
321−#: qml/Greeter/NarrowView.qml:120
503+#: qml/Greeter/NarrowView.qml:136
322msgid "Sorry, incorrect passphrase"
504msgid "Sorry, incorrect passphrase"
323msgstr ""
505msgstr ""
324
506
325−#: qml/Greeter/NarrowView.qml:121
507+#: qml/Greeter/NarrowView.qml:137
326msgctxt "passphrase"
508msgctxt "passphrase"
327msgid "Please re-enter"
509msgid "Please re-enter"
328msgstr ""
510msgstr ""
329
511
330−#: qml/Greeter/NarrowView.qml:122
512+#: qml/Greeter/NarrowView.qml:138
331msgid "Sorry, incorrect passcode"
513msgid "Sorry, incorrect passcode"
332msgstr ""
514msgstr ""
333
515
@@ -402,18 +584,18 @@ msgstr ""
402msgid "Failed, tap to retry"
584msgid "Failed, tap to retry"
403msgstr ""
585msgstr ""
404
586
405−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
587+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
406−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
588+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
407msgctxt "Button: Send a reply message"
589msgctxt "Button: Send a reply message"
408msgid "Send"
590msgid "Send"
409msgstr ""
591msgstr ""
410
592
411−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
593+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
412msgctxt "Label: Hint in message indicator line edit"
594msgctxt "Label: Hint in message indicator line edit"
413msgid "Reply"
595msgid "Reply"
414msgstr ""
596msgstr ""
415
597
416−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
598+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
417msgctxt "Button: Call back on phone"
599msgctxt "Button: Call back on phone"
418msgid "Call back"
600msgid "Call back"
419msgstr ""
601msgstr ""
@@ -422,32 +604,12 @@ msgstr ""
422msgid "Drag using 3 fingers any application from one window to the other"
604msgid "Drag using 3 fingers any application from one window to the other"
423msgstr ""
605msgstr ""
424
606
425−#: qml/Tutorial/TutorialBottom.qml:78
426−msgid "Swipe up to add a contact"
427−msgstr ""
428−
429−#: qml/Tutorial/TutorialBottom.qml:80
430−msgid "Swipe up for favorite calculations"
431−msgstr ""
432−
433−#: qml/Tutorial/TutorialBottom.qml:82
434−msgid "Swipe up for recent calls"
435−msgstr ""
436−
437−#: qml/Tutorial/TutorialBottom.qml:84
438−msgid "Swipe up to create a message"
439−msgstr ""
440−
441−#: qml/Tutorial/TutorialBottom.qml:85
442−msgid "Swipe up to manage the app"
443−msgstr ""
444−
445−#: qml/Tutorial/TutorialLeftLong.qml:47
607+#: qml/Tutorial/TutorialLeftLong.qml:49
446msgid "Long swipe from the left edge to open the Today scope"
608msgid "Long swipe from the left edge to open the Today scope"
447msgstr ""
609msgstr ""
448
610
449#: qml/Tutorial/TutorialLeft.qml:47
611#: qml/Tutorial/TutorialLeft.qml:47
450−msgid "Swipe from the left edge to open the launcher"
612+msgid "Short swipe from the left edge to open the launcher"
451msgstr ""
613msgstr ""
452
614
453#: qml/Tutorial/TutorialRight.qml:55
615#: qml/Tutorial/TutorialRight.qml:55
@@ -455,15 +617,11 @@ msgid "Push your mouse against the right edge to view your open apps"
455msgstr ""
617msgstr ""
456
618
457#: qml/Tutorial/TutorialRight.qml:56
619#: qml/Tutorial/TutorialRight.qml:56
458−msgid "Short or long swipe from the right edge to view your open apps"
620+msgid "Swipe from the right edge to view your open apps"
459msgstr ""
621msgstr ""
460
622
461#: qml/Tutorial/TutorialTop.qml:53
623#: qml/Tutorial/TutorialTop.qml:53
462−msgid "Swipe from the top right edge to open the notification bar"
624+msgid "Swipe from the top edge to access notifications and quick settings"
463−msgstr ""
464−
465−#: qml/Tutorial/TutorialTop.qml:54
466−msgid "Swipe from the top edge to open the notification bar"
467msgstr ""
625msgstr ""
468
626
469#: qml/Wizard/Page.qml:54
627#: qml/Wizard/Page.qml:54
@@ -475,11 +633,11 @@ msgstr ""
475msgid "Language"
633msgid "Language"
476msgstr ""
634msgstr ""
477
635
478−#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
636+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
479−#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
637+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
480#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
638#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
481#: qml/Wizard/Pages/75-report-check.qml:84
639#: qml/Wizard/Pages/75-report-check.qml:84
482−#: qml/Wizard/Pages/passcode-desktop.qml:124
640+#: qml/Wizard/Pages/passcode-desktop.qml:141
483#: qml/Wizard/Pages/password-set.qml:141
641#: qml/Wizard/Pages/password-set.qml:141
484msgid "Next"
642msgid "Next"
485msgstr ""
643msgstr ""
@@ -541,7 +699,7 @@ msgstr ""
541msgid "Time Zone"
699msgid "Time Zone"
542msgstr ""
700msgstr ""
543
701
544−#: qml/Wizard/Pages/50-timezone.qml:178
702+#: qml/Wizard/Pages/50-timezone.qml:181
545msgid "Enter your city"
703msgid "Enter your city"
546msgstr ""
704msgstr ""
547
705
@@ -631,7 +789,7 @@ msgid "Service Terms"
631msgstr ""
789msgstr ""
632
790
633#: qml/Wizard/Pages/passcode-confirm.qml:43
791#: qml/Wizard/Pages/passcode-confirm.qml:43
634−#: qml/Wizard/Pages/passcode-desktop.qml:80
792+#: qml/Wizard/Pages/passcode-desktop.qml:96
635msgid "Confirm passcode"
793msgid "Confirm passcode"
636msgstr ""
794msgstr ""
637
795
@@ -648,24 +806,24 @@ msgstr ""
648msgid "Lock Screen Passcode"
806msgid "Lock Screen Passcode"
649msgstr ""
807msgstr ""
650
808
651−#: qml/Wizard/Pages/passcode-desktop.qml:56
809+#: qml/Wizard/Pages/passcode-desktop.qml:60
652msgid "Enter 4 numbers to setup your passcode"
810msgid "Enter 4 numbers to setup your passcode"
653msgstr ""
811msgstr ""
654
812
655−#: qml/Wizard/Pages/passcode-desktop.qml:65
813+#: qml/Wizard/Pages/passcode-desktop.qml:76
656#: qml/Wizard/Pages/passcode-set.qml:54
814#: qml/Wizard/Pages/passcode-set.qml:54
657msgid "Choose passcode"
815msgid "Choose passcode"
658msgstr ""
816msgstr ""
659
817
660−#: qml/Wizard/Pages/passcode-desktop.qml:105
818+#: qml/Wizard/Pages/passcode-desktop.qml:126
661msgid "Passcode too short"
819msgid "Passcode too short"
662msgstr ""
820msgstr ""
663
821
664−#: qml/Wizard/Pages/passcode-desktop.qml:107
822+#: qml/Wizard/Pages/passcode-desktop.qml:128
665msgid "Passcodes match"
823msgid "Passcodes match"
666msgstr ""
824msgstr ""
667
825
668−#: qml/Wizard/Pages/passcode-desktop.qml:109
826+#: qml/Wizard/Pages/passcode-desktop.qml:130
669msgid "Passcodes do not match"
827msgid "Passcodes do not match"
670msgstr ""
828msgstr ""
671
829
@@ -714,26 +872,30 @@ msgid "To proceed with no SIM tap Skip."
714msgstr ""
872msgstr ""
715
873
716#: qml/Wizard/PasswordMeter.qml:87
874#: qml/Wizard/PasswordMeter.qml:87
717−msgid "Passwords match"
875+msgid "Password too short"
718msgstr ""
876msgstr ""
719
877
720#: qml/Wizard/PasswordMeter.qml:89
878#: qml/Wizard/PasswordMeter.qml:89
879+msgid "Passwords match"
880+msgstr ""
881+
882+#: qml/Wizard/PasswordMeter.qml:91
721msgid "Passwords do not match"
883msgid "Passwords do not match"
722msgstr ""
884msgstr ""
723
885
724−#: qml/Wizard/PasswordMeter.qml:93
886+#: qml/Wizard/PasswordMeter.qml:95
725msgid "Strong password"
887msgid "Strong password"
726msgstr ""
888msgstr ""
727
889
728−#: qml/Wizard/PasswordMeter.qml:95
890+#: qml/Wizard/PasswordMeter.qml:97
729msgid "Fair password"
891msgid "Fair password"
730msgstr ""
892msgstr ""
731
893
732−#: qml/Wizard/PasswordMeter.qml:97
894+#: qml/Wizard/PasswordMeter.qml:99
733msgid "Weak password"
895msgid "Weak password"
734msgstr ""
896msgstr ""
735
897
736−#: qml/Wizard/PasswordMeter.qml:99
898+#: qml/Wizard/PasswordMeter.qml:101
737msgid "Very weak password"
899msgid "Very weak password"
738msgstr ""
900msgstr ""
739
901
po/bn.po+266−101
@@ -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-05-18 11:19+0000\n"
10+"POT-Creation-Date: 2016-07-11 17:24+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,39 +15,39 @@ 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-05-19 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2016-07-14 06:00+0000\n"
19−"X-Generator: Launchpad (build 18025)\n"
19+"X-Generator: Launchpad (build 18115)\n"
20
20
21−#: plugins/IntegratedLightDM/Greeter.cpp:112
21+#: plugins/LightDM/Greeter.cpp:123
22msgid "Password: "
22msgid "Password: "
23msgstr "পাসওয়ার্ড: "
23msgstr "পাসওয়ার্ড: "
24
24
25−#: plugins/Unity/Launcher/launcheritem.cpp:48
25+#: plugins/Unity/Launcher/launcheritem.cpp:49
26−#: plugins/Unity/Launcher/launcheritem.cpp:107
26+#: plugins/Unity/Launcher/launcheritem.cpp:108
27msgid "Pin shortcut"
27msgid "Pin shortcut"
28msgstr "পিন"
28msgstr "পিন"
29
29
30−#: plugins/Unity/Launcher/launcheritem.cpp:53
30+#: plugins/Unity/Launcher/launcheritem.cpp:54
31msgid "Quit"
31msgid "Quit"
32msgstr ""
32msgstr ""
33
33
34−#: plugins/Unity/Launcher/launcheritem.cpp:107
34+#: plugins/Unity/Launcher/launcheritem.cpp:108
35msgid "Unpin shortcut"
35msgid "Unpin shortcut"
36msgstr "আনপিন"
36msgstr "আনপিন"
37
37
38−#: qml/Components/DelayedLockscreen.qml:49
38+#: qml/Components/DelayedLockscreen.qml:50
39msgid "Device Locked"
39msgid "Device Locked"
40msgstr "ডিভাইসটি লক করা"
40msgstr "ডিভাইসটি লক করা"
41
41
42−#: qml/Components/DelayedLockscreen.qml:64
42+#: qml/Components/DelayedLockscreen.qml:65
43msgid "You have been locked out due to too many failed passphrase attempts."
43msgid "You have been locked out due to too many failed passphrase attempts."
44msgstr "অধিকবার পাসফ্রেজ ভুল দেওয়ার কারনে আপনার আইডি লক করা হয়েছে"
44msgstr "অধিকবার পাসফ্রেজ ভুল দেওয়ার কারনে আপনার আইডি লক করা হয়েছে"
45
45
46−#: qml/Components/DelayedLockscreen.qml:65
46+#: qml/Components/DelayedLockscreen.qml:66
47msgid "You have been locked out due to too many failed passcode attempts."
47msgid "You have been locked out due to too many failed passcode attempts."
48msgstr "অধিকবার পাসকোড ভুল করার কারনে আপনার আইডি লক করা হয়েছে"
48msgstr "অধিকবার পাসকোড ভুল করার কারনে আপনার আইডি লক করা হয়েছে"
49
49
50−#: qml/Components/DelayedLockscreen.qml:74
50+#: qml/Components/DelayedLockscreen.qml:75
51#, qt-format
51#, qt-format
52msgid "Please wait %1 minute and then try again…"
52msgid "Please wait %1 minute and then try again…"
53msgid_plural "Please wait %1 minutes and then try again…"
53msgid_plural "Please wait %1 minutes and then try again…"
@@ -74,7 +74,7 @@ msgid "Log Out"
74msgstr ""
74msgstr ""
75
75
76#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
76#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
77−#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
77+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
78#: qml/Wizard/Pages/passcode-set.qml:32
78#: qml/Wizard/Pages/passcode-set.qml:32
79msgid "Cancel"
79msgid "Cancel"
80msgstr "বাতিল"
80msgstr "বাতিল"
@@ -119,18 +119,188 @@ msgctxt "Button: Restart the system"
119msgid "Restart"
119msgid "Restart"
120msgstr "পুনরায় চালু"
120msgstr "পুনরায় চালু"
121
121
122+#: qml/Components/KeyboardShortcutsOverlay.qml:41
123+msgid "Keyboard Shortcuts"
124+msgstr ""
125+
126+#: qml/Components/KeyboardShortcutsOverlay.qml:55
127+msgid "Unity 8"
128+msgstr ""
129+
130+#: qml/Components/KeyboardShortcutsOverlay.qml:62
131+msgid "PrtScr"
132+msgstr ""
133+
134+#: qml/Components/KeyboardShortcutsOverlay.qml:67
135+msgid "Takes a screenshot."
136+msgstr ""
137+
138+#: qml/Components/KeyboardShortcutsOverlay.qml:75
139+msgid "Alt + PrtScr"
140+msgstr ""
141+
142+#: qml/Components/KeyboardShortcutsOverlay.qml:80
143+msgid "Takes a screenshot of a window."
144+msgstr ""
145+
146+#: qml/Components/KeyboardShortcutsOverlay.qml:88
147+msgid "Super + Space"
148+msgstr ""
149+
150+#: qml/Components/KeyboardShortcutsOverlay.qml:93
151+msgid "Switches to next keyboard layout."
152+msgstr ""
153+
154+#: qml/Components/KeyboardShortcutsOverlay.qml:101
155+msgid "Super + Shift + Space"
156+msgstr ""
157+
158+#: qml/Components/KeyboardShortcutsOverlay.qml:106
159+msgid "Switches to previous keyboard layout."
160+msgstr ""
161+
162+#: qml/Components/KeyboardShortcutsOverlay.qml:118
163+msgid "Launcher"
164+msgstr ""
165+
166+#: qml/Components/KeyboardShortcutsOverlay.qml:125
167+msgid "Super (Hold)"
168+msgstr ""
169+
170+#: qml/Components/KeyboardShortcutsOverlay.qml:130
171+msgid "Opens the launcher, displays shortcuts."
172+msgstr ""
173+
174+#: qml/Components/KeyboardShortcutsOverlay.qml:138
175+msgid "Alt + F1"
176+msgstr ""
177+
178+#: qml/Components/KeyboardShortcutsOverlay.qml:143
179+msgid "Opens launcher keyboard navigation mode."
180+msgstr ""
181+
182+#: qml/Components/KeyboardShortcutsOverlay.qml:151
183+msgid "Super + Tab"
184+msgstr ""
185+
186+#: qml/Components/KeyboardShortcutsOverlay.qml:156
187+msgid "Switches applications via the launcher."
188+msgstr ""
189+
190+#: qml/Components/KeyboardShortcutsOverlay.qml:164
191+msgid "Super + 0 to 9"
192+msgstr ""
193+
194+#: qml/Components/KeyboardShortcutsOverlay.qml:169
195+msgid "Same as clicking on a launcher icon."
196+msgstr ""
197+
198+#: qml/Components/KeyboardShortcutsOverlay.qml:181
199+msgid "Scopes"
200+msgstr ""
201+
202+#: qml/Components/KeyboardShortcutsOverlay.qml:188
203+msgid "Super (Tap)"
204+msgstr ""
205+
206+#: qml/Components/KeyboardShortcutsOverlay.qml:193
207+msgid "Opens the Scopes home."
208+msgstr ""
209+
210+#: qml/Components/KeyboardShortcutsOverlay.qml:209
211+msgid "Switching"
212+msgstr ""
213+
214+#: qml/Components/KeyboardShortcutsOverlay.qml:216
215+msgid "Alt + Tab"
216+msgstr ""
217+
218+#: qml/Components/KeyboardShortcutsOverlay.qml:221
219+msgid "Switches between applications."
220+msgstr ""
221+
222+#: qml/Components/KeyboardShortcutsOverlay.qml:229
223+msgid "Super + W"
224+msgstr ""
225+
226+#: qml/Components/KeyboardShortcutsOverlay.qml:234
227+msgid "Opens the desktop spread."
228+msgstr ""
229+
230+#: qml/Components/KeyboardShortcutsOverlay.qml:242
231+msgid "Cursor Left or Right"
232+msgstr ""
233+
234+#: qml/Components/KeyboardShortcutsOverlay.qml:247
235+msgid "Moves the focus."
236+msgstr ""
237+
238+#: qml/Components/KeyboardShortcutsOverlay.qml:259
239+msgid "Windows"
240+msgstr ""
241+
242+#: qml/Components/KeyboardShortcutsOverlay.qml:266
243+msgid "Ctrl + Super + D"
244+msgstr ""
245+
246+#: qml/Components/KeyboardShortcutsOverlay.qml:271
247+msgid "Minimizes all windows."
248+msgstr ""
249+
250+#: qml/Components/KeyboardShortcutsOverlay.qml:279
251+msgid "Ctrl + Super + Up"
252+msgstr ""
253+
254+#: qml/Components/KeyboardShortcutsOverlay.qml:284
255+msgid "Maximizes the current window."
256+msgstr ""
257+
258+#: qml/Components/KeyboardShortcutsOverlay.qml:292
259+msgid "Ctrl + Super + Down"
260+msgstr ""
261+
262+#: qml/Components/KeyboardShortcutsOverlay.qml:297
263+msgid "Minimizes or restores the current window."
264+msgstr ""
265+
266+#: qml/Components/KeyboardShortcutsOverlay.qml:305
267+msgid "Ctrl + Super + Left or Right"
268+msgstr ""
269+
270+#: qml/Components/KeyboardShortcutsOverlay.qml:310
271+msgid "Semi-maximizes the current window."
272+msgstr ""
273+
274+#: qml/Components/KeyboardShortcutsOverlay.qml:318
275+msgid "Alt + F4"
276+msgstr ""
277+
278+#: qml/Components/KeyboardShortcutsOverlay.qml:323
279+msgid "Closes the current window."
280+msgstr ""
281+
122−#: qml/Components/Lockscreen.qml:231
282+#: qml/Components/Lockscreen.qml:239
123msgid "Return to Call"
283msgid "Return to Call"
124msgstr "কল এ ফিরে যান"
284msgstr "কল এ ফিরে যান"
125
285
126−#: qml/Components/Lockscreen.qml:231
286+#: qml/Components/Lockscreen.qml:239
127msgid "Emergency Call"
287msgid "Emergency Call"
128msgstr "জরুরী কল"
288msgstr "জরুরী কল"
129
289
130−#: qml/Components/Lockscreen.qml:263
290+#: qml/Components/Lockscreen.qml:271
131msgid "OK"
291msgid "OK"
132msgstr "ঠিক আছে"
292msgstr "ঠিক আছে"
133
293
294+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
295+#, qt-format
296+msgid "%1:%2:%3"
297+msgstr ""
298+
299+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
300+#, qt-format
301+msgid "%1:%2"
302+msgstr ""
303+
134#: qml/Components/ModeSwitchWarningDialog.qml:32
304#: qml/Components/ModeSwitchWarningDialog.qml:32
135msgid "Apps may have unsaved data:"
305msgid "Apps may have unsaved data:"
136msgstr ""
306msgstr ""
@@ -157,26 +327,30 @@ msgstr ""
157msgid "Close all"
327msgid "Close all"
158msgstr ""
328msgstr ""
159
329
330+#: qml/Components/SharingPicker.qml:54
331+msgid "Preview Share Item"
332+msgstr ""
333+
160−#: qml/Dash/DashPageHeader.qml:337
334+#: qml/Dash/DashPageHeader.qml:333
161msgctxt "Button: Open the Ubuntu Store"
335msgctxt "Button: Open the Ubuntu Store"
162msgid "Store"
336msgid "Store"
163msgstr "স্টোর"
337msgstr "স্টোর"
164
338
165−#: qml/Dash/DashPageHeader.qml:344
339+#: qml/Dash/DashPageHeader.qml:340
166msgctxt "Button: Start a search in the current dash scope"
340msgctxt "Button: Start a search in the current dash scope"
167msgid "Search"
341msgid "Search"
168msgstr "খুঁজুন"
342msgstr "খুঁজুন"
169
343
170−#: qml/Dash/DashPageHeader.qml:354
344+#: qml/Dash/DashPageHeader.qml:350
171msgctxt "Button: Show the current dash scope settings"
345msgctxt "Button: Show the current dash scope settings"
172msgid "Settings"
346msgid "Settings"
173msgstr "সেটিংস"
347msgstr "সেটিংস"
174
348
175−#: qml/Dash/DashPageHeader.qml:361
349+#: qml/Dash/DashPageHeader.qml:357
176msgid "Remove from Favorites"
350msgid "Remove from Favorites"
177msgstr "পছন্দ থেকে মুছে ফেলুন"
351msgstr "পছন্দ থেকে মুছে ফেলুন"
178
352
179−#: qml/Dash/DashPageHeader.qml:361
353+#: qml/Dash/DashPageHeader.qml:357
180msgid "Add to Favorites"
354msgid "Add to Favorites"
181msgstr "পছন্দতে যোগ করুন"
355msgstr "পছন্দতে যোগ করুন"
182
356
@@ -188,24 +362,24 @@ msgstr ""
188msgid "Reset"
362msgid "Reset"
189msgstr ""
363msgstr ""
190
364
191−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:764
365+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
192msgid "Show less"
366msgid "Show less"
193msgstr ""
367msgstr ""
194
368
195−#: qml/Dash/GenericScopeView.qml:579
369+#: qml/Dash/GenericScopeView.qml:580
196msgid "Show all"
370msgid "Show all"
197msgstr ""
371msgstr ""
198
372
199−#: qml/Dash/GenericScopeView.qml:636
373+#: qml/Dash/GenericScopeView.qml:637
200msgctxt "Label: Hint for dash search line edit"
374msgctxt "Label: Hint for dash search line edit"
201msgid "Search"
375msgid "Search"
202msgstr "খুঁজুন"
376msgstr "খুঁজুন"
203
377
204−#: qml/Dash/PageHeaderExtraPanel.qml:55
378+#: qml/Dash/PageHeaderExtraPanel.qml:56
205msgid "Recent Searches"
379msgid "Recent Searches"
206msgstr ""
380msgstr ""
207
381
208−#: qml/Dash/PageHeaderExtraPanel.qml:66
382+#: qml/Dash/PageHeaderExtraPanel.qml:67
209msgid "Clear All"
383msgid "Clear All"
210msgstr ""
384msgstr ""
211
385
@@ -218,22 +392,18 @@ msgid "Less..."
218msgstr "কম..."
392msgstr "কম..."
219
393
220#: qml/Dash/Previews/PreviewCommentInput.qml:68
394#: qml/Dash/Previews/PreviewCommentInput.qml:68
221−#: qml/Dash/Previews/PreviewRatingInput.qml:174
395+#: qml/Dash/Previews/PreviewRatingInput.qml:175
222msgid "Send"
396msgid "Send"
223msgstr "পাঠান"
397msgstr "পাঠান"
224
398
225−#: qml/Dash/Previews/PreviewRatingInput.qml:84
399+#: qml/Dash/Previews/PreviewRatingInput.qml:82
226msgid "Rate this"
400msgid "Rate this"
227msgstr "রেটিং দিন"
401msgstr "রেটিং দিন"
228
402
229−#: qml/Dash/Previews/PreviewRatingInput.qml:129
403+#: qml/Dash/Previews/PreviewRatingInput.qml:157
230msgid "Add a review"
404msgid "Add a review"
231msgstr "আপনার মতামত দিন"
405msgstr "আপনার মতামত দিন"
232
406
233−#: qml/Dash/Previews/PreviewSharing.qml:66
234−msgid "Preview Share Item"
235−msgstr ""
236−
237#: qml/Dash/PullToRefreshScopeStyle.qml:55
407#: qml/Dash/PullToRefreshScopeStyle.qml:55
238msgid "Pull to refresh…"
408msgid "Pull to refresh…"
239msgstr "রিফ্রেশ করার জন্য টানুন"
409msgstr "রিফ্রেশ করার জন্য টানুন"
@@ -246,89 +416,101 @@ msgstr "রিফ্রেশ করার জন্য ছেড়ে দিন"
246msgid "Enable location data"
416msgid "Enable location data"
247msgstr "অবস্থান নির্ণয় চালু করুন"
417msgstr "অবস্থান নির্ণয় চালু করুন"
248
418
249−#: qml/Dash/ScopesList.qml:67
419+#: qml/Dash/ScopesList.qml:55
250msgid "Manage"
420msgid "Manage"
251msgstr "ব্যবস্থাপনা"
421msgstr "ব্যবস্থাপনা"
252
422
253−#: qml/Dash/ScopesList.qml:113
423+#: qml/Dash/ScopesList.qml:102
254msgid "Home"
424msgid "Home"
255msgstr ""
425msgstr ""
256
426
257−#: qml/Dash/ScopesList.qml:114
427+#: qml/Dash/ScopesList.qml:103
258msgid "Also installed"
428msgid "Also installed"
259msgstr "আরও ইন্সটল করা রয়েছে..."
429msgstr "আরও ইন্সটল করা রয়েছে..."
260
430
261−#: qml/DisabledScreenNotice.qml:104
431+#: qml/DisabledScreenNotice.qml:109
262msgid ""
432msgid ""
263"Your device is now connected to an external display. Use this screen as a "
433"Your device is now connected to an external display. Use this screen as a "
264"touch pad to interact with the pointer."
434"touch pad to interact with the pointer."
265msgstr ""
435msgstr ""
266
436
267−#: qml/Greeter/CoverPage.qml:118
437+#: qml/Greeter/CoverPage.qml:127
268msgid "Unlock"
438msgid "Unlock"
269msgstr "লক খুলুন"
439msgstr "লক খুলুন"
270
440
441+#: qml/Greeter/Greeter.qml:555
442+msgid "Try again"
443+msgstr ""
444+
271−#: qml/Greeter/LoginList.qml:239
445+#: qml/Greeter/LoginList.qml:63
446+msgid "Passphrase"
447+msgstr ""
448+
449+#: qml/Greeter/LoginList.qml:64
450+msgid "Passcode"
451+msgstr ""
452+
453+#: qml/Greeter/LoginList.qml:87
272msgid "Retry"
454msgid "Retry"
273msgstr ""
455msgstr ""
274
456
275−#: qml/Greeter/LoginList.qml:240
457+#: qml/Greeter/LoginList.qml:88
276−msgid "Tap to unlock"
458+msgid "Log In"
277−msgstr "লক খোলার জন্য চাপ দিন"
459+msgstr ""
278
460
279−#: qml/Greeter/NarrowView.qml:54
461+#: qml/Greeter/NarrowView.qml:55
280msgid "Sorry, incorrect passphrase."
462msgid "Sorry, incorrect passphrase."
281msgstr "দুঃখিত, পাসওয়ার্ডটি ভুল হয়েছে।"
463msgstr "দুঃখিত, পাসওয়ার্ডটি ভুল হয়েছে।"
282
464
283−#: qml/Greeter/NarrowView.qml:55
465+#: qml/Greeter/NarrowView.qml:56
284msgid "Sorry, incorrect passcode."
466msgid "Sorry, incorrect passcode."
285msgstr "দুঃখিত, পাসকোডটি ভুল হয়েছে।"
467msgstr "দুঃখিত, পাসকোডটি ভুল হয়েছে।"
286
468
287−#: qml/Greeter/NarrowView.qml:56
469+#: qml/Greeter/NarrowView.qml:57
288msgid "This will be your last attempt."
470msgid "This will be your last attempt."
289msgstr "এটিই আপনার সর্বশেষ সুযোগ।"
471msgstr "এটিই আপনার সর্বশেষ সুযোগ।"
290
472
291−#: qml/Greeter/NarrowView.qml:58
473+#: qml/Greeter/NarrowView.qml:59
292msgid ""
474msgid ""
293"If passphrase is entered incorrectly, your phone will conduct a factory "
475"If passphrase is entered incorrectly, your phone will conduct a factory "
294"reset and all personal data will be deleted."
476"reset and all personal data will be deleted."
295msgstr ""
477msgstr ""
296"ভুল পাসওয়ার্ড প্রদান করলে, আপনার ফোনটিতে থাকা সকল ব্যক্তিগত তথ্য মুছে যাবে।"
478"ভুল পাসওয়ার্ড প্রদান করলে, আপনার ফোনটিতে থাকা সকল ব্যক্তিগত তথ্য মুছে যাবে।"
297
479
298−#: qml/Greeter/NarrowView.qml:59
480+#: qml/Greeter/NarrowView.qml:60
299msgid ""
481msgid ""
300"If passcode is entered incorrectly, your phone will conduct a factory reset "
482"If passcode is entered incorrectly, your phone will conduct a factory reset "
301"and all personal data will be deleted."
483"and all personal data will be deleted."
302msgstr "ভুল পাসকোড প্রদান করলে, আপনার ফোনটির সকল ব্যক্তিগত তথ্য মুছে যাবে।"
484msgstr "ভুল পাসকোড প্রদান করলে, আপনার ফোনটির সকল ব্যক্তিগত তথ্য মুছে যাবে।"
303
485
304−#: qml/Greeter/NarrowView.qml:116
486+#: qml/Greeter/NarrowView.qml:129
305#, qt-format
487#, qt-format
306msgid "Enter %1"
488msgid "Enter %1"
307msgstr "%1 লিখুন"
489msgstr "%1 লিখুন"
308
490
309−#: qml/Greeter/NarrowView.qml:117
491+#: qml/Greeter/NarrowView.qml:130
310msgid "Enter passphrase"
492msgid "Enter passphrase"
311msgstr "পাসওয়ার্ড লিখুন"
493msgstr "পাসওয়ার্ড লিখুন"
312
494
313−#: qml/Greeter/NarrowView.qml:118
495+#: qml/Greeter/NarrowView.qml:131
314msgid "Enter passcode"
496msgid "Enter passcode"
315msgstr "পাসকোড লিখুন"
497msgstr "পাসকোড লিখুন"
316
498
317−#: qml/Greeter/NarrowView.qml:119
499+#: qml/Greeter/NarrowView.qml:135
318#, qt-format
500#, qt-format
319msgid "Sorry, incorrect %1"
501msgid "Sorry, incorrect %1"
320msgstr "দুঃখিত, %1 ভুল হয়েছে"
502msgstr "দুঃখিত, %1 ভুল হয়েছে"
321
503
322−#: qml/Greeter/NarrowView.qml:120
504+#: qml/Greeter/NarrowView.qml:136
323msgid "Sorry, incorrect passphrase"
505msgid "Sorry, incorrect passphrase"
324msgstr "দুঃখিত, পাসওয়ার্ড ভুল হয়েছে"
506msgstr "দুঃখিত, পাসওয়ার্ড ভুল হয়েছে"
325
507
326−#: qml/Greeter/NarrowView.qml:121
508+#: qml/Greeter/NarrowView.qml:137
327msgctxt "passphrase"
509msgctxt "passphrase"
328msgid "Please re-enter"
510msgid "Please re-enter"
329msgstr "অনুগ্রহ করে আবার লিখুন"
511msgstr "অনুগ্রহ করে আবার লিখুন"
330
512
331−#: qml/Greeter/NarrowView.qml:122
513+#: qml/Greeter/NarrowView.qml:138
332msgid "Sorry, incorrect passcode"
514msgid "Sorry, incorrect passcode"
333msgstr "দুঃখিত, পাসকোড ভুল হয়েছে"
515msgstr "দুঃখিত, পাসকোড ভুল হয়েছে"
334
516
@@ -403,18 +585,18 @@ msgstr "শেষ"
403msgid "Failed, tap to retry"
585msgid "Failed, tap to retry"
404msgstr "ব্যার্থ হয়েছে, পুনরায় চেষ্টা করতে চাপ দিন"
586msgstr "ব্যার্থ হয়েছে, পুনরায় চেষ্টা করতে চাপ দিন"
405
587
406−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
588+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
407−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
589+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
408msgctxt "Button: Send a reply message"
590msgctxt "Button: Send a reply message"
409msgid "Send"
591msgid "Send"
410msgstr ""
592msgstr ""
411
593
412−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
594+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
413msgctxt "Label: Hint in message indicator line edit"
595msgctxt "Label: Hint in message indicator line edit"
414msgid "Reply"
596msgid "Reply"
415msgstr "উত্তর দিন"
597msgstr "উত্তর দিন"
416
598
417−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
599+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
418msgctxt "Button: Call back on phone"
600msgctxt "Button: Call back on phone"
419msgid "Call back"
601msgid "Call back"
420msgstr "কল ব্যাক"
602msgstr "কল ব্যাক"
@@ -423,32 +605,12 @@ msgstr "কল ব্যাক"
423msgid "Drag using 3 fingers any application from one window to the other"
605msgid "Drag using 3 fingers any application from one window to the other"
424msgstr ""
606msgstr ""
425
607
426−#: qml/Tutorial/TutorialBottom.qml:78
427−msgid "Swipe up to add a contact"
428−msgstr ""
429−
430−#: qml/Tutorial/TutorialBottom.qml:80
431−msgid "Swipe up for favorite calculations"
432−msgstr ""
433−
434−#: qml/Tutorial/TutorialBottom.qml:82
435−msgid "Swipe up for recent calls"
436−msgstr ""
437−
438−#: qml/Tutorial/TutorialBottom.qml:84
439−msgid "Swipe up to create a message"
440−msgstr ""
441−
442−#: qml/Tutorial/TutorialBottom.qml:85
443−msgid "Swipe up to manage the app"
444−msgstr ""
445−
446−#: qml/Tutorial/TutorialLeftLong.qml:47
608+#: qml/Tutorial/TutorialLeftLong.qml:49
447msgid "Long swipe from the left edge to open the Today scope"
609msgid "Long swipe from the left edge to open the Today scope"
448msgstr ""
610msgstr ""
449
611
450#: qml/Tutorial/TutorialLeft.qml:47
612#: qml/Tutorial/TutorialLeft.qml:47
451−msgid "Swipe from the left edge to open the launcher"
613+msgid "Short swipe from the left edge to open the launcher"
452msgstr ""
614msgstr ""
453
615
454#: qml/Tutorial/TutorialRight.qml:55
616#: qml/Tutorial/TutorialRight.qml:55
@@ -456,15 +618,11 @@ msgid "Push your mouse against the right edge to view your open apps"
456msgstr ""
618msgstr ""
457
619
458#: qml/Tutorial/TutorialRight.qml:56
620#: qml/Tutorial/TutorialRight.qml:56
459−msgid "Short or long swipe from the right edge to view your open apps"
621+msgid "Swipe from the right edge to view your open apps"
460msgstr ""
622msgstr ""
461
623
462#: qml/Tutorial/TutorialTop.qml:53
624#: qml/Tutorial/TutorialTop.qml:53
463−msgid "Swipe from the top right edge to open the notification bar"
625+msgid "Swipe from the top edge to access notifications and quick settings"
464−msgstr ""
465−
466−#: qml/Tutorial/TutorialTop.qml:54
467−msgid "Swipe from the top edge to open the notification bar"
468msgstr ""
626msgstr ""
469
627
470#: qml/Wizard/Page.qml:54
628#: qml/Wizard/Page.qml:54
@@ -476,11 +634,11 @@ msgstr ""
476msgid "Language"
634msgid "Language"
477msgstr ""
635msgstr ""
478
636
479−#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
637+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
480−#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
638+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
481#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
639#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
482#: qml/Wizard/Pages/75-report-check.qml:84
640#: qml/Wizard/Pages/75-report-check.qml:84
483−#: qml/Wizard/Pages/passcode-desktop.qml:124
641+#: qml/Wizard/Pages/passcode-desktop.qml:141
484#: qml/Wizard/Pages/password-set.qml:141
642#: qml/Wizard/Pages/password-set.qml:141
485msgid "Next"
643msgid "Next"
486msgstr ""
644msgstr ""
@@ -542,7 +700,7 @@ msgstr ""
542msgid "Time Zone"
700msgid "Time Zone"
543msgstr ""
701msgstr ""
544
702
545−#: qml/Wizard/Pages/50-timezone.qml:178
703+#: qml/Wizard/Pages/50-timezone.qml:181
546msgid "Enter your city"
704msgid "Enter your city"
547msgstr ""
705msgstr ""
548
706
@@ -632,7 +790,7 @@ msgid "Service Terms"
632msgstr ""
790msgstr ""
633
791
634#: qml/Wizard/Pages/passcode-confirm.qml:43
792#: qml/Wizard/Pages/passcode-confirm.qml:43
635−#: qml/Wizard/Pages/passcode-desktop.qml:80
793+#: qml/Wizard/Pages/passcode-desktop.qml:96
636msgid "Confirm passcode"
794msgid "Confirm passcode"
637msgstr ""
795msgstr ""
638
796
@@ -649,24 +807,24 @@ msgstr ""
649msgid "Lock Screen Passcode"
807msgid "Lock Screen Passcode"
650msgstr ""
808msgstr ""
651
809
652−#: qml/Wizard/Pages/passcode-desktop.qml:56
810+#: qml/Wizard/Pages/passcode-desktop.qml:60
653msgid "Enter 4 numbers to setup your passcode"
811msgid "Enter 4 numbers to setup your passcode"
654msgstr ""
812msgstr ""
655
813
656−#: qml/Wizard/Pages/passcode-desktop.qml:65
814+#: qml/Wizard/Pages/passcode-desktop.qml:76
657#: qml/Wizard/Pages/passcode-set.qml:54
815#: qml/Wizard/Pages/passcode-set.qml:54
658msgid "Choose passcode"
816msgid "Choose passcode"
659msgstr ""
817msgstr ""
660
818
661−#: qml/Wizard/Pages/passcode-desktop.qml:105
819+#: qml/Wizard/Pages/passcode-desktop.qml:126
662msgid "Passcode too short"
820msgid "Passcode too short"
663msgstr ""
821msgstr ""
664
822
665−#: qml/Wizard/Pages/passcode-desktop.qml:107
823+#: qml/Wizard/Pages/passcode-desktop.qml:128
666msgid "Passcodes match"
824msgid "Passcodes match"
667msgstr ""
825msgstr ""
668
826
669−#: qml/Wizard/Pages/passcode-desktop.qml:109
827+#: qml/Wizard/Pages/passcode-desktop.qml:130
670msgid "Passcodes do not match"
828msgid "Passcodes do not match"
671msgstr ""
829msgstr ""
672
830
@@ -715,26 +873,30 @@ msgid "To proceed with no SIM tap Skip."
715msgstr ""
873msgstr ""
716
874
717#: qml/Wizard/PasswordMeter.qml:87
875#: qml/Wizard/PasswordMeter.qml:87
718−msgid "Passwords match"
876+msgid "Password too short"
719msgstr ""
877msgstr ""
720
878
721#: qml/Wizard/PasswordMeter.qml:89
879#: qml/Wizard/PasswordMeter.qml:89
880+msgid "Passwords match"
881+msgstr ""
882+
883+#: qml/Wizard/PasswordMeter.qml:91
722msgid "Passwords do not match"
884msgid "Passwords do not match"
723msgstr ""
885msgstr ""
724
886
725−#: qml/Wizard/PasswordMeter.qml:93
887+#: qml/Wizard/PasswordMeter.qml:95
726msgid "Strong password"
888msgid "Strong password"
727msgstr ""
889msgstr ""
728
890
729−#: qml/Wizard/PasswordMeter.qml:95
891+#: qml/Wizard/PasswordMeter.qml:97
730msgid "Fair password"
892msgid "Fair password"
731msgstr ""
893msgstr ""
732
894
733−#: qml/Wizard/PasswordMeter.qml:97
895+#: qml/Wizard/PasswordMeter.qml:99
734msgid "Weak password"
896msgid "Weak password"
735msgstr ""
897msgstr ""
736
898
737−#: qml/Wizard/PasswordMeter.qml:99
899+#: qml/Wizard/PasswordMeter.qml:101
738msgid "Very weak password"
900msgid "Very weak password"
739msgstr ""
901msgstr ""
740
902
@@ -860,6 +1022,9 @@ msgstr ""
860#~ msgid "Shut down"
1022#~ msgid "Shut down"
861#~ msgstr "বন্ধ করুন"
1023#~ msgstr "বন্ধ করুন"
862
1024
1025+#~ msgid "Tap to unlock"
1026+#~ msgstr "লক খোলার জন্য চাপ দিন"
1027+
863#~ msgid "Let’s get started."
1028#~ msgid "Let’s get started."
864#~ msgstr "আসুন শুরু করা যাক।"
1029#~ msgstr "আসুন শুরু করা যাক।"
865
1030
po/br.po+272−101
@@ -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-05-18 11:19+0000\n"
10+"POT-Creation-Date: 2016-07-11 17:24+0000\n"
11"PO-Revision-Date: 2016-04-27 12:20+0000\n"
11"PO-Revision-Date: 2016-04-27 12:20+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,43 +15,43 @@ 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-05-19 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2016-07-14 06:00+0000\n"
19−"X-Generator: Launchpad (build 18025)\n"
19+"X-Generator: Launchpad (build 18115)\n"
20
20
21−#: plugins/IntegratedLightDM/Greeter.cpp:112
21+#: plugins/LightDM/Greeter.cpp:123
22msgid "Password: "
22msgid "Password: "
23msgstr "Ger-tremen : "
23msgstr "Ger-tremen : "
24
24
25−#: plugins/Unity/Launcher/launcheritem.cpp:48
25+#: plugins/Unity/Launcher/launcheritem.cpp:49
26−#: plugins/Unity/Launcher/launcheritem.cpp:107
26+#: plugins/Unity/Launcher/launcheritem.cpp:108
27msgid "Pin shortcut"
27msgid "Pin shortcut"
28msgstr "Spilhennañ ar verradenn"
28msgstr "Spilhennañ ar verradenn"
29
29
30−#: plugins/Unity/Launcher/launcheritem.cpp:53
30+#: plugins/Unity/Launcher/launcheritem.cpp:54
31msgid "Quit"
31msgid "Quit"
32msgstr "Mont kuit"
32msgstr "Mont kuit"
33
33
34−#: plugins/Unity/Launcher/launcheritem.cpp:107
34+#: plugins/Unity/Launcher/launcheritem.cpp:108
35msgid "Unpin shortcut"
35msgid "Unpin shortcut"
36msgstr "Dispilhennañ ar verradenn"
36msgstr "Dispilhennañ ar verradenn"
37
37
38−#: qml/Components/DelayedLockscreen.qml:49
38+#: qml/Components/DelayedLockscreen.qml:50
39msgid "Device Locked"
39msgid "Device Locked"
40msgstr "Benveg prennet"
40msgstr "Benveg prennet"
41
41
42−#: qml/Components/DelayedLockscreen.qml:64
42+#: qml/Components/DelayedLockscreen.qml:65
43msgid "You have been locked out due to too many failed passphrase attempts."
43msgid "You have been locked out due to too many failed passphrase attempts."
44msgstr ""
44msgstr ""
45"Prennet eo bet ho penveg abalamour da re a daolioù-esae c'hwitet evit merkañ "
45"Prennet eo bet ho penveg abalamour da re a daolioù-esae c'hwitet evit merkañ "
46"ho frazenn-dremen."
46"ho frazenn-dremen."
47
47
48−#: qml/Components/DelayedLockscreen.qml:65
48+#: qml/Components/DelayedLockscreen.qml:66
49msgid "You have been locked out due to too many failed passcode attempts."
49msgid "You have been locked out due to too many failed passcode attempts."
50msgstr ""
50msgstr ""
51"Prennet eo bet ho penveg abalamour da re a daolioù-esae evit merkañ ho kod-"
51"Prennet eo bet ho penveg abalamour da re a daolioù-esae evit merkañ ho kod-"
52"tremen."
52"tremen."
53
53
54−#: qml/Components/DelayedLockscreen.qml:74
54+#: qml/Components/DelayedLockscreen.qml:75
55#, qt-format
55#, qt-format
56msgid "Please wait %1 minute and then try again…"
56msgid "Please wait %1 minute and then try again…"
57msgid_plural "Please wait %1 minutes and then try again…"
57msgid_plural "Please wait %1 minutes and then try again…"
@@ -78,7 +78,7 @@ msgid "Log Out"
78msgstr "Digevreañ"
78msgstr "Digevreañ"
79
79
80#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
80#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
81−#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
81+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
82#: qml/Wizard/Pages/passcode-set.qml:32
82#: qml/Wizard/Pages/passcode-set.qml:32
83msgid "Cancel"
83msgid "Cancel"
84msgstr "Nullañ"
84msgstr "Nullañ"
@@ -123,18 +123,188 @@ msgctxt "Button: Restart the system"
123msgid "Restart"
123msgid "Restart"
124msgstr "Adloc'hañ"
124msgstr "Adloc'hañ"
125
125
126+#: qml/Components/KeyboardShortcutsOverlay.qml:41
127+msgid "Keyboard Shortcuts"
128+msgstr ""
129+
130+#: qml/Components/KeyboardShortcutsOverlay.qml:55
131+msgid "Unity 8"
132+msgstr ""
133+
134+#: qml/Components/KeyboardShortcutsOverlay.qml:62
135+msgid "PrtScr"
136+msgstr ""
137+
138+#: qml/Components/KeyboardShortcutsOverlay.qml:67
139+msgid "Takes a screenshot."
140+msgstr ""
141+
142+#: qml/Components/KeyboardShortcutsOverlay.qml:75
143+msgid "Alt + PrtScr"
144+msgstr ""
145+
146+#: qml/Components/KeyboardShortcutsOverlay.qml:80
147+msgid "Takes a screenshot of a window."
148+msgstr ""
149+
150+#: qml/Components/KeyboardShortcutsOverlay.qml:88
151+msgid "Super + Space"
152+msgstr ""
153+
154+#: qml/Components/KeyboardShortcutsOverlay.qml:93
155+msgid "Switches to next keyboard layout."
156+msgstr ""
157+
158+#: qml/Components/KeyboardShortcutsOverlay.qml:101
159+msgid "Super + Shift + Space"
160+msgstr ""
161+
162+#: qml/Components/KeyboardShortcutsOverlay.qml:106
163+msgid "Switches to previous keyboard layout."
164+msgstr ""
165+
166+#: qml/Components/KeyboardShortcutsOverlay.qml:118
167+msgid "Launcher"
168+msgstr ""
169+
170+#: qml/Components/KeyboardShortcutsOverlay.qml:125
171+msgid "Super (Hold)"
172+msgstr ""
173+
174+#: qml/Components/KeyboardShortcutsOverlay.qml:130
175+msgid "Opens the launcher, displays shortcuts."
176+msgstr ""
177+
178+#: qml/Components/KeyboardShortcutsOverlay.qml:138
179+msgid "Alt + F1"
180+msgstr ""
181+
182+#: qml/Components/KeyboardShortcutsOverlay.qml:143
183+msgid "Opens launcher keyboard navigation mode."
184+msgstr ""
185+
186+#: qml/Components/KeyboardShortcutsOverlay.qml:151
187+msgid "Super + Tab"
188+msgstr ""
189+
190+#: qml/Components/KeyboardShortcutsOverlay.qml:156
191+msgid "Switches applications via the launcher."
192+msgstr ""
193+
194+#: qml/Components/KeyboardShortcutsOverlay.qml:164
195+msgid "Super + 0 to 9"
196+msgstr ""
197+
198+#: qml/Components/KeyboardShortcutsOverlay.qml:169
199+msgid "Same as clicking on a launcher icon."
200+msgstr ""
201+
202+#: qml/Components/KeyboardShortcutsOverlay.qml:181
203+msgid "Scopes"
204+msgstr ""
205+
206+#: qml/Components/KeyboardShortcutsOverlay.qml:188
207+msgid "Super (Tap)"
208+msgstr ""
209+
210+#: qml/Components/KeyboardShortcutsOverlay.qml:193
211+msgid "Opens the Scopes home."
212+msgstr ""
213+
214+#: qml/Components/KeyboardShortcutsOverlay.qml:209
215+msgid "Switching"
216+msgstr ""
217+
218+#: qml/Components/KeyboardShortcutsOverlay.qml:216
219+msgid "Alt + Tab"
220+msgstr ""
221+
222+#: qml/Components/KeyboardShortcutsOverlay.qml:221
223+msgid "Switches between applications."
224+msgstr ""
225+
226+#: qml/Components/KeyboardShortcutsOverlay.qml:229
227+msgid "Super + W"
228+msgstr ""
229+
230+#: qml/Components/KeyboardShortcutsOverlay.qml:234
231+msgid "Opens the desktop spread."
232+msgstr ""
233+
234+#: qml/Components/KeyboardShortcutsOverlay.qml:242
235+msgid "Cursor Left or Right"
236+msgstr ""
237+
238+#: qml/Components/KeyboardShortcutsOverlay.qml:247
239+msgid "Moves the focus."
240+msgstr ""
241+
242+#: qml/Components/KeyboardShortcutsOverlay.qml:259
243+msgid "Windows"
244+msgstr ""
245+
246+#: qml/Components/KeyboardShortcutsOverlay.qml:266
247+msgid "Ctrl + Super + D"
248+msgstr ""
249+
250+#: qml/Components/KeyboardShortcutsOverlay.qml:271
251+msgid "Minimizes all windows."
252+msgstr ""
253+
254+#: qml/Components/KeyboardShortcutsOverlay.qml:279
255+msgid "Ctrl + Super + Up"
256+msgstr ""
257+
258+#: qml/Components/KeyboardShortcutsOverlay.qml:284
259+msgid "Maximizes the current window."
260+msgstr ""
261+
262+#: qml/Components/KeyboardShortcutsOverlay.qml:292
263+msgid "Ctrl + Super + Down"
264+msgstr ""
265+
266+#: qml/Components/KeyboardShortcutsOverlay.qml:297
267+msgid "Minimizes or restores the current window."
268+msgstr ""
269+
270+#: qml/Components/KeyboardShortcutsOverlay.qml:305
271+msgid "Ctrl + Super + Left or Right"
272+msgstr ""
273+
274+#: qml/Components/KeyboardShortcutsOverlay.qml:310
275+msgid "Semi-maximizes the current window."
276+msgstr ""
277+
278+#: qml/Components/KeyboardShortcutsOverlay.qml:318
279+msgid "Alt + F4"
280+msgstr ""
281+
282+#: qml/Components/KeyboardShortcutsOverlay.qml:323
283+msgid "Closes the current window."
284+msgstr ""
285+
126−#: qml/Components/Lockscreen.qml:231
286+#: qml/Components/Lockscreen.qml:239
127msgid "Return to Call"
287msgid "Return to Call"
128msgstr "Distreiñ d'ar bellgomzadenn"
288msgstr "Distreiñ d'ar bellgomzadenn"
129
289
130−#: qml/Components/Lockscreen.qml:231
290+#: qml/Components/Lockscreen.qml:239
131msgid "Emergency Call"
291msgid "Emergency Call"
132msgstr "Pellgomzadenn vallus"
292msgstr "Pellgomzadenn vallus"
133
293
134−#: qml/Components/Lockscreen.qml:263
294+#: qml/Components/Lockscreen.qml:271
135msgid "OK"
295msgid "OK"
136msgstr "Mat eo"
296msgstr "Mat eo"
137
297
298+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
299+#, qt-format
300+msgid "%1:%2:%3"
301+msgstr ""
302+
303+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
304+#, qt-format
305+msgid "%1:%2"
306+msgstr ""
307+
138#: qml/Components/ModeSwitchWarningDialog.qml:32
308#: qml/Components/ModeSwitchWarningDialog.qml:32
139msgid "Apps may have unsaved data:"
309msgid "Apps may have unsaved data:"
140msgstr "Roadennoù ha n'int ket enrollet a c'hall bezañ gant an arloadoù :"
310msgstr "Roadennoù ha n'int ket enrollet a c'hall bezañ gant an arloadoù :"
@@ -164,26 +334,30 @@ msgstr "Adkevreañ bremañ !"
164msgid "Close all"
334msgid "Close all"
165msgstr "Serriñ pep tra"
335msgstr "Serriñ pep tra"
166
336
337+#: qml/Components/SharingPicker.qml:54
338+msgid "Preview Share Item"
339+msgstr "Rakwelet an elfenn lodet"
340+
167−#: qml/Dash/DashPageHeader.qml:337
341+#: qml/Dash/DashPageHeader.qml:333
168msgctxt "Button: Open the Ubuntu Store"
342msgctxt "Button: Open the Ubuntu Store"
169msgid "Store"
343msgid "Store"
170msgstr "Stal"
344msgstr "Stal"
171
345
172−#: qml/Dash/DashPageHeader.qml:344
346+#: qml/Dash/DashPageHeader.qml:340
173msgctxt "Button: Start a search in the current dash scope"
347msgctxt "Button: Start a search in the current dash scope"
174msgid "Search"
348msgid "Search"
175msgstr "Klask"
349msgstr "Klask"
176
350
177−#: qml/Dash/DashPageHeader.qml:354
351+#: qml/Dash/DashPageHeader.qml:350
178msgctxt "Button: Show the current dash scope settings"
352msgctxt "Button: Show the current dash scope settings"
179msgid "Settings"
353msgid "Settings"
180msgstr "Arventennoù"
354msgstr "Arventennoù"
181
355
182−#: qml/Dash/DashPageHeader.qml:361
356+#: qml/Dash/DashPageHeader.qml:357
183msgid "Remove from Favorites"
357msgid "Remove from Favorites"
184msgstr "Lemel eus ar sinedoù"
358msgstr "Lemel eus ar sinedoù"
185
359
186−#: qml/Dash/DashPageHeader.qml:361
360+#: qml/Dash/DashPageHeader.qml:357
187msgid "Add to Favorites"
361msgid "Add to Favorites"
188msgstr "Ouzhpennañ d'ar sinedoù"
362msgstr "Ouzhpennañ d'ar sinedoù"
189
363
@@ -195,24 +369,24 @@ msgstr "Purañ ho tisoc'hoù"
195msgid "Reset"
369msgid "Reset"
196msgstr "Adderaouekaat"
370msgstr "Adderaouekaat"
197
371
198−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:764
372+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
199msgid "Show less"
373msgid "Show less"
200msgstr ""
374msgstr ""
201
375
202−#: qml/Dash/GenericScopeView.qml:579
376+#: qml/Dash/GenericScopeView.qml:580
203msgid "Show all"
377msgid "Show all"
204msgstr ""
378msgstr ""
205
379
206−#: qml/Dash/GenericScopeView.qml:636
380+#: qml/Dash/GenericScopeView.qml:637
207msgctxt "Label: Hint for dash search line edit"
381msgctxt "Label: Hint for dash search line edit"
208msgid "Search"
382msgid "Search"
209msgstr "Klask"
383msgstr "Klask"
210
384
211−#: qml/Dash/PageHeaderExtraPanel.qml:55
385+#: qml/Dash/PageHeaderExtraPanel.qml:56
212msgid "Recent Searches"
386msgid "Recent Searches"
213msgstr "Enklaskoù graet nevez zo"
387msgstr "Enklaskoù graet nevez zo"
214
388
215−#: qml/Dash/PageHeaderExtraPanel.qml:66
389+#: qml/Dash/PageHeaderExtraPanel.qml:67
216msgid "Clear All"
390msgid "Clear All"
217msgstr "Diverkañ pep tra"
391msgstr "Diverkañ pep tra"
218
392
@@ -225,22 +399,18 @@ msgid "Less..."
225msgstr "Nebeutoc'h..."
399msgstr "Nebeutoc'h..."
226
400
227#: qml/Dash/Previews/PreviewCommentInput.qml:68
401#: qml/Dash/Previews/PreviewCommentInput.qml:68
228−#: qml/Dash/Previews/PreviewRatingInput.qml:174
402+#: qml/Dash/Previews/PreviewRatingInput.qml:175
229msgid "Send"
403msgid "Send"
230msgstr "Kas"
404msgstr "Kas"
231
405
232−#: qml/Dash/Previews/PreviewRatingInput.qml:84
406+#: qml/Dash/Previews/PreviewRatingInput.qml:82
233msgid "Rate this"
407msgid "Rate this"
234msgstr "Priziit an dra-mañ"
408msgstr "Priziit an dra-mañ"
235
409
236−#: qml/Dash/Previews/PreviewRatingInput.qml:129
410+#: qml/Dash/Previews/PreviewRatingInput.qml:157
237msgid "Add a review"
411msgid "Add a review"
238msgstr "Ouzhpennañ un ali"
412msgstr "Ouzhpennañ un ali"
239
413
240−#: qml/Dash/Previews/PreviewSharing.qml:66
241−msgid "Preview Share Item"
242−msgstr "Rakwelet an elfenn lodet"
243−
244#: qml/Dash/PullToRefreshScopeStyle.qml:55
414#: qml/Dash/PullToRefreshScopeStyle.qml:55
245msgid "Pull to refresh…"
415msgid "Pull to refresh…"
246msgstr "Tennañ evit freskaat..."
416msgstr "Tennañ evit freskaat..."
@@ -253,49 +423,61 @@ msgstr "Lezel da vont evit freskaat..."
253msgid "Enable location data"
423msgid "Enable location data"
254msgstr "Gweredekaat ar roadennoù lec'hiañ"
424msgstr "Gweredekaat ar roadennoù lec'hiañ"
255
425
256−#: qml/Dash/ScopesList.qml:67
426+#: qml/Dash/ScopesList.qml:55
257msgid "Manage"
427msgid "Manage"
258msgstr "Merañ"
428msgstr "Merañ"
259
429
260−#: qml/Dash/ScopesList.qml:113
430+#: qml/Dash/ScopesList.qml:102
261msgid "Home"
431msgid "Home"
262msgstr "Er gêr"
432msgstr "Er gêr"
263
433
264−#: qml/Dash/ScopesList.qml:114
434+#: qml/Dash/ScopesList.qml:103
265msgid "Also installed"
435msgid "Also installed"
266msgstr "Staliet ivez"
436msgstr "Staliet ivez"
267
437
268−#: qml/DisabledScreenNotice.qml:104
438+#: qml/DisabledScreenNotice.qml:109
269msgid ""
439msgid ""
270"Your device is now connected to an external display. Use this screen as a "
440"Your device is now connected to an external display. Use this screen as a "
271"touch pad to interact with the pointer."
441"touch pad to interact with the pointer."
272msgstr ""
442msgstr ""
273
443
274−#: qml/Greeter/CoverPage.qml:118
444+#: qml/Greeter/CoverPage.qml:127
275msgid "Unlock"
445msgid "Unlock"
276msgstr "Dibrennañ"
446msgstr "Dibrennañ"
277
447
448+#: qml/Greeter/Greeter.qml:555
449+msgid "Try again"
450+msgstr ""
451+
278−#: qml/Greeter/LoginList.qml:239
452+#: qml/Greeter/LoginList.qml:63
453+msgid "Passphrase"
454+msgstr ""
455+
456+#: qml/Greeter/LoginList.qml:64
457+msgid "Passcode"
458+msgstr ""
459+
460+#: qml/Greeter/LoginList.qml:87
279msgid "Retry"
461msgid "Retry"
280msgstr "Esaeañ en-dro"
462msgstr "Esaeañ en-dro"
281
463
282−#: qml/Greeter/LoginList.qml:240
464+#: qml/Greeter/LoginList.qml:88
283−msgid "Tap to unlock"
465+msgid "Log In"
284−msgstr "Pouezañ evit dibrennañ"
466+msgstr ""
285
467
286−#: qml/Greeter/NarrowView.qml:54
468+#: qml/Greeter/NarrowView.qml:55
287msgid "Sorry, incorrect passphrase."
469msgid "Sorry, incorrect passphrase."
288msgstr "Siwazh, frazenn-dremen direizh"
470msgstr "Siwazh, frazenn-dremen direizh"
289
471
290−#: qml/Greeter/NarrowView.qml:55
472+#: qml/Greeter/NarrowView.qml:56
291msgid "Sorry, incorrect passcode."
473msgid "Sorry, incorrect passcode."
292msgstr "Siwazh, kod-tremen direizh"
474msgstr "Siwazh, kod-tremen direizh"
293
475
294−#: qml/Greeter/NarrowView.qml:56
476+#: qml/Greeter/NarrowView.qml:57
295msgid "This will be your last attempt."
477msgid "This will be your last attempt."
296msgstr "Ho taol-esae diwezhañ e vo."
478msgstr "Ho taol-esae diwezhañ e vo."
297
479
298−#: qml/Greeter/NarrowView.qml:58
480+#: qml/Greeter/NarrowView.qml:59
299msgid ""
481msgid ""
300"If passphrase is entered incorrectly, your phone will conduct a factory "
482"If passphrase is entered incorrectly, your phone will conduct a factory "
301"reset and all personal data will be deleted."
483"reset and all personal data will be deleted."
@@ -303,7 +485,7 @@ msgstr ""
303"Ma vez ebarzhet ur frazenn-dremen direizh, e vo adderaouekaet ho pellgomzer "
485"Ma vez ebarzhet ur frazenn-dremen direizh, e vo adderaouekaet ho pellgomzer "
304"gant arventennoù al labouradeg hag e vo diverket an holl roadennoù personel"
486"gant arventennoù al labouradeg hag e vo diverket an holl roadennoù personel"
305
487
306−#: qml/Greeter/NarrowView.qml:59
488+#: qml/Greeter/NarrowView.qml:60
307msgid ""
489msgid ""
308"If passcode is entered incorrectly, your phone will conduct a factory reset "
490"If passcode is entered incorrectly, your phone will conduct a factory reset "
309"and all personal data will be deleted."
491"and all personal data will be deleted."
@@ -311,34 +493,34 @@ msgstr ""
311"Ma vez ebarzhet ur c'hod-tremen direizh, e vo adderaouekaet ho pellgomzer "
493"Ma vez ebarzhet ur c'hod-tremen direizh, e vo adderaouekaet ho pellgomzer "
312"gant arventennoù al labouradeg hag e vo diverket an holl roadennoù personel."
494"gant arventennoù al labouradeg hag e vo diverket an holl roadennoù personel."
313
495
314−#: qml/Greeter/NarrowView.qml:116
496+#: qml/Greeter/NarrowView.qml:129
315#, qt-format
497#, qt-format
316msgid "Enter %1"
498msgid "Enter %1"
317msgstr "Merkañ %1"
499msgstr "Merkañ %1"
318
500
319−#: qml/Greeter/NarrowView.qml:117
501+#: qml/Greeter/NarrowView.qml:130
320msgid "Enter passphrase"
502msgid "Enter passphrase"
321msgstr "Merkañ ar frazenn-dremen"
503msgstr "Merkañ ar frazenn-dremen"
322
504
323−#: qml/Greeter/NarrowView.qml:118
505+#: qml/Greeter/NarrowView.qml:131
324msgid "Enter passcode"
506msgid "Enter passcode"
325msgstr "Merkañ ar c'hod-tremen"
507msgstr "Merkañ ar c'hod-tremen"
326
508
327−#: qml/Greeter/NarrowView.qml:119
509+#: qml/Greeter/NarrowView.qml:135
328#, qt-format
510#, qt-format
329msgid "Sorry, incorrect %1"
511msgid "Sorry, incorrect %1"
330msgstr "Siwazh, %1 direizh"
512msgstr "Siwazh, %1 direizh"
331
513
332−#: qml/Greeter/NarrowView.qml:120
514+#: qml/Greeter/NarrowView.qml:136
333msgid "Sorry, incorrect passphrase"
515msgid "Sorry, incorrect passphrase"
334msgstr "Siwazh, frazenn-dremen direizh"
516msgstr "Siwazh, frazenn-dremen direizh"
335
517
336−#: qml/Greeter/NarrowView.qml:121
518+#: qml/Greeter/NarrowView.qml:137
337msgctxt "passphrase"
519msgctxt "passphrase"
338msgid "Please re-enter"
520msgid "Please re-enter"
339msgstr "Adverkañ, mar plij"
521msgstr "Adverkañ, mar plij"
340
522
341−#: qml/Greeter/NarrowView.qml:122
523+#: qml/Greeter/NarrowView.qml:138
342msgid "Sorry, incorrect passcode"
524msgid "Sorry, incorrect passcode"
343msgstr "Digarezit, kod-tremen direizh"
525msgstr "Digarezit, kod-tremen direizh"
344
526
@@ -413,18 +595,18 @@ msgstr "Echu"
413msgid "Failed, tap to retry"
595msgid "Failed, tap to retry"
414msgstr "C'hwitet, touchit evit adkregiñ"
596msgstr "C'hwitet, touchit evit adkregiñ"
415
597
416−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
598+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
417−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
599+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
418msgctxt "Button: Send a reply message"
600msgctxt "Button: Send a reply message"
419msgid "Send"
601msgid "Send"
420msgstr "Kas"
602msgstr "Kas"
421
603
422−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
604+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
423msgctxt "Label: Hint in message indicator line edit"
605msgctxt "Label: Hint in message indicator line edit"
424msgid "Reply"
606msgid "Reply"
425msgstr "Respont"
607msgstr "Respont"
426
608
427−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
609+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
428msgctxt "Button: Call back on phone"
610msgctxt "Button: Call back on phone"
429msgid "Call back"
611msgid "Call back"
430msgstr "Gervel en-dro"
612msgstr "Gervel en-dro"
@@ -433,32 +615,12 @@ msgstr "Gervel en-dro"
433msgid "Drag using 3 fingers any application from one window to the other"
615msgid "Drag using 3 fingers any application from one window to the other"
434msgstr ""
616msgstr ""
435
617
436−#: qml/Tutorial/TutorialBottom.qml:78
437−msgid "Swipe up to add a contact"
438−msgstr "Riklit d'an nec'h evit ouzhpennañ un darempred"
439−
440−#: qml/Tutorial/TutorialBottom.qml:80
441−msgid "Swipe up for favorite calculations"
442−msgstr ""
443−
444−#: qml/Tutorial/TutorialBottom.qml:82
445−msgid "Swipe up for recent calls"
446−msgstr ""
447−
448−#: qml/Tutorial/TutorialBottom.qml:84
449−msgid "Swipe up to create a message"
450−msgstr "Riklit d'an nec'h evit krouiñ ur gemennadenn"
451−
452−#: qml/Tutorial/TutorialBottom.qml:85
453−msgid "Swipe up to manage the app"
454−msgstr ""
455−
456−#: qml/Tutorial/TutorialLeftLong.qml:47
618+#: qml/Tutorial/TutorialLeftLong.qml:49
457msgid "Long swipe from the left edge to open the Today scope"
619msgid "Long swipe from the left edge to open the Today scope"
458msgstr ""
620msgstr ""
459
621
460#: qml/Tutorial/TutorialLeft.qml:47
622#: qml/Tutorial/TutorialLeft.qml:47
461−msgid "Swipe from the left edge to open the launcher"
623+msgid "Short swipe from the left edge to open the launcher"
462msgstr ""
624msgstr ""
463
625
464#: qml/Tutorial/TutorialRight.qml:55
626#: qml/Tutorial/TutorialRight.qml:55
@@ -466,15 +628,11 @@ msgid "Push your mouse against the right edge to view your open apps"
466msgstr ""
628msgstr ""
467
629
468#: qml/Tutorial/TutorialRight.qml:56
630#: qml/Tutorial/TutorialRight.qml:56
469−msgid "Short or long swipe from the right edge to view your open apps"
631+msgid "Swipe from the right edge to view your open apps"
470msgstr ""
632msgstr ""
471
633
472#: qml/Tutorial/TutorialTop.qml:53
634#: qml/Tutorial/TutorialTop.qml:53
473−msgid "Swipe from the top right edge to open the notification bar"
635+msgid "Swipe from the top edge to access notifications and quick settings"
474−msgstr ""
475−
476−#: qml/Tutorial/TutorialTop.qml:54
477−msgid "Swipe from the top edge to open the notification bar"
478msgstr ""
636msgstr ""
479
637
480#: qml/Wizard/Page.qml:54
638#: qml/Wizard/Page.qml:54
@@ -486,11 +644,11 @@ msgstr "Distreiñ"
486msgid "Language"
644msgid "Language"
487msgstr "Yezh"
645msgstr "Yezh"
488
646
489−#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
647+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
490−#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
648+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
491#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
649#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
492#: qml/Wizard/Pages/75-report-check.qml:84
650#: qml/Wizard/Pages/75-report-check.qml:84
493−#: qml/Wizard/Pages/passcode-desktop.qml:124
651+#: qml/Wizard/Pages/passcode-desktop.qml:141
494#: qml/Wizard/Pages/password-set.qml:141
652#: qml/Wizard/Pages/password-set.qml:141
495msgid "Next"
653msgid "Next"
496msgstr "War-lerc'h"
654msgstr "War-lerc'h"
@@ -552,7 +710,7 @@ msgstr ""
552msgid "Time Zone"
710msgid "Time Zone"
553msgstr "Gwerzhid-eur"
711msgstr "Gwerzhid-eur"
554
712
555−#: qml/Wizard/Pages/50-timezone.qml:178
713+#: qml/Wizard/Pages/50-timezone.qml:181
556msgid "Enter your city"
714msgid "Enter your city"
557msgstr "Skrivit ho kêr"
715msgstr "Skrivit ho kêr"
558
716
@@ -642,7 +800,7 @@ msgid "Service Terms"
642msgstr "Divizoù servij"
800msgstr "Divizoù servij"
643
801
644#: qml/Wizard/Pages/passcode-confirm.qml:43
802#: qml/Wizard/Pages/passcode-confirm.qml:43
645−#: qml/Wizard/Pages/passcode-desktop.qml:80
803+#: qml/Wizard/Pages/passcode-desktop.qml:96
646msgid "Confirm passcode"
804msgid "Confirm passcode"
647msgstr "Kadarnaat ar c'hod-tremen"
805msgstr "Kadarnaat ar c'hod-tremen"
648
806
@@ -659,24 +817,24 @@ msgstr "Skrivit adarre, mar plij."
659msgid "Lock Screen Passcode"
817msgid "Lock Screen Passcode"
660msgstr "Kod da brennañ ar skramm"
818msgstr "Kod da brennañ ar skramm"
661
819
662−#: qml/Wizard/Pages/passcode-desktop.qml:56
820+#: qml/Wizard/Pages/passcode-desktop.qml:60
663msgid "Enter 4 numbers to setup your passcode"
821msgid "Enter 4 numbers to setup your passcode"
664msgstr "Skrivit 4 sifr evit lakaat ho kod"
822msgstr "Skrivit 4 sifr evit lakaat ho kod"
665
823
666−#: qml/Wizard/Pages/passcode-desktop.qml:65
824+#: qml/Wizard/Pages/passcode-desktop.qml:76
667#: qml/Wizard/Pages/passcode-set.qml:54
825#: qml/Wizard/Pages/passcode-set.qml:54
668msgid "Choose passcode"
826msgid "Choose passcode"
669msgstr "Choaz ur c'hod"
827msgstr "Choaz ur c'hod"
670
828
671−#: qml/Wizard/Pages/passcode-desktop.qml:105
829+#: qml/Wizard/Pages/passcode-desktop.qml:126
672msgid "Passcode too short"
830msgid "Passcode too short"
673msgstr "Kod re verr"
831msgstr "Kod re verr"
674
832
675−#: qml/Wizard/Pages/passcode-desktop.qml:107
833+#: qml/Wizard/Pages/passcode-desktop.qml:128
676msgid "Passcodes match"
834msgid "Passcodes match"
677msgstr "klotañ a ra ar c'hodoù an eil gant egile"
835msgstr "klotañ a ra ar c'hodoù an eil gant egile"
678
836
679−#: qml/Wizard/Pages/passcode-desktop.qml:109
837+#: qml/Wizard/Pages/passcode-desktop.qml:130
680msgid "Passcodes do not match"
838msgid "Passcodes do not match"
681msgstr "Ne glot ket ar c'hodoù an eil gant egile"
839msgstr "Ne glot ket ar c'hodoù an eil gant egile"
682
840
@@ -725,26 +883,30 @@ msgid "To proceed with no SIM tap Skip."
725msgstr ""
883msgstr ""
726
884
727#: qml/Wizard/PasswordMeter.qml:87
885#: qml/Wizard/PasswordMeter.qml:87
886+msgid "Password too short"
887+msgstr ""
888+
889+#: qml/Wizard/PasswordMeter.qml:89
728msgid "Passwords match"
890msgid "Passwords match"
729msgstr "Klotañ a ra ar gerioù-tremen an eil gant egile"
891msgstr "Klotañ a ra ar gerioù-tremen an eil gant egile"
730
892
731−#: qml/Wizard/PasswordMeter.qml:89
893+#: qml/Wizard/PasswordMeter.qml:91
732msgid "Passwords do not match"
894msgid "Passwords do not match"
733msgstr "Ne glot ket ar gerioù-tremen"
895msgstr "Ne glot ket ar gerioù-tremen"
734
896
735−#: qml/Wizard/PasswordMeter.qml:93
897+#: qml/Wizard/PasswordMeter.qml:95
736msgid "Strong password"
898msgid "Strong password"
737msgstr "Ger-tremen sur"
899msgstr "Ger-tremen sur"
738
900
739−#: qml/Wizard/PasswordMeter.qml:95
901+#: qml/Wizard/PasswordMeter.qml:97
740msgid "Fair password"
902msgid "Fair password"
741msgstr "Ger-tremen reizh"
903msgstr "Ger-tremen reizh"
742
904
743−#: qml/Wizard/PasswordMeter.qml:97
905+#: qml/Wizard/PasswordMeter.qml:99
744msgid "Weak password"
906msgid "Weak password"
745msgstr "Ger-tremen diasur"
907msgstr "Ger-tremen diasur"
746
908
747−#: qml/Wizard/PasswordMeter.qml:99
909+#: qml/Wizard/PasswordMeter.qml:101
748msgid "Very weak password"
910msgid "Very weak password"
749msgstr "Ger-tremen diasur-kenañ"
911msgstr "Ger-tremen diasur-kenañ"
750
912
@@ -965,6 +1127,9 @@ msgstr "Ger-tremen diasur-kenañ"
965#~ msgid "%1 〉"
1127#~ msgid "%1 〉"
966#~ msgstr "%1 〉"
1128#~ msgstr "%1 〉"
967
1129
1130+#~ msgid "Tap to unlock"
1131+#~ msgstr "Pouezañ evit dibrennañ"
1132+
968#~ msgid "This action does different things for different apps"
1133#~ msgid "This action does different things for different apps"
969#~ msgstr "An ober-mañ a ra meur a dra evit meur a arload"
1134#~ msgstr "An ober-mañ a ra meur a dra evit meur a arload"
970
1135
@@ -1072,3 +1237,9 @@ msgstr "Ger-tremen diasur-kenañ"
1072
1237
1073#~ msgid "Call back"
1238#~ msgid "Call back"
1074#~ msgstr "Gervel en-dro"
1239#~ msgstr "Gervel en-dro"
1240+
1241+#~ msgid "Swipe up to add a contact"
1242+#~ msgstr "Riklit d'an nec'h evit ouzhpennañ un darempred"
1243+
1244+#~ msgid "Swipe up to create a message"
1245+#~ msgstr "Riklit d'an nec'h evit krouiñ ur gemennadenn"
po/bs.po+266−101
@@ -7,7 +7,7 @@ msgid ""
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-05-18 11:19+0000\n"
10+"POT-Creation-Date: 2016-07-11 17:24+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,39 +16,39 @@ 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-05-19 05:49+0000\n"
19+"X-Launchpad-Export-Date: 2016-07-14 06:00+0000\n"
20−"X-Generator: Launchpad (build 18025)\n"
20+"X-Generator: Launchpad (build 18115)\n"
21
21
22−#: plugins/IntegratedLightDM/Greeter.cpp:112
22+#: plugins/LightDM/Greeter.cpp:123
23msgid "Password: "
23msgid "Password: "
24msgstr "Šifra: "
24msgstr "Šifra: "
25
25
26−#: plugins/Unity/Launcher/launcheritem.cpp:48
26+#: plugins/Unity/Launcher/launcheritem.cpp:49
27−#: plugins/Unity/Launcher/launcheritem.cpp:107
27+#: plugins/Unity/Launcher/launcheritem.cpp:108
28msgid "Pin shortcut"
28msgid "Pin shortcut"
29msgstr "Prikačite prečicu"
29msgstr "Prikačite prečicu"
30
30
31−#: plugins/Unity/Launcher/launcheritem.cpp:53
31+#: plugins/Unity/Launcher/launcheritem.cpp:54
32msgid "Quit"
32msgid "Quit"
33msgstr "Napusti"
33msgstr "Napusti"
34
34
35−#: plugins/Unity/Launcher/launcheritem.cpp:107
35+#: plugins/Unity/Launcher/launcheritem.cpp:108
36msgid "Unpin shortcut"
36msgid "Unpin shortcut"
37msgstr "Otkačite prečicu"
37msgstr "Otkačite prečicu"
38
38
39−#: qml/Components/DelayedLockscreen.qml:49
39+#: qml/Components/DelayedLockscreen.qml:50
40msgid "Device Locked"
40msgid "Device Locked"
41msgstr "Uređaj zaključan"
41msgstr "Uređaj zaključan"
42
42
43−#: qml/Components/DelayedLockscreen.qml:64
43+#: qml/Components/DelayedLockscreen.qml:65
44msgid "You have been locked out due to too many failed passphrase attempts."
44msgid "You have been locked out due to too many failed passphrase attempts."
45msgstr "Izbačeni ste zbog previše neuspjelih pokušaja unosa pristupne fraze."
45msgstr "Izbačeni ste zbog previše neuspjelih pokušaja unosa pristupne fraze."
46
46
47−#: qml/Components/DelayedLockscreen.qml:65
47+#: qml/Components/DelayedLockscreen.qml:66
48msgid "You have been locked out due to too many failed passcode attempts."
48msgid "You have been locked out due to too many failed passcode attempts."
49msgstr "Izbačeni ste zbog previše neuspjelih pokušaja unosa pristupnog koda."
49msgstr "Izbačeni ste zbog previše neuspjelih pokušaja unosa pristupnog koda."
50
50
51−#: qml/Components/DelayedLockscreen.qml:74
51+#: qml/Components/DelayedLockscreen.qml:75
52#, qt-format
52#, qt-format
53msgid "Please wait %1 minute and then try again…"
53msgid "Please wait %1 minute and then try again…"
54msgid_plural "Please wait %1 minutes and then try again…"
54msgid_plural "Please wait %1 minutes and then try again…"
@@ -76,7 +76,7 @@ msgid "Log Out"
76msgstr "Odjavi se"
76msgstr "Odjavi se"
77
77
78#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
78#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
79−#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
79+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
80#: qml/Wizard/Pages/passcode-set.qml:32
80#: qml/Wizard/Pages/passcode-set.qml:32
81msgid "Cancel"
81msgid "Cancel"
82msgstr "Otkaži"
82msgstr "Otkaži"
@@ -121,18 +121,188 @@ msgctxt "Button: Restart the system"
121msgid "Restart"
121msgid "Restart"
122msgstr "Restartuj"
122msgstr "Restartuj"
123
123
124+#: qml/Components/KeyboardShortcutsOverlay.qml:41
125+msgid "Keyboard Shortcuts"
126+msgstr ""
127+
128+#: qml/Components/KeyboardShortcutsOverlay.qml:55
129+msgid "Unity 8"
130+msgstr ""
131+
132+#: qml/Components/KeyboardShortcutsOverlay.qml:62
133+msgid "PrtScr"
134+msgstr ""
135+
136+#: qml/Components/KeyboardShortcutsOverlay.qml:67
137+msgid "Takes a screenshot."
138+msgstr ""
139+
140+#: qml/Components/KeyboardShortcutsOverlay.qml:75
141+msgid "Alt + PrtScr"
142+msgstr ""
143+
144+#: qml/Components/KeyboardShortcutsOverlay.qml:80
145+msgid "Takes a screenshot of a window."
146+msgstr ""
147+
148+#: qml/Components/KeyboardShortcutsOverlay.qml:88
149+msgid "Super + Space"
150+msgstr ""
151+
152+#: qml/Components/KeyboardShortcutsOverlay.qml:93
153+msgid "Switches to next keyboard layout."
154+msgstr ""
155+
156+#: qml/Components/KeyboardShortcutsOverlay.qml:101
157+msgid "Super + Shift + Space"
158+msgstr ""
159+
160+#: qml/Components/KeyboardShortcutsOverlay.qml:106
161+msgid "Switches to previous keyboard layout."
162+msgstr ""
163+
164+#: qml/Components/KeyboardShortcutsOverlay.qml:118
165+msgid "Launcher"
166+msgstr ""
167+
168+#: qml/Components/KeyboardShortcutsOverlay.qml:125
169+msgid "Super (Hold)"
170+msgstr ""
171+
172+#: qml/Components/KeyboardShortcutsOverlay.qml:130
173+msgid "Opens the launcher, displays shortcuts."
174+msgstr ""
175+
176+#: qml/Components/KeyboardShortcutsOverlay.qml:138
177+msgid "Alt + F1"
178+msgstr ""
179+
180+#: qml/Components/KeyboardShortcutsOverlay.qml:143
181+msgid "Opens launcher keyboard navigation mode."
182+msgstr ""
183+
184+#: qml/Components/KeyboardShortcutsOverlay.qml:151
185+msgid "Super + Tab"
186+msgstr ""
187+
188+#: qml/Components/KeyboardShortcutsOverlay.qml:156
189+msgid "Switches applications via the launcher."
190+msgstr ""
191+
192+#: qml/Components/KeyboardShortcutsOverlay.qml:164
193+msgid "Super + 0 to 9"
194+msgstr ""
195+
196+#: qml/Components/KeyboardShortcutsOverlay.qml:169
197+msgid "Same as clicking on a launcher icon."
198+msgstr ""
199+
200+#: qml/Components/KeyboardShortcutsOverlay.qml:181
201+msgid "Scopes"
202+msgstr ""
203+
204+#: qml/Components/KeyboardShortcutsOverlay.qml:188
205+msgid "Super (Tap)"
206+msgstr ""
207+
208+#: qml/Components/KeyboardShortcutsOverlay.qml:193
209+msgid "Opens the Scopes home."
210+msgstr ""
211+
212+#: qml/Components/KeyboardShortcutsOverlay.qml:209
213+msgid "Switching"
214+msgstr ""
215+
216+#: qml/Components/KeyboardShortcutsOverlay.qml:216
217+msgid "Alt + Tab"
218+msgstr ""
219+
220+#: qml/Components/KeyboardShortcutsOverlay.qml:221
221+msgid "Switches between applications."
222+msgstr ""
223+
224+#: qml/Components/KeyboardShortcutsOverlay.qml:229
225+msgid "Super + W"
226+msgstr ""
227+
228+#: qml/Components/KeyboardShortcutsOverlay.qml:234
229+msgid "Opens the desktop spread."
230+msgstr ""
231+
232+#: qml/Components/KeyboardShortcutsOverlay.qml:242
233+msgid "Cursor Left or Right"
234+msgstr ""
235+
236+#: qml/Components/KeyboardShortcutsOverlay.qml:247
237+msgid "Moves the focus."
238+msgstr ""
239+
240+#: qml/Components/KeyboardShortcutsOverlay.qml:259
241+msgid "Windows"
242+msgstr ""
243+
244+#: qml/Components/KeyboardShortcutsOverlay.qml:266
245+msgid "Ctrl + Super + D"
246+msgstr ""
247+
248+#: qml/Components/KeyboardShortcutsOverlay.qml:271
249+msgid "Minimizes all windows."
250+msgstr ""
251+
252+#: qml/Components/KeyboardShortcutsOverlay.qml:279
253+msgid "Ctrl + Super + Up"
254+msgstr ""
255+
256+#: qml/Components/KeyboardShortcutsOverlay.qml:284
257+msgid "Maximizes the current window."
258+msgstr ""
259+
260+#: qml/Components/KeyboardShortcutsOverlay.qml:292
261+msgid "Ctrl + Super + Down"
262+msgstr ""
263+
264+#: qml/Components/KeyboardShortcutsOverlay.qml:297
265+msgid "Minimizes or restores the current window."
266+msgstr ""
267+
268+#: qml/Components/KeyboardShortcutsOverlay.qml:305
269+msgid "Ctrl + Super + Left or Right"
270+msgstr ""
271+
272+#: qml/Components/KeyboardShortcutsOverlay.qml:310
273+msgid "Semi-maximizes the current window."
274+msgstr ""
275+
276+#: qml/Components/KeyboardShortcutsOverlay.qml:318
277+msgid "Alt + F4"
278+msgstr ""
279+
280+#: qml/Components/KeyboardShortcutsOverlay.qml:323
281+msgid "Closes the current window."
282+msgstr ""
283+
124−#: qml/Components/Lockscreen.qml:231
284+#: qml/Components/Lockscreen.qml:239
125msgid "Return to Call"
285msgid "Return to Call"
126msgstr "Povratak na Poziv"
286msgstr "Povratak na Poziv"
127
287
128−#: qml/Components/Lockscreen.qml:231
288+#: qml/Components/Lockscreen.qml:239
129msgid "Emergency Call"
289msgid "Emergency Call"
130msgstr "Hitan Poziv"
290msgstr "Hitan Poziv"
131
291
132−#: qml/Components/Lockscreen.qml:263
292+#: qml/Components/Lockscreen.qml:271
133msgid "OK"
293msgid "OK"
134msgstr "U redu"
294msgstr "U redu"
135
295
296+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
297+#, qt-format
298+msgid "%1:%2:%3"
299+msgstr ""
300+
301+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
302+#, qt-format
303+msgid "%1:%2"
304+msgstr ""
305+
136#: qml/Components/ModeSwitchWarningDialog.qml:32
306#: qml/Components/ModeSwitchWarningDialog.qml:32
137msgid "Apps may have unsaved data:"
307msgid "Apps may have unsaved data:"
138msgstr "Aplikacije možda imaju podataka koji nisu sačuvani:"
308msgstr "Aplikacije možda imaju podataka koji nisu sačuvani:"
@@ -161,26 +331,30 @@ msgstr "Ponovo poveži sada"
161msgid "Close all"
331msgid "Close all"
162msgstr "Zatvori sve"
332msgstr "Zatvori sve"
163
333
334+#: qml/Components/SharingPicker.qml:54
335+msgid "Preview Share Item"
336+msgstr "Pogledaj stavku koja se dijeli"
337+
164−#: qml/Dash/DashPageHeader.qml:337
338+#: qml/Dash/DashPageHeader.qml:333
165msgctxt "Button: Open the Ubuntu Store"
339msgctxt "Button: Open the Ubuntu Store"
166msgid "Store"
340msgid "Store"
167msgstr "Trgovina"
341msgstr "Trgovina"
168
342
169−#: qml/Dash/DashPageHeader.qml:344
343+#: qml/Dash/DashPageHeader.qml:340
170msgctxt "Button: Start a search in the current dash scope"
344msgctxt "Button: Start a search in the current dash scope"
171msgid "Search"
345msgid "Search"
172msgstr "Pretraživanje"
346msgstr "Pretraživanje"
173
347
174−#: qml/Dash/DashPageHeader.qml:354
348+#: qml/Dash/DashPageHeader.qml:350
175msgctxt "Button: Show the current dash scope settings"
349msgctxt "Button: Show the current dash scope settings"
176msgid "Settings"
350msgid "Settings"
177msgstr "Podešavanja"
351msgstr "Podešavanja"
178
352
179−#: qml/Dash/DashPageHeader.qml:361
353+#: qml/Dash/DashPageHeader.qml:357
180msgid "Remove from Favorites"
354msgid "Remove from Favorites"
181msgstr "Ukloni iz Omiljenih"
355msgstr "Ukloni iz Omiljenih"
182
356
183−#: qml/Dash/DashPageHeader.qml:361
357+#: qml/Dash/DashPageHeader.qml:357
184msgid "Add to Favorites"
358msgid "Add to Favorites"
185msgstr "Dodaj u Omiljene"
359msgstr "Dodaj u Omiljene"
186
360
@@ -192,24 +366,24 @@ msgstr ""
192msgid "Reset"
366msgid "Reset"
193msgstr ""
367msgstr ""
194
368
195−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:764
369+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
196msgid "Show less"
370msgid "Show less"
197msgstr ""
371msgstr ""
198
372
199−#: qml/Dash/GenericScopeView.qml:579
373+#: qml/Dash/GenericScopeView.qml:580
200msgid "Show all"
374msgid "Show all"
201msgstr ""
375msgstr ""
202
376
203−#: qml/Dash/GenericScopeView.qml:636
377+#: qml/Dash/GenericScopeView.qml:637
204msgctxt "Label: Hint for dash search line edit"
378msgctxt "Label: Hint for dash search line edit"
205msgid "Search"
379msgid "Search"
206msgstr "Pretraži"
380msgstr "Pretraži"
207
381
208−#: qml/Dash/PageHeaderExtraPanel.qml:55
382+#: qml/Dash/PageHeaderExtraPanel.qml:56
209msgid "Recent Searches"
383msgid "Recent Searches"
210msgstr ""
384msgstr ""
211
385
212−#: qml/Dash/PageHeaderExtraPanel.qml:66
386+#: qml/Dash/PageHeaderExtraPanel.qml:67
213msgid "Clear All"
387msgid "Clear All"
214msgstr ""
388msgstr ""
215
389
@@ -222,22 +396,18 @@ msgid "Less..."
222msgstr "Manje..."
396msgstr "Manje..."
223
397
224#: qml/Dash/Previews/PreviewCommentInput.qml:68
398#: qml/Dash/Previews/PreviewCommentInput.qml:68
225−#: qml/Dash/Previews/PreviewRatingInput.qml:174
399+#: qml/Dash/Previews/PreviewRatingInput.qml:175
226msgid "Send"
400msgid "Send"
227msgstr "Pošalji"
401msgstr "Pošalji"
228
402
229−#: qml/Dash/Previews/PreviewRatingInput.qml:84
403+#: qml/Dash/Previews/PreviewRatingInput.qml:82
230msgid "Rate this"
404msgid "Rate this"
231msgstr "Ocijeni ovo"
405msgstr "Ocijeni ovo"
232
406
233−#: qml/Dash/Previews/PreviewRatingInput.qml:129
407+#: qml/Dash/Previews/PreviewRatingInput.qml:157
234msgid "Add a review"
408msgid "Add a review"
235msgstr "Dodaj recenziju"
409msgstr "Dodaj recenziju"
236
410
237−#: qml/Dash/Previews/PreviewSharing.qml:66
238−msgid "Preview Share Item"
239−msgstr "Pogledaj stavku koja se dijeli"
240−
241#: qml/Dash/PullToRefreshScopeStyle.qml:55
411#: qml/Dash/PullToRefreshScopeStyle.qml:55
242msgid "Pull to refresh…"
412msgid "Pull to refresh…"
243msgstr "Povući za osvježavanje..."
413msgstr "Povući za osvježavanje..."
@@ -250,49 +420,61 @@ msgstr "Pustiti za osvježavanje..."
250msgid "Enable location data"
420msgid "Enable location data"
251msgstr "Omogućiti podatke o lokaciji"
421msgstr "Omogućiti podatke o lokaciji"
252
422
253−#: qml/Dash/ScopesList.qml:67
423+#: qml/Dash/ScopesList.qml:55
254msgid "Manage"
424msgid "Manage"
255msgstr "Upravljanje"
425msgstr "Upravljanje"
256
426
257−#: qml/Dash/ScopesList.qml:113
427+#: qml/Dash/ScopesList.qml:102
258msgid "Home"
428msgid "Home"
259msgstr "Početna"
429msgstr "Početna"
260
430
261−#: qml/Dash/ScopesList.qml:114
431+#: qml/Dash/ScopesList.qml:103
262msgid "Also installed"
432msgid "Also installed"
263msgstr "Također instalirano"
433msgstr "Također instalirano"
264
434
265−#: qml/DisabledScreenNotice.qml:104
435+#: qml/DisabledScreenNotice.qml:109
266msgid ""
436msgid ""
267"Your device is now connected to an external display. Use this screen as a "
437"Your device is now connected to an external display. Use this screen as a "
268"touch pad to interact with the pointer."
438"touch pad to interact with the pointer."
269msgstr ""
439msgstr ""
270
440
271−#: qml/Greeter/CoverPage.qml:118
441+#: qml/Greeter/CoverPage.qml:127
272msgid "Unlock"
442msgid "Unlock"
273msgstr "Otključaj"
443msgstr "Otključaj"
274
444
445+#: qml/Greeter/Greeter.qml:555
446+msgid "Try again"
447+msgstr ""
448+
275−#: qml/Greeter/LoginList.qml:239
449+#: qml/Greeter/LoginList.qml:63
450+msgid "Passphrase"
451+msgstr ""
452+
453+#: qml/Greeter/LoginList.qml:64
454+msgid "Passcode"
455+msgstr ""
456+
457+#: qml/Greeter/LoginList.qml:87
276msgid "Retry"
458msgid "Retry"
277msgstr "Ponovi"
459msgstr "Ponovi"
278
460
279−#: qml/Greeter/LoginList.qml:240
461+#: qml/Greeter/LoginList.qml:88
280−msgid "Tap to unlock"
462+msgid "Log In"
281−msgstr "Kucnite za otključavanje"
463+msgstr ""
282
464
283−#: qml/Greeter/NarrowView.qml:54
465+#: qml/Greeter/NarrowView.qml:55
284msgid "Sorry, incorrect passphrase."
466msgid "Sorry, incorrect passphrase."
285msgstr "Izvinite, pogrešna pristupna fraza."
467msgstr "Izvinite, pogrešna pristupna fraza."
286
468
287−#: qml/Greeter/NarrowView.qml:55
469+#: qml/Greeter/NarrowView.qml:56
288msgid "Sorry, incorrect passcode."
470msgid "Sorry, incorrect passcode."
289msgstr "Izvinite, pogrešan pristupni kod."
471msgstr "Izvinite, pogrešan pristupni kod."
290
472
291−#: qml/Greeter/NarrowView.qml:56
473+#: qml/Greeter/NarrowView.qml:57
292msgid "This will be your last attempt."
474msgid "This will be your last attempt."
293msgstr "Ovo će biti vaš posljednji pokušaj."
475msgstr "Ovo će biti vaš posljednji pokušaj."
294
476
295−#: qml/Greeter/NarrowView.qml:58
477+#: qml/Greeter/NarrowView.qml:59
296msgid ""
478msgid ""
297"If passphrase is entered incorrectly, your phone will conduct a factory "
479"If passphrase is entered incorrectly, your phone will conduct a factory "
298"reset and all personal data will be deleted."
480"reset and all personal data will be deleted."
@@ -300,7 +482,7 @@ msgstr ""
300"Ako je pristupna fraza unesena pogrešno, vaš telefon će sprovesti reset na "
482"Ako je pristupna fraza unesena pogrešno, vaš telefon će sprovesti reset na "
301"fabričke postavke i svi osobni podaci će biti izbrisani."
483"fabričke postavke i svi osobni podaci će biti izbrisani."
302
484
303−#: qml/Greeter/NarrowView.qml:59
485+#: qml/Greeter/NarrowView.qml:60
304msgid ""
486msgid ""
305"If passcode is entered incorrectly, your phone will conduct a factory reset "
487"If passcode is entered incorrectly, your phone will conduct a factory reset "
306"and all personal data will be deleted."
488"and all personal data will be deleted."
@@ -308,34 +490,34 @@ msgstr ""
308"Ako je pristupni kod unesen netačno, vaš telefon će sprovesti reset na "
490"Ako je pristupni kod unesen netačno, vaš telefon će sprovesti reset na "
309"fabričke postavke i svi osobni podaci će biti izbrisani."
491"fabričke postavke i svi osobni podaci će biti izbrisani."
310
492
311−#: qml/Greeter/NarrowView.qml:116
493+#: qml/Greeter/NarrowView.qml:129
312#, qt-format
494#, qt-format
313msgid "Enter %1"
495msgid "Enter %1"
314msgstr "Unesite %1"
496msgstr "Unesite %1"
315
497
316−#: qml/Greeter/NarrowView.qml:117
498+#: qml/Greeter/NarrowView.qml:130
317msgid "Enter passphrase"
499msgid "Enter passphrase"
318msgstr "Unesite propusnu frazu"
500msgstr "Unesite propusnu frazu"
319
501
320−#: qml/Greeter/NarrowView.qml:118
502+#: qml/Greeter/NarrowView.qml:131
321msgid "Enter passcode"
503msgid "Enter passcode"
322msgstr "Unesite pristupni kod"
504msgstr "Unesite pristupni kod"
323
505
324−#: qml/Greeter/NarrowView.qml:119
506+#: qml/Greeter/NarrowView.qml:135
325#, qt-format
507#, qt-format
326msgid "Sorry, incorrect %1"
508msgid "Sorry, incorrect %1"
327msgstr "Izvinite, netačno %1"
509msgstr "Izvinite, netačno %1"
328
510
329−#: qml/Greeter/NarrowView.qml:120
511+#: qml/Greeter/NarrowView.qml:136
330msgid "Sorry, incorrect passphrase"
512msgid "Sorry, incorrect passphrase"
331msgstr "Izvinite, netačna propusna fraza"
513msgstr "Izvinite, netačna propusna fraza"
332
514
333−#: qml/Greeter/NarrowView.qml:121
515+#: qml/Greeter/NarrowView.qml:137
334msgctxt "passphrase"
516msgctxt "passphrase"
335msgid "Please re-enter"
517msgid "Please re-enter"
336msgstr "Molim ponovo unesite"
518msgstr "Molim ponovo unesite"
337
519
338−#: qml/Greeter/NarrowView.qml:122
520+#: qml/Greeter/NarrowView.qml:138
339msgid "Sorry, incorrect passcode"
521msgid "Sorry, incorrect passcode"
340msgstr "Izvinite, netačan pristupni kod"
522msgstr "Izvinite, netačan pristupni kod"
341
523
@@ -413,18 +595,18 @@ msgstr "Završeno"
413msgid "Failed, tap to retry"
595msgid "Failed, tap to retry"
414msgstr "Neuspjelo, kucnuti za ponavljanje"
596msgstr "Neuspjelo, kucnuti za ponavljanje"
415
597
416−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
598+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
417−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
599+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
418msgctxt "Button: Send a reply message"
600msgctxt "Button: Send a reply message"
419msgid "Send"
601msgid "Send"
420msgstr "Pošalji"
602msgstr "Pošalji"
421
603
422−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
604+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
423msgctxt "Label: Hint in message indicator line edit"
605msgctxt "Label: Hint in message indicator line edit"
424msgid "Reply"
606msgid "Reply"
425msgstr "Odgovorite"
607msgstr "Odgovorite"
426
608
427−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
609+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
428msgctxt "Button: Call back on phone"
610msgctxt "Button: Call back on phone"
429msgid "Call back"
611msgid "Call back"
430msgstr "Uzvrati poziv"
612msgstr "Uzvrati poziv"
@@ -433,32 +615,12 @@ msgstr "Uzvrati poziv"
433msgid "Drag using 3 fingers any application from one window to the other"
615msgid "Drag using 3 fingers any application from one window to the other"
434msgstr ""
616msgstr ""
435
617
436−#: qml/Tutorial/TutorialBottom.qml:78
437−msgid "Swipe up to add a contact"
438−msgstr ""
439−
440−#: qml/Tutorial/TutorialBottom.qml:80
441−msgid "Swipe up for favorite calculations"
442−msgstr ""
443−
444−#: qml/Tutorial/TutorialBottom.qml:82
445−msgid "Swipe up for recent calls"
446−msgstr ""
447−
448−#: qml/Tutorial/TutorialBottom.qml:84
449−msgid "Swipe up to create a message"
450−msgstr ""
451−
452−#: qml/Tutorial/TutorialBottom.qml:85
453−msgid "Swipe up to manage the app"
454−msgstr ""
455−
456−#: qml/Tutorial/TutorialLeftLong.qml:47
618+#: qml/Tutorial/TutorialLeftLong.qml:49
457msgid "Long swipe from the left edge to open the Today scope"
619msgid "Long swipe from the left edge to open the Today scope"
458msgstr ""
620msgstr ""
459
621
460#: qml/Tutorial/TutorialLeft.qml:47
622#: qml/Tutorial/TutorialLeft.qml:47
461−msgid "Swipe from the left edge to open the launcher"
623+msgid "Short swipe from the left edge to open the launcher"
462msgstr ""
624msgstr ""
463
625
464#: qml/Tutorial/TutorialRight.qml:55
626#: qml/Tutorial/TutorialRight.qml:55
@@ -466,15 +628,11 @@ msgid "Push your mouse against the right edge to view your open apps"
466msgstr ""
628msgstr ""
467
629
468#: qml/Tutorial/TutorialRight.qml:56
630#: qml/Tutorial/TutorialRight.qml:56
469−msgid "Short or long swipe from the right edge to view your open apps"
631+msgid "Swipe from the right edge to view your open apps"
470msgstr ""
632msgstr ""
471
633
472#: qml/Tutorial/TutorialTop.qml:53
634#: qml/Tutorial/TutorialTop.qml:53
473−msgid "Swipe from the top right edge to open the notification bar"
635+msgid "Swipe from the top edge to access notifications and quick settings"
474−msgstr ""
475−
476−#: qml/Tutorial/TutorialTop.qml:54
477−msgid "Swipe from the top edge to open the notification bar"
478msgstr ""
636msgstr ""
479
637
480#: qml/Wizard/Page.qml:54
638#: qml/Wizard/Page.qml:54
@@ -486,11 +644,11 @@ msgstr "Nazad"
486msgid "Language"
644msgid "Language"
487msgstr ""
645msgstr ""
488
646
489−#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
647+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
490−#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
648+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
491#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
649#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
492#: qml/Wizard/Pages/75-report-check.qml:84
650#: qml/Wizard/Pages/75-report-check.qml:84
493−#: qml/Wizard/Pages/passcode-desktop.qml:124
651+#: qml/Wizard/Pages/passcode-desktop.qml:141
494#: qml/Wizard/Pages/password-set.qml:141
652#: qml/Wizard/Pages/password-set.qml:141
495msgid "Next"
653msgid "Next"
496msgstr ""
654msgstr ""
@@ -552,7 +710,7 @@ msgstr ""
552msgid "Time Zone"
710msgid "Time Zone"
553msgstr ""
711msgstr ""
554
712
555−#: qml/Wizard/Pages/50-timezone.qml:178
713+#: qml/Wizard/Pages/50-timezone.qml:181
556msgid "Enter your city"
714msgid "Enter your city"
557msgstr ""
715msgstr ""
558
716
@@ -642,7 +800,7 @@ msgid "Service Terms"
642msgstr ""
800msgstr ""
643
801
644#: qml/Wizard/Pages/passcode-confirm.qml:43
802#: qml/Wizard/Pages/passcode-confirm.qml:43
645−#: qml/Wizard/Pages/passcode-desktop.qml:80
803+#: qml/Wizard/Pages/passcode-desktop.qml:96
646msgid "Confirm passcode"
804msgid "Confirm passcode"
647msgstr "Potvrdi pristupni kod"
805msgstr "Potvrdi pristupni kod"
648
806
@@ -659,24 +817,24 @@ msgstr ""
659msgid "Lock Screen Passcode"
817msgid "Lock Screen Passcode"
660msgstr ""
818msgstr ""
661
819
662−#: qml/Wizard/Pages/passcode-desktop.qml:56
820+#: qml/Wizard/Pages/passcode-desktop.qml:60
663msgid "Enter 4 numbers to setup your passcode"
821msgid "Enter 4 numbers to setup your passcode"
664msgstr ""
822msgstr ""
665
823
666−#: qml/Wizard/Pages/passcode-desktop.qml:65
824+#: qml/Wizard/Pages/passcode-desktop.qml:76
667#: qml/Wizard/Pages/passcode-set.qml:54
825#: qml/Wizard/Pages/passcode-set.qml:54
668msgid "Choose passcode"
826msgid "Choose passcode"
669msgstr ""
827msgstr ""
670
828
671−#: qml/Wizard/Pages/passcode-desktop.qml:105
829+#: qml/Wizard/Pages/passcode-desktop.qml:126
672msgid "Passcode too short"
830msgid "Passcode too short"
673msgstr ""
831msgstr ""
674
832
675−#: qml/Wizard/Pages/passcode-desktop.qml:107
833+#: qml/Wizard/Pages/passcode-desktop.qml:128
676msgid "Passcodes match"
834msgid "Passcodes match"
677msgstr ""
835msgstr ""
678
836
679−#: qml/Wizard/Pages/passcode-desktop.qml:109
837+#: qml/Wizard/Pages/passcode-desktop.qml:130
680msgid "Passcodes do not match"
838msgid "Passcodes do not match"
681msgstr ""
839msgstr ""
682
840
@@ -725,26 +883,30 @@ msgid "To proceed with no SIM tap Skip."
725msgstr ""
883msgstr ""
726
884
727#: qml/Wizard/PasswordMeter.qml:87
885#: qml/Wizard/PasswordMeter.qml:87
728−msgid "Passwords match"
886+msgid "Password too short"
729msgstr ""
887msgstr ""
730
888
731#: qml/Wizard/PasswordMeter.qml:89
889#: qml/Wizard/PasswordMeter.qml:89
890+msgid "Passwords match"
891+msgstr ""
892+
893+#: qml/Wizard/PasswordMeter.qml:91
732msgid "Passwords do not match"
894msgid "Passwords do not match"
733msgstr ""
895msgstr ""
734
896
735−#: qml/Wizard/PasswordMeter.qml:93
897+#: qml/Wizard/PasswordMeter.qml:95
736msgid "Strong password"
898msgid "Strong password"
737msgstr ""
899msgstr ""
738
900
739−#: qml/Wizard/PasswordMeter.qml:95
901+#: qml/Wizard/PasswordMeter.qml:97
740msgid "Fair password"
902msgid "Fair password"
741msgstr ""
903msgstr ""
742
904
743−#: qml/Wizard/PasswordMeter.qml:97
905+#: qml/Wizard/PasswordMeter.qml:99
744msgid "Weak password"
906msgid "Weak password"
745msgstr ""
907msgstr ""
746
908
747−#: qml/Wizard/PasswordMeter.qml:99
909+#: qml/Wizard/PasswordMeter.qml:101
748msgid "Very weak password"
910msgid "Very weak password"
749msgstr ""
911msgstr ""
750
912
@@ -773,6 +935,9 @@ msgstr ""
773#~ msgid "See less"
935#~ msgid "See less"
774#~ msgstr "Pogledati manje"
936#~ msgstr "Pogledati manje"
775
937
938+#~ msgid "Tap to unlock"
939+#~ msgstr "Kucnite za otključavanje"
940+
776#~ msgid "Please re-enter"
941#~ msgid "Please re-enter"
777#~ msgstr "Molimo ponovo unesite"
942#~ msgstr "Molimo ponovo unesite"
778
943
po/ca.po+367−153
@@ -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-05-18 11:19+0000\n"
10+"POT-Creation-Date: 2016-07-11 17:24+0000\n"
11"PO-Revision-Date: 2015-07-04 09:48+0000\n"
11"PO-Revision-Date: 2015-07-04 09:48+0000\n"
12"Last-Translator: David Planella <david.planella@ubuntu.com>\n"
12"Last-Translator: David Planella <david.planella@ubuntu.com>\n"
13"Language-Team: Catalan <ca@li.org>\n"
13"Language-Team: Catalan <ca@li.org>\n"
@@ -15,43 +15,43 @@ 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-05-19 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2016-07-14 06:01+0000\n"
19−"X-Generator: Launchpad (build 18025)\n"
19+"X-Generator: Launchpad (build 18115)\n"
20
20
21−#: plugins/IntegratedLightDM/Greeter.cpp:112
21+#: plugins/LightDM/Greeter.cpp:123
22msgid "Password: "
22msgid "Password: "
23msgstr "Contrasenya: "
23msgstr "Contrasenya: "
24
24
25−#: plugins/Unity/Launcher/launcheritem.cpp:48
25+#: plugins/Unity/Launcher/launcheritem.cpp:49
26−#: plugins/Unity/Launcher/launcheritem.cpp:107
26+#: plugins/Unity/Launcher/launcheritem.cpp:108
27msgid "Pin shortcut"
27msgid "Pin shortcut"
28msgstr "Enganxa la drecera"
28msgstr "Enganxa la drecera"
29
29
30−#: plugins/Unity/Launcher/launcheritem.cpp:53
30+#: plugins/Unity/Launcher/launcheritem.cpp:54
31msgid "Quit"
31msgid "Quit"
32msgstr "Surt"
32msgstr "Surt"
33
33
34−#: plugins/Unity/Launcher/launcheritem.cpp:107
34+#: plugins/Unity/Launcher/launcheritem.cpp:108
35msgid "Unpin shortcut"
35msgid "Unpin shortcut"
36msgstr "Desenganxa la drecera"
36msgstr "Desenganxa la drecera"
37
37
38−#: qml/Components/DelayedLockscreen.qml:49
38+#: qml/Components/DelayedLockscreen.qml:50
39msgid "Device Locked"
39msgid "Device Locked"
40msgstr "Dispositiu bloquejat"
40msgstr "Dispositiu bloquejat"
41
41
42−#: qml/Components/DelayedLockscreen.qml:64
42+#: qml/Components/DelayedLockscreen.qml:65
43msgid "You have been locked out due to too many failed passphrase attempts."
43msgid "You have been locked out due to too many failed passphrase attempts."
44msgstr ""
44msgstr ""
45"Se us ha bloquejat l'accés al dispositiu. Heu sobrepassat el nombre "
45"Se us ha bloquejat l'accés al dispositiu. Heu sobrepassat el nombre "
46"d'intents d'introducció de la contrasenya."
46"d'intents d'introducció de la contrasenya."
47
47
48−#: qml/Components/DelayedLockscreen.qml:65
48+#: qml/Components/DelayedLockscreen.qml:66
49msgid "You have been locked out due to too many failed passcode attempts."
49msgid "You have been locked out due to too many failed passcode attempts."
50msgstr ""
50msgstr ""
51"Se us ha bloquejat l'accés al dispositiu. Heu sobrepassat el nombre "
51"Se us ha bloquejat l'accés al dispositiu. Heu sobrepassat el nombre "
52"d'intents d'introducció del codi d'accés."
52"d'intents d'introducció del codi d'accés."
53
53
54−#: qml/Components/DelayedLockscreen.qml:74
54+#: qml/Components/DelayedLockscreen.qml:75
55#, qt-format
55#, qt-format
56msgid "Please wait %1 minute and then try again…"
56msgid "Please wait %1 minute and then try again…"
57msgid_plural "Please wait %1 minutes and then try again…"
57msgid_plural "Please wait %1 minutes and then try again…"
@@ -78,7 +78,7 @@ msgid "Log Out"
78msgstr "Surt"
78msgstr "Surt"
79
79
80#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
80#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
81−#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
81+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
82#: qml/Wizard/Pages/passcode-set.qml:32
82#: qml/Wizard/Pages/passcode-set.qml:32
83msgid "Cancel"
83msgid "Cancel"
84msgstr "Cancel·la"
84msgstr "Cancel·la"
@@ -123,18 +123,188 @@ msgctxt "Button: Restart the system"
123msgid "Restart"
123msgid "Restart"
124msgstr "Reinicia"
124msgstr "Reinicia"
125
125
126+#: qml/Components/KeyboardShortcutsOverlay.qml:41
127+msgid "Keyboard Shortcuts"
128+msgstr ""
129+
130+#: qml/Components/KeyboardShortcutsOverlay.qml:55
131+msgid "Unity 8"
132+msgstr ""
133+
134+#: qml/Components/KeyboardShortcutsOverlay.qml:62
135+msgid "PrtScr"
136+msgstr ""
137+
138+#: qml/Components/KeyboardShortcutsOverlay.qml:67
139+msgid "Takes a screenshot."
140+msgstr ""
141+
142+#: qml/Components/KeyboardShortcutsOverlay.qml:75
143+msgid "Alt + PrtScr"
144+msgstr ""
145+
146+#: qml/Components/KeyboardShortcutsOverlay.qml:80
147+msgid "Takes a screenshot of a window."
148+msgstr ""
149+
150+#: qml/Components/KeyboardShortcutsOverlay.qml:88
151+msgid "Super + Space"
152+msgstr ""
153+
154+#: qml/Components/KeyboardShortcutsOverlay.qml:93
155+msgid "Switches to next keyboard layout."
156+msgstr ""
157+
158+#: qml/Components/KeyboardShortcutsOverlay.qml:101
159+msgid "Super + Shift + Space"
160+msgstr ""
161+
162+#: qml/Components/KeyboardShortcutsOverlay.qml:106
163+msgid "Switches to previous keyboard layout."
164+msgstr ""
165+
166+#: qml/Components/KeyboardShortcutsOverlay.qml:118
167+msgid "Launcher"
168+msgstr ""
169+
170+#: qml/Components/KeyboardShortcutsOverlay.qml:125
171+msgid "Super (Hold)"
172+msgstr ""
173+
174+#: qml/Components/KeyboardShortcutsOverlay.qml:130
175+msgid "Opens the launcher, displays shortcuts."
176+msgstr ""
177+
178+#: qml/Components/KeyboardShortcutsOverlay.qml:138
179+msgid "Alt + F1"
180+msgstr ""
181+
182+#: qml/Components/KeyboardShortcutsOverlay.qml:143
183+msgid "Opens launcher keyboard navigation mode."
184+msgstr ""
185+
186+#: qml/Components/KeyboardShortcutsOverlay.qml:151
187+msgid "Super + Tab"
188+msgstr ""
189+
190+#: qml/Components/KeyboardShortcutsOverlay.qml:156
191+msgid "Switches applications via the launcher."
192+msgstr ""
193+
194+#: qml/Components/KeyboardShortcutsOverlay.qml:164
195+msgid "Super + 0 to 9"
196+msgstr ""
197+
198+#: qml/Components/KeyboardShortcutsOverlay.qml:169
199+msgid "Same as clicking on a launcher icon."
200+msgstr ""
201+
202+#: qml/Components/KeyboardShortcutsOverlay.qml:181
203+msgid "Scopes"
204+msgstr ""
205+
206+#: qml/Components/KeyboardShortcutsOverlay.qml:188
207+msgid "Super (Tap)"
208+msgstr ""
209+
210+#: qml/Components/KeyboardShortcutsOverlay.qml:193
211+msgid "Opens the Scopes home."
212+msgstr ""
213+
214+#: qml/Components/KeyboardShortcutsOverlay.qml:209
215+msgid "Switching"
216+msgstr ""
217+
218+#: qml/Components/KeyboardShortcutsOverlay.qml:216
219+msgid "Alt + Tab"
220+msgstr ""
221+
222+#: qml/Components/KeyboardShortcutsOverlay.qml:221
223+msgid "Switches between applications."
224+msgstr ""
225+
226+#: qml/Components/KeyboardShortcutsOverlay.qml:229
227+msgid "Super + W"
228+msgstr ""
229+
230+#: qml/Components/KeyboardShortcutsOverlay.qml:234
231+msgid "Opens the desktop spread."
232+msgstr ""
233+
234+#: qml/Components/KeyboardShortcutsOverlay.qml:242
235+msgid "Cursor Left or Right"
236+msgstr ""
237+
238+#: qml/Components/KeyboardShortcutsOverlay.qml:247
239+msgid "Moves the focus."
240+msgstr ""
241+
242+#: qml/Components/KeyboardShortcutsOverlay.qml:259
243+msgid "Windows"
244+msgstr ""
245+
246+#: qml/Components/KeyboardShortcutsOverlay.qml:266
247+msgid "Ctrl + Super + D"
248+msgstr ""
249+
250+#: qml/Components/KeyboardShortcutsOverlay.qml:271
251+msgid "Minimizes all windows."
252+msgstr ""
253+
254+#: qml/Components/KeyboardShortcutsOverlay.qml:279
255+msgid "Ctrl + Super + Up"
256+msgstr ""
257+
258+#: qml/Components/KeyboardShortcutsOverlay.qml:284
259+msgid "Maximizes the current window."
260+msgstr ""
261+
262+#: qml/Components/KeyboardShortcutsOverlay.qml:292
263+msgid "Ctrl + Super + Down"
264+msgstr ""
265+
266+#: qml/Components/KeyboardShortcutsOverlay.qml:297
267+msgid "Minimizes or restores the current window."
268+msgstr ""
269+
270+#: qml/Components/KeyboardShortcutsOverlay.qml:305
271+msgid "Ctrl + Super + Left or Right"
272+msgstr ""
273+
274+#: qml/Components/KeyboardShortcutsOverlay.qml:310
275+msgid "Semi-maximizes the current window."
276+msgstr ""
277+
278+#: qml/Components/KeyboardShortcutsOverlay.qml:318
279+msgid "Alt + F4"
280+msgstr ""
281+
282+#: qml/Components/KeyboardShortcutsOverlay.qml:323
283+msgid "Closes the current window."
284+msgstr ""
285+
126−#: qml/Components/Lockscreen.qml:231
286+#: qml/Components/Lockscreen.qml:239
127msgid "Return to Call"
287msgid "Return to Call"
128msgstr "Torna a la trucada"
288msgstr "Torna a la trucada"
129
289
130−#: qml/Components/Lockscreen.qml:231
290+#: qml/Components/Lockscreen.qml:239
131msgid "Emergency Call"
291msgid "Emergency Call"
132msgstr "Trucada d'emergència"
292msgstr "Trucada d'emergència"
133
293
134−#: qml/Components/Lockscreen.qml:263
294+#: qml/Components/Lockscreen.qml:271
135msgid "OK"
295msgid "OK"
136msgstr "D'acord"
296msgstr "D'acord"
137
297
298+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
299+#, qt-format
300+msgid "%1:%2:%3"
301+msgstr ""
302+
303+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
304+#, qt-format
305+msgid "%1:%2"
306+msgstr ""
307+
138#: qml/Components/ModeSwitchWarningDialog.qml:32
308#: qml/Components/ModeSwitchWarningDialog.qml:32
139msgid "Apps may have unsaved data:"
309msgid "Apps may have unsaved data:"
140msgstr "Pot ser que aquestes aplicacions no hagin desat les dades:"
310msgstr "Pot ser que aquestes aplicacions no hagin desat les dades:"
@@ -144,6 +314,8 @@ msgctxt ""
144"Re-dock means connect the device again to an external screen/mouse/keyboard"
314"Re-dock means connect the device again to an external screen/mouse/keyboard"
145msgid "Re-dock, save your work and close these apps to continue."
315msgid "Re-dock, save your work and close these apps to continue."
146msgstr ""
316msgstr ""
317+"Torneu a acoblar, deseu la vostra feina i tanqueu aquestes aplicacions abans "
318+"de continuar."
147
319
148#: qml/Components/ModeSwitchWarningDialog.qml:63
320#: qml/Components/ModeSwitchWarningDialog.qml:63
149msgid "Or force close now (unsaved data will be lost)."
321msgid "Or force close now (unsaved data will be lost)."
@@ -161,55 +333,59 @@ msgstr "Torna a connectar"
161msgid "Close all"
333msgid "Close all"
162msgstr "Tanca-ho tot"
334msgstr "Tanca-ho tot"
163
335
336+#: qml/Components/SharingPicker.qml:54
337+msgid "Preview Share Item"
338+msgstr "Previsualitzeu l'element a compartir"
339+
164−#: qml/Dash/DashPageHeader.qml:337
340+#: qml/Dash/DashPageHeader.qml:333
165msgctxt "Button: Open the Ubuntu Store"
341msgctxt "Button: Open the Ubuntu Store"
166msgid "Store"
342msgid "Store"
167msgstr "Botiga"
343msgstr "Botiga"
168
344
169−#: qml/Dash/DashPageHeader.qml:344
345+#: qml/Dash/DashPageHeader.qml:340
170msgctxt "Button: Start a search in the current dash scope"
346msgctxt "Button: Start a search in the current dash scope"
171msgid "Search"
347msgid "Search"
172msgstr "Cerca"
348msgstr "Cerca"
173
349
174−#: qml/Dash/DashPageHeader.qml:354
350+#: qml/Dash/DashPageHeader.qml:350
175msgctxt "Button: Show the current dash scope settings"
351msgctxt "Button: Show the current dash scope settings"
176msgid "Settings"
352msgid "Settings"
177msgstr "Paràmetres"
353msgstr "Paràmetres"
178
354
179−#: qml/Dash/DashPageHeader.qml:361
355+#: qml/Dash/DashPageHeader.qml:357
180msgid "Remove from Favorites"
356msgid "Remove from Favorites"
181msgstr "Suprimeix dels preferits"
357msgstr "Suprimeix dels preferits"
182
358
183−#: qml/Dash/DashPageHeader.qml:361
359+#: qml/Dash/DashPageHeader.qml:357
184msgid "Add to Favorites"
360msgid "Add to Favorites"
185msgstr "Afegeix als preferits"
361msgstr "Afegeix als preferits"
186
362
187#: qml/Dash/FiltersPopover.qml:60
363#: qml/Dash/FiltersPopover.qml:60
188msgid "Refine your results"
364msgid "Refine your results"
189−msgstr ""
365+msgstr "Refineu els resultats"
190
366
191#: qml/Dash/FiltersPopover.qml:69
367#: qml/Dash/FiltersPopover.qml:69
192msgid "Reset"
368msgid "Reset"
193−msgstr ""
369+msgstr "Restableix"
194
370
195−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:764
371+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
196msgid "Show less"
372msgid "Show less"
197msgstr ""
373msgstr ""
198
374
199−#: qml/Dash/GenericScopeView.qml:579
375+#: qml/Dash/GenericScopeView.qml:580
200msgid "Show all"
376msgid "Show all"
201msgstr ""
377msgstr ""
202
378
203−#: qml/Dash/GenericScopeView.qml:636
379+#: qml/Dash/GenericScopeView.qml:637
204msgctxt "Label: Hint for dash search line edit"
380msgctxt "Label: Hint for dash search line edit"
205msgid "Search"
381msgid "Search"
206msgstr "Cerca"
382msgstr "Cerca"
207
383
208−#: qml/Dash/PageHeaderExtraPanel.qml:55
384+#: qml/Dash/PageHeaderExtraPanel.qml:56
209msgid "Recent Searches"
385msgid "Recent Searches"
210msgstr "Cerques recents"
386msgstr "Cerques recents"
211
387
212−#: qml/Dash/PageHeaderExtraPanel.qml:66
388+#: qml/Dash/PageHeaderExtraPanel.qml:67
213msgid "Clear All"
389msgid "Clear All"
214msgstr "Neteja-ho tot"
390msgstr "Neteja-ho tot"
215
391
@@ -222,22 +398,18 @@ msgid "Less..."
222msgstr "Menys..."
398msgstr "Menys..."
223
399
224#: qml/Dash/Previews/PreviewCommentInput.qml:68
400#: qml/Dash/Previews/PreviewCommentInput.qml:68
225−#: qml/Dash/Previews/PreviewRatingInput.qml:174
401+#: qml/Dash/Previews/PreviewRatingInput.qml:175
226msgid "Send"
402msgid "Send"
227msgstr "Envia"
403msgstr "Envia"
228
404
229−#: qml/Dash/Previews/PreviewRatingInput.qml:84
405+#: qml/Dash/Previews/PreviewRatingInput.qml:82
230msgid "Rate this"
406msgid "Rate this"
231msgstr "Puntueu-ho"
407msgstr "Puntueu-ho"
232
408
233−#: qml/Dash/Previews/PreviewRatingInput.qml:129
409+#: qml/Dash/Previews/PreviewRatingInput.qml:157
234msgid "Add a review"
410msgid "Add a review"
235msgstr "Afegiu una ressenya"
411msgstr "Afegiu una ressenya"
236
412
237−#: qml/Dash/Previews/PreviewSharing.qml:66
238−msgid "Preview Share Item"
239−msgstr ""
240−
241#: qml/Dash/PullToRefreshScopeStyle.qml:55
413#: qml/Dash/PullToRefreshScopeStyle.qml:55
242msgid "Pull to refresh…"
414msgid "Pull to refresh…"
243msgstr "Estireu per actualitzar..."
415msgstr "Estireu per actualitzar..."
@@ -250,49 +422,63 @@ msgstr "Deixeu anar per actualitzar..."
250msgid "Enable location data"
422msgid "Enable location data"
251msgstr "Habilita les dades d'ubicació"
423msgstr "Habilita les dades d'ubicació"
252
424
253−#: qml/Dash/ScopesList.qml:67
425+#: qml/Dash/ScopesList.qml:55
254msgid "Manage"
426msgid "Manage"
255msgstr "Gestiona"
427msgstr "Gestiona"
256
428
257−#: qml/Dash/ScopesList.qml:113
429+#: qml/Dash/ScopesList.qml:102
258msgid "Home"
430msgid "Home"
259msgstr "Inici"
431msgstr "Inici"
260
432
261−#: qml/Dash/ScopesList.qml:114
433+#: qml/Dash/ScopesList.qml:103
262msgid "Also installed"
434msgid "Also installed"
263msgstr "També instal·lat"
435msgstr "També instal·lat"
264
436
265−#: qml/DisabledScreenNotice.qml:104
437+#: qml/DisabledScreenNotice.qml:109
266msgid ""
438msgid ""
267"Your device is now connected to an external display. Use this screen as a "
439"Your device is now connected to an external display. Use this screen as a "
268"touch pad to interact with the pointer."
440"touch pad to interact with the pointer."
269msgstr ""
441msgstr ""
442+"El vostre dispositiu està ara connectat a un monitor extern. Useu aquesta "
443+"pantalla com a ratolí tàctil per interaccionar amb el cursor."
270
444
271−#: qml/Greeter/CoverPage.qml:118
445+#: qml/Greeter/CoverPage.qml:127
272msgid "Unlock"
446msgid "Unlock"
273msgstr "Desbloca"
447msgstr "Desbloca"
274
448
449+#: qml/Greeter/Greeter.qml:555
450+msgid "Try again"
451+msgstr ""
452+
275−#: qml/Greeter/LoginList.qml:239
453+#: qml/Greeter/LoginList.qml:63
454+msgid "Passphrase"
455+msgstr ""
456+
457+#: qml/Greeter/LoginList.qml:64
458+msgid "Passcode"
459+msgstr ""
460+
461+#: qml/Greeter/LoginList.qml:87
276msgid "Retry"
462msgid "Retry"
277msgstr "Torna-ho a provar"
463msgstr "Torna-ho a provar"
278
464
279−#: qml/Greeter/LoginList.qml:240
465+#: qml/Greeter/LoginList.qml:88
280−msgid "Tap to unlock"
466+msgid "Log In"
281−msgstr "Feu un toc per desblocar"
467+msgstr ""
282
468
283−#: qml/Greeter/NarrowView.qml:54
469+#: qml/Greeter/NarrowView.qml:55
284msgid "Sorry, incorrect passphrase."
470msgid "Sorry, incorrect passphrase."
285msgstr "La contrasenya és incorrecta"
471msgstr "La contrasenya és incorrecta"
286
472
287−#: qml/Greeter/NarrowView.qml:55
473+#: qml/Greeter/NarrowView.qml:56
288msgid "Sorry, incorrect passcode."
474msgid "Sorry, incorrect passcode."
289msgstr "El codi d'accés no és correcte"
475msgstr "El codi d'accés no és correcte"
290
476
291−#: qml/Greeter/NarrowView.qml:56
477+#: qml/Greeter/NarrowView.qml:57
292msgid "This will be your last attempt."
478msgid "This will be your last attempt."
293msgstr "Aquest serà el darrer intent."
479msgstr "Aquest serà el darrer intent."
294
480
295−#: qml/Greeter/NarrowView.qml:58
481+#: qml/Greeter/NarrowView.qml:59
296msgid ""
482msgid ""
297"If passphrase is entered incorrectly, your phone will conduct a factory "
483"If passphrase is entered incorrectly, your phone will conduct a factory "
298"reset and all personal data will be deleted."
484"reset and all personal data will be deleted."
@@ -301,7 +487,7 @@ msgstr ""
301"reinicialitzarà a l'estat de fàbrica i se suprimiran totes les dades "
487"reinicialitzarà a l'estat de fàbrica i se suprimiran totes les dades "
302"personals."
488"personals."
303
489
304−#: qml/Greeter/NarrowView.qml:59
490+#: qml/Greeter/NarrowView.qml:60
305msgid ""
491msgid ""
306"If passcode is entered incorrectly, your phone will conduct a factory reset "
492"If passcode is entered incorrectly, your phone will conduct a factory reset "
307"and all personal data will be deleted."
493"and all personal data will be deleted."
@@ -310,34 +496,34 @@ msgstr ""
310"reinicialitzarà a l'estat de fàbrica i se suprimiran totes les dades "
496"reinicialitzarà a l'estat de fàbrica i se suprimiran totes les dades "
311"personals."
497"personals."
312
498
313−#: qml/Greeter/NarrowView.qml:116
499+#: qml/Greeter/NarrowView.qml:129
314#, qt-format
500#, qt-format
315msgid "Enter %1"
501msgid "Enter %1"
316msgstr "Introduïu: %1"
502msgstr "Introduïu: %1"
317
503
318−#: qml/Greeter/NarrowView.qml:117
504+#: qml/Greeter/NarrowView.qml:130
319msgid "Enter passphrase"
505msgid "Enter passphrase"
320msgstr "Introduïu la contrasenya"
506msgstr "Introduïu la contrasenya"
321
507
322−#: qml/Greeter/NarrowView.qml:118
508+#: qml/Greeter/NarrowView.qml:131
323msgid "Enter passcode"
509msgid "Enter passcode"
324msgstr "Introduïu el codi d'accés"
510msgstr "Introduïu el codi d'accés"
325
511
326−#: qml/Greeter/NarrowView.qml:119
512+#: qml/Greeter/NarrowView.qml:135
327#, qt-format
513#, qt-format
328msgid "Sorry, incorrect %1"
514msgid "Sorry, incorrect %1"
329msgstr "Incorrecte (%1)"
515msgstr "Incorrecte (%1)"
330
516
331−#: qml/Greeter/NarrowView.qml:120
517+#: qml/Greeter/NarrowView.qml:136
332msgid "Sorry, incorrect passphrase"
518msgid "Sorry, incorrect passphrase"
333msgstr "La contrasenya no és correcta"
519msgstr "La contrasenya no és correcta"
334
520
335−#: qml/Greeter/NarrowView.qml:121
521+#: qml/Greeter/NarrowView.qml:137
336msgctxt "passphrase"
522msgctxt "passphrase"
337msgid "Please re-enter"
523msgid "Please re-enter"
338msgstr "Torneu-ho a introduir"
524msgstr "Torneu-ho a introduir"
339
525
340−#: qml/Greeter/NarrowView.qml:122
526+#: qml/Greeter/NarrowView.qml:138
341msgid "Sorry, incorrect passcode"
527msgid "Sorry, incorrect passcode"
342msgstr "El codi d'accés no és correcte"
528msgstr "El codi d'accés no és correcte"
343
529
@@ -412,18 +598,18 @@ msgstr "S'ha finalitzat"
412msgid "Failed, tap to retry"
598msgid "Failed, tap to retry"
413msgstr "Ha fallat, feu un toc per tornar-ho a intentar"
599msgstr "Ha fallat, feu un toc per tornar-ho a intentar"
414
600
415−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
601+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
416−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
602+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
417msgctxt "Button: Send a reply message"
603msgctxt "Button: Send a reply message"
418msgid "Send"
604msgid "Send"
419msgstr "Envia"
605msgstr "Envia"
420
606
421−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
607+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
422msgctxt "Label: Hint in message indicator line edit"
608msgctxt "Label: Hint in message indicator line edit"
423msgid "Reply"
609msgid "Reply"
424msgstr "Respon"
610msgstr "Respon"
425
611
426−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
612+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
427msgctxt "Button: Call back on phone"
613msgctxt "Button: Call back on phone"
428msgid "Call back"
614msgid "Call back"
429msgstr "Retorna la trucada"
615msgstr "Retorna la trucada"
@@ -431,33 +617,15 @@ msgstr "Retorna la trucada"
431#: qml/Stages/SideStage.qml:76
617#: qml/Stages/SideStage.qml:76
432msgid "Drag using 3 fingers any application from one window to the other"
618msgid "Drag using 3 fingers any application from one window to the other"
433msgstr ""
619msgstr ""
620+"Arrossegueu usant 3 dits qualsevol aplicació d'una finestra a una altra"
434
621
435−#: qml/Tutorial/TutorialBottom.qml:78
436−msgid "Swipe up to add a contact"
437−msgstr ""
438−
439−#: qml/Tutorial/TutorialBottom.qml:80
440−msgid "Swipe up for favorite calculations"
441−msgstr ""
442−
443−#: qml/Tutorial/TutorialBottom.qml:82
444−msgid "Swipe up for recent calls"
445−msgstr ""
446−
447−#: qml/Tutorial/TutorialBottom.qml:84
448−msgid "Swipe up to create a message"
449−msgstr ""
450−
451−#: qml/Tutorial/TutorialBottom.qml:85
452−msgid "Swipe up to manage the app"
453−msgstr ""
454−
455−#: qml/Tutorial/TutorialLeftLong.qml:47
622+#: qml/Tutorial/TutorialLeftLong.qml:49
456msgid "Long swipe from the left edge to open the Today scope"
623msgid "Long swipe from the left edge to open the Today scope"
457msgstr ""
624msgstr ""
625+"Feu una lliscada llarga des de la vora esquerra per obrir l'àmbit Avui"
458
626
459#: qml/Tutorial/TutorialLeft.qml:47
627#: qml/Tutorial/TutorialLeft.qml:47
460−msgid "Swipe from the left edge to open the launcher"
628+msgid "Short swipe from the left edge to open the launcher"
461msgstr ""
629msgstr ""
462
630
463#: qml/Tutorial/TutorialRight.qml:55
631#: qml/Tutorial/TutorialRight.qml:55
@@ -465,15 +633,11 @@ msgid "Push your mouse against the right edge to view your open apps"
465msgstr ""
633msgstr ""
466
634
467#: qml/Tutorial/TutorialRight.qml:56
635#: qml/Tutorial/TutorialRight.qml:56
468−msgid "Short or long swipe from the right edge to view your open apps"
636+msgid "Swipe from the right edge to view your open apps"
469msgstr ""
637msgstr ""
470
638
471#: qml/Tutorial/TutorialTop.qml:53
639#: qml/Tutorial/TutorialTop.qml:53
472−msgid "Swipe from the top right edge to open the notification bar"
640+msgid "Swipe from the top edge to access notifications and quick settings"
473−msgstr ""
474−
475−#: qml/Tutorial/TutorialTop.qml:54
476−msgid "Swipe from the top edge to open the notification bar"
477msgstr ""
641msgstr ""
478
642
479#: qml/Wizard/Page.qml:54
643#: qml/Wizard/Page.qml:54
@@ -483,16 +647,16 @@ msgstr "Enrere"
483
647
484#: qml/Wizard/Pages/10-welcome.qml:27
648#: qml/Wizard/Pages/10-welcome.qml:27
485msgid "Language"
649msgid "Language"
486−msgstr ""
650+msgstr "Llengua"
487
651
488−#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
652+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
489−#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
653+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
490#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
654#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
491#: qml/Wizard/Pages/75-report-check.qml:84
655#: qml/Wizard/Pages/75-report-check.qml:84
492−#: qml/Wizard/Pages/passcode-desktop.qml:124
656+#: qml/Wizard/Pages/passcode-desktop.qml:141
493#: qml/Wizard/Pages/password-set.qml:141
657#: qml/Wizard/Pages/password-set.qml:141
494msgid "Next"
658msgid "Next"
495−msgstr ""
659+msgstr "Següent"
496
660
497#: qml/Wizard/Pages/30-wifi.qml:29
661#: qml/Wizard/Pages/30-wifi.qml:29
498msgid "Connect to Wi‑Fi"
662msgid "Connect to Wi‑Fi"
@@ -500,15 +664,15 @@ msgstr "Connecta't a la Wi-Fi"
500
664
501#: qml/Wizard/Pages/30-wifi.qml:130
665#: qml/Wizard/Pages/30-wifi.qml:130
502msgid "Connected"
666msgid "Connected"
503−msgstr ""
667+msgstr "Connectat"
504
668
505#: qml/Wizard/Pages/30-wifi.qml:163
669#: qml/Wizard/Pages/30-wifi.qml:163
506msgid "Available Wi-Fi networks"
670msgid "Available Wi-Fi networks"
507−msgstr ""
671+msgstr "Xarxes Wi-Fi disponibles"
508
672
509#: qml/Wizard/Pages/30-wifi.qml:164
673#: qml/Wizard/Pages/30-wifi.qml:164
510msgid "No available Wi-Fi networks"
674msgid "No available Wi-Fi networks"
511−msgstr ""
675+msgstr "No hi ha xarxes Wi-Fi disponibles"
512
676
513#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
677#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
514#: qml/Wizard/Pages/sim.qml:101
678#: qml/Wizard/Pages/sim.qml:101
@@ -517,98 +681,101 @@ msgstr "Omet"
517
681
518#: qml/Wizard/Pages/40-location.qml:27
682#: qml/Wizard/Pages/40-location.qml:27
519msgid "Location Services"
683msgid "Location Services"
520−msgstr ""
684+msgstr "Serveis d'ubicació"
521
685
522#: qml/Wizard/Pages/40-location.qml:83
686#: qml/Wizard/Pages/40-location.qml:83
523msgid ""
687msgid ""
524"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
688"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
525"(recommended)"
689"(recommended)"
526msgstr ""
690msgstr ""
691+"Usa anònimament el GPS, punts d'accés Wi-Fi i la xarxa mòbil per detectar la "
692+"ubicació (recomanat)"
527
693
528#: qml/Wizard/Pages/40-location.qml:105
694#: qml/Wizard/Pages/40-location.qml:105
529#, qt-format
695#, qt-format
530msgid "By selecting this option you agree to the Nokia HERE %1."
696msgid "By selecting this option you agree to the Nokia HERE %1."
531−msgstr ""
697+msgstr "Seleccionant aquesta opció esteu d'acord amb el Nokia HERE %1."
532
698
533#: qml/Wizard/Pages/40-location.qml:106
699#: qml/Wizard/Pages/40-location.qml:106
534msgctxt "part of: Nokia HERE terms and conditions"
700msgctxt "part of: Nokia HERE terms and conditions"
535msgid "terms and conditions"
701msgid "terms and conditions"
536−msgstr ""
702+msgstr "termes i condicions"
537
703
538#: qml/Wizard/Pages/40-location.qml:160
704#: qml/Wizard/Pages/40-location.qml:160
539msgid "GPS only"
705msgid "GPS only"
540−msgstr ""
706+msgstr "Sols GPS"
541
707
542#: qml/Wizard/Pages/40-location.qml:214
708#: qml/Wizard/Pages/40-location.qml:214
543msgid "Don't use my location"
709msgid "Don't use my location"
544−msgstr ""
710+msgstr "No usis la meva ubicació"
545
711
546#: qml/Wizard/Pages/40-location.qml:260
712#: qml/Wizard/Pages/40-location.qml:260
547msgid "You can change it later in System Settings."
713msgid "You can change it later in System Settings."
548−msgstr ""
714+msgstr "Podeu canviar-ho més tard a Paràmetres del sistema."
549
715
550#: qml/Wizard/Pages/50-timezone.qml:29
716#: qml/Wizard/Pages/50-timezone.qml:29
551msgid "Time Zone"
717msgid "Time Zone"
552−msgstr ""
718+msgstr "Fus horari"
553
719
554−#: qml/Wizard/Pages/50-timezone.qml:178
720+#: qml/Wizard/Pages/50-timezone.qml:181
555msgid "Enter your city"
721msgid "Enter your city"
556−msgstr ""
722+msgstr "Entreu la vostra ciutat"
557
723
558#: qml/Wizard/Pages/60-account.qml:24
724#: qml/Wizard/Pages/60-account.qml:24
559msgid "Personalize Your Device"
725msgid "Personalize Your Device"
560−msgstr ""
726+msgstr "Personalitzeu el vostre dispositiu"
561
727
562#: qml/Wizard/Pages/60-account.qml:48
728#: qml/Wizard/Pages/60-account.qml:48
563msgid "Preferred Name"
729msgid "Preferred Name"
564−msgstr ""
730+msgstr "Nom preferit"
565
731
566#: qml/Wizard/Pages/70-passwd-type.qml:39
732#: qml/Wizard/Pages/70-passwd-type.qml:39
567msgid "Lock Screen"
733msgid "Lock Screen"
568−msgstr ""
734+msgstr "Bloca la pantalla"
569
735
570#: qml/Wizard/Pages/70-passwd-type.qml:101
736#: qml/Wizard/Pages/70-passwd-type.qml:101
571msgctxt "Label: Type of security method"
737msgctxt "Label: Type of security method"
572msgid "Create new password"
738msgid "Create new password"
573−msgstr ""
739+msgstr "Crea una contrasenya nova"
574
740
575#: qml/Wizard/Pages/70-passwd-type.qml:103
741#: qml/Wizard/Pages/70-passwd-type.qml:103
576msgctxt "Label: Type of security method"
742msgctxt "Label: Type of security method"
577msgid "Create passcode (numbers only)"
743msgid "Create passcode (numbers only)"
578−msgstr ""
744+msgstr "Creeu un codi d'accés (sols números)"
579
745
580#: qml/Wizard/Pages/70-passwd-type.qml:105
746#: qml/Wizard/Pages/70-passwd-type.qml:105
581msgctxt "Label: Type of security method"
747msgctxt "Label: Type of security method"
582msgid "No lock code"
748msgid "No lock code"
583−msgstr ""
749+msgstr "No hi ha codi de bloqueig"
584
750
585#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
751#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
586msgid "Privacy Policy"
752msgid "Privacy Policy"
587−msgstr ""
753+msgstr "Política de privacitat"
588
754
589#: qml/Wizard/Pages/75-report-check.qml:26
755#: qml/Wizard/Pages/75-report-check.qml:26
590msgid "Help Us Improve"
756msgid "Help Us Improve"
591−msgstr ""
757+msgstr "Ajudeu-nos a millorar"
592
758
593#: qml/Wizard/Pages/75-report-check.qml:59
759#: qml/Wizard/Pages/75-report-check.qml:59
594msgid "Improve system performance by sending us crashes and error reports."
760msgid "Improve system performance by sending us crashes and error reports."
595msgstr ""
761msgstr ""
762+"Milloreu el rendiment del sistema enviant-nos informes de fallades i errors."
596
763
597#: qml/Wizard/Pages/75-report-check.qml:60
764#: qml/Wizard/Pages/75-report-check.qml:60
598msgid "Privacy policy"
765msgid "Privacy policy"
599−msgstr ""
766+msgstr "Política de privacitat"
600
767
601#: qml/Wizard/Pages/80-finished.qml:89
768#: qml/Wizard/Pages/80-finished.qml:89
602msgid "Welcome to Ubuntu"
769msgid "Welcome to Ubuntu"
603−msgstr ""
770+msgstr "Us donem la benvinguda a l'Ubuntu"
604
771
605#: qml/Wizard/Pages/80-finished.qml:104
772#: qml/Wizard/Pages/80-finished.qml:104
606msgid "You are ready to use your device now"
773msgid "You are ready to use your device now"
607−msgstr ""
774+msgstr "Ara ja esteu a punt per usar el vostre dispositiu"
608
775
609#: qml/Wizard/Pages/80-finished.qml:124
776#: qml/Wizard/Pages/80-finished.qml:124
610msgid "Get Started"
777msgid "Get Started"
611−msgstr ""
778+msgstr "Introducció"
612
779
613#: qml/Wizard/Pages/here-terms.qml:25
780#: qml/Wizard/Pages/here-terms.qml:25
614msgid "Terms & Conditions"
781msgid "Terms & Conditions"
@@ -617,6 +784,7 @@ msgstr "Condicions generals"
617#: qml/Wizard/Pages/here-terms.qml:69
784#: qml/Wizard/Pages/here-terms.qml:69
618msgid "Your device uses positioning technologies provided by HERE."
785msgid "Your device uses positioning technologies provided by HERE."
619msgstr ""
786msgstr ""
787+"El vostre dispositiu usa tecnologies de posicionament proveïdes per HERE."
620
788
621#: qml/Wizard/Pages/here-terms.qml:81
789#: qml/Wizard/Pages/here-terms.qml:81
622msgid ""
790msgid ""
@@ -624,92 +792,98 @@ msgid ""
624"collects information about nearby cell towers and Wi-Fi hotspots around your "
792"collects information about nearby cell towers and Wi-Fi hotspots around your "
625"current location whenever your position is being found."
793"current location whenever your position is being found."
626msgstr ""
794msgstr ""
795+"Per proveir-vos de serveis de posicionament i per millorar la seva qualitat, "
796+"HERE recull informació sobre torres de telefonia mòbil i punts d'accés Wi-Fi "
797+"al voltant de la vostra ubicació actual sempre que s'està buscant la vostra "
798+"posició."
627
799
628#: qml/Wizard/Pages/here-terms.qml:93
800#: qml/Wizard/Pages/here-terms.qml:93
629msgid ""
801msgid ""
630"The information collected is used to analyze the service and to improve the "
802"The information collected is used to analyze the service and to improve the "
631"use of service, but not to identify you personally."
803"use of service, but not to identify you personally."
632msgstr ""
804msgstr ""
805+"La informació recollida s'usa per analitzar el servei i per millorar l'ús "
806+"del servei, però no per identificar-vos personalment."
633
807
634#: qml/Wizard/Pages/here-terms.qml:106
808#: qml/Wizard/Pages/here-terms.qml:106
635#, qt-format
809#, qt-format
636msgid "By continuing, you agree to the HERE platform %1 and %2."
810msgid "By continuing, you agree to the HERE platform %1 and %2."
637−msgstr ""
811+msgstr "En continuar, esteu d'acord amb la plataforma HERE %1 i %2."
638
812
639#: qml/Wizard/Pages/here-terms.qml:107
813#: qml/Wizard/Pages/here-terms.qml:107
640msgid "Service Terms"
814msgid "Service Terms"
641−msgstr ""
815+msgstr "Termes del servei"
642
816
643#: qml/Wizard/Pages/passcode-confirm.qml:43
817#: qml/Wizard/Pages/passcode-confirm.qml:43
644−#: qml/Wizard/Pages/passcode-desktop.qml:80
818+#: qml/Wizard/Pages/passcode-desktop.qml:96
645msgid "Confirm passcode"
819msgid "Confirm passcode"
646msgstr "Confirmeu el codi d'accés"
820msgstr "Confirmeu el codi d'accés"
647
821
648#: qml/Wizard/Pages/passcode-confirm.qml:45
822#: qml/Wizard/Pages/passcode-confirm.qml:45
649msgid "Incorrect passcode."
823msgid "Incorrect passcode."
650−msgstr ""
824+msgstr "Codi d'accés incorrecte."
651
825
652#: qml/Wizard/Pages/passcode-confirm.qml:45
826#: qml/Wizard/Pages/passcode-confirm.qml:45
653msgctxt "Enter the passcode again"
827msgctxt "Enter the passcode again"
654msgid "Please re-enter."
828msgid "Please re-enter."
655−msgstr ""
829+msgstr "Si us plau torneu a introduir-lo."
656
830
657#: qml/Wizard/Pages/passcode-desktop.qml:30
831#: qml/Wizard/Pages/passcode-desktop.qml:30
658msgid "Lock Screen Passcode"
832msgid "Lock Screen Passcode"
659−msgstr ""
833+msgstr "Codi d'accés al bloqueig de pantalla"
660
834
661−#: qml/Wizard/Pages/passcode-desktop.qml:56
835+#: qml/Wizard/Pages/passcode-desktop.qml:60
662msgid "Enter 4 numbers to setup your passcode"
836msgid "Enter 4 numbers to setup your passcode"
663−msgstr ""
837+msgstr "Entreu 4 números per establir el codi d'accés"
664
838
665−#: qml/Wizard/Pages/passcode-desktop.qml:65
839+#: qml/Wizard/Pages/passcode-desktop.qml:76
666#: qml/Wizard/Pages/passcode-set.qml:54
840#: qml/Wizard/Pages/passcode-set.qml:54
667msgid "Choose passcode"
841msgid "Choose passcode"
668−msgstr ""
842+msgstr "Trieu el codi d'accés"
669
843
670−#: qml/Wizard/Pages/passcode-desktop.qml:105
844+#: qml/Wizard/Pages/passcode-desktop.qml:126
671msgid "Passcode too short"
845msgid "Passcode too short"
672−msgstr ""
846+msgstr "El codi d'accés és massa curt"
673
847
674−#: qml/Wizard/Pages/passcode-desktop.qml:107
848+#: qml/Wizard/Pages/passcode-desktop.qml:128
675msgid "Passcodes match"
849msgid "Passcodes match"
676−msgstr ""
850+msgstr "Els codis d'accés concorden"
677
851
678−#: qml/Wizard/Pages/passcode-desktop.qml:109
852+#: qml/Wizard/Pages/passcode-desktop.qml:130
679msgid "Passcodes do not match"
853msgid "Passcodes do not match"
680−msgstr ""
854+msgstr "Els codis d'accés no concorden"
681
855
682#: qml/Wizard/Pages/passcode-set.qml:62
856#: qml/Wizard/Pages/passcode-set.qml:62
683msgid "Passcode must be 4 characters long"
857msgid "Passcode must be 4 characters long"
684−msgstr ""
858+msgstr "El codi d'accés ha de tenir una longitud de 4 caràcters"
685
859
686#: qml/Wizard/Pages/password-set.qml:30
860#: qml/Wizard/Pages/password-set.qml:30
687msgid "Lock Screen Password"
861msgid "Lock Screen Password"
688−msgstr ""
862+msgstr "Contrasenya de bloqueig de pantalla"
689
863
690#: qml/Wizard/Pages/password-set.qml:61
864#: qml/Wizard/Pages/password-set.qml:61
691msgid "Enter at least 8 characters"
865msgid "Enter at least 8 characters"
692−msgstr ""
866+msgstr "Entreu almenys 8 caràcters"
693
867
694#: qml/Wizard/Pages/password-set.qml:73
868#: qml/Wizard/Pages/password-set.qml:73
695msgid "Choose password"
869msgid "Choose password"
696−msgstr ""
870+msgstr "Escolliu la contrasenya"
697
871
698#: qml/Wizard/Pages/password-set.qml:103
872#: qml/Wizard/Pages/password-set.qml:103
699msgid "Confirm password"
873msgid "Confirm password"
700−msgstr ""
874+msgstr "Confirmeu la contrasenya"
701
875
702#: qml/Wizard/Pages/sim.qml:27
876#: qml/Wizard/Pages/sim.qml:27
703msgid "No SIM card installed"
877msgid "No SIM card installed"
704−msgstr ""
878+msgstr "No hi cap SIM instal·lada"
705
879
706#: qml/Wizard/Pages/sim.qml:54
880#: qml/Wizard/Pages/sim.qml:54
707msgid "SIM card added"
881msgid "SIM card added"
708−msgstr ""
882+msgstr "S'ha afegit una targeta SIM"
709
883
710#: qml/Wizard/Pages/sim.qml:55
884#: qml/Wizard/Pages/sim.qml:55
711msgid "You must restart the device to access the mobile network."
885msgid "You must restart the device to access the mobile network."
712−msgstr ""
886+msgstr "Heu de reiniciar el dispositiu per accedir a la xarxa mòbil."
713
887
714#: qml/Wizard/Pages/sim.qml:59
888#: qml/Wizard/Pages/sim.qml:59
715msgid "Restart"
889msgid "Restart"
@@ -717,35 +891,39 @@ msgstr "Reinicia"
717
891
718#: qml/Wizard/Pages/sim.qml:78
892#: qml/Wizard/Pages/sim.qml:78
719msgid "You won’t be able to make calls or use text messaging without a SIM."
893msgid "You won’t be able to make calls or use text messaging without a SIM."
720−msgstr ""
894+msgstr "No podreu fer trucades o usar la missatgeria de text sense una SIM."
721
895
722#: qml/Wizard/Pages/sim.qml:90
896#: qml/Wizard/Pages/sim.qml:90
723msgid "To proceed with no SIM tap Skip."
897msgid "To proceed with no SIM tap Skip."
724−msgstr ""
898+msgstr "Per procedir sense cap SIM toqueu Omet."
725
899
726#: qml/Wizard/PasswordMeter.qml:87
900#: qml/Wizard/PasswordMeter.qml:87
727−msgid "Passwords match"
901+msgid "Password too short"
728msgstr ""
902msgstr ""
729
903
730#: qml/Wizard/PasswordMeter.qml:89
904#: qml/Wizard/PasswordMeter.qml:89
905+msgid "Passwords match"
906+msgstr "Les contrasenyes coincideixen"
907+
908+#: qml/Wizard/PasswordMeter.qml:91
731msgid "Passwords do not match"
909msgid "Passwords do not match"
732−msgstr ""
910+msgstr "Les contrasenyes no coincideixen"
733
911
734−#: qml/Wizard/PasswordMeter.qml:93
912+#: qml/Wizard/PasswordMeter.qml:95
735msgid "Strong password"
913msgid "Strong password"
736−msgstr ""
914+msgstr "La contrasenya és forta"
737
915
738−#: qml/Wizard/PasswordMeter.qml:95
916+#: qml/Wizard/PasswordMeter.qml:97
739msgid "Fair password"
917msgid "Fair password"
740−msgstr ""
918+msgstr "La contrasenya és acceptable"
741
919
742−#: qml/Wizard/PasswordMeter.qml:97
920+#: qml/Wizard/PasswordMeter.qml:99
743msgid "Weak password"
921msgid "Weak password"
744−msgstr ""
922+msgstr "La contrasenya és dèbil"
745
923
746−#: qml/Wizard/PasswordMeter.qml:99
924+#: qml/Wizard/PasswordMeter.qml:101
747msgid "Very weak password"
925msgid "Very weak password"
748−msgstr ""
926+msgstr "La contrasenya és molt dèbil"
749
927
750#~ msgid "Confirm"
928#~ msgid "Confirm"
751#~ msgstr "Confirma"
929#~ msgstr "Confirma"
@@ -978,6 +1156,9 @@ msgstr ""
978#~ msgid "Open special menus"
1156#~ msgid "Open special menus"
979#~ msgstr "Obre els menús especials"
1157#~ msgstr "Obre els menús especials"
980
1158
1159+#~ msgid "Tap to unlock"
1160+#~ msgstr "Feu un toc per desblocar"
1161+
981#~ msgid "To view open apps"
1162#~ msgid "To view open apps"
982#~ msgstr "Per veure les aplicacions obertes"
1163#~ msgstr "Per veure les aplicacions obertes"
983
1164
@@ -1073,3 +1254,36 @@ msgstr ""
1073
1254
1074#~ msgid "Call back"
1255#~ msgid "Call back"
1075#~ msgstr "Retorna la trucada"
1256#~ msgstr "Retorna la trucada"
1257+
1258+#~ msgid "Swipe up for recent calls"
1259+#~ msgstr "Llisqueu cap amunt per a trucades recents"
1260+
1261+#~ msgid "Swipe up for favorite calculations"
1262+#~ msgstr "Llisqueu cap amunt per als càlculs favorits"
1263+
1264+#~ msgid "Swipe up to create a message"
1265+#~ msgstr "Llisqueu cap amunt per crear un missatge"
1266+
1267+#~ msgid "Swipe from the left edge to open the launcher"
1268+#~ msgstr "Llisqueu des de la vora esquerra per obrir el llançador"
1269+
1270+#~ msgid "Swipe from the top right edge to open the notification bar"
1271+#~ msgstr ""
1272+#~ "Llisqueu des de la vora superior dreta per obrir la barra de notificacions"
1273+
1274+#~ msgid "Swipe from the top edge to open the notification bar"
1275+#~ msgstr "Llisqueu des de la vora superior per obrir la barra de notificacions"
1276+
1277+#~ msgid "Hover your mouse on the right edge to view your open apps"
1278+#~ msgstr "Passeu el ratolí a la vora dreta per veure les aplicacions obertes"
1279+
1280+#~ msgid "Short or long swipe from the right edge to view your open apps"
1281+#~ msgstr ""
1282+#~ "Feu una lliscada llarga o curta des de la vora dreta per veure les "
1283+#~ "aplicacions obertes"
1284+
1285+#~ msgid "Swipe up to manage the app"
1286+#~ msgstr "Llisqueu cap amunt per gestionar l'aplicació"
1287+
1288+#~ msgid "Swipe up to add a contact"
1289+#~ msgstr "Llisqueu per afegir un contacte"
po/ca@valencia.po+262−100
@@ -7,7 +7,7 @@ msgid ""
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-05-18 11:19+0000\n"
10+"POT-Creation-Date: 2016-07-11 17:24+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@ubuntu.com>\n"
12"Last-Translator: David Planella <david.planella@ubuntu.com>\n"
13"Language-Team: Catalan <ca@li.org>\n"
13"Language-Team: Catalan <ca@li.org>\n"
@@ -15,43 +15,43 @@ 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-05-19 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2016-07-14 06:02+0000\n"
19−"X-Generator: Launchpad (build 18025)\n"
19+"X-Generator: Launchpad (build 18115)\n"
20
20
21−#: plugins/IntegratedLightDM/Greeter.cpp:112
21+#: plugins/LightDM/Greeter.cpp:123
22msgid "Password: "
22msgid "Password: "
23msgstr "Contrasenya: "
23msgstr "Contrasenya: "
24
24
25−#: plugins/Unity/Launcher/launcheritem.cpp:48
25+#: plugins/Unity/Launcher/launcheritem.cpp:49
26−#: plugins/Unity/Launcher/launcheritem.cpp:107
26+#: plugins/Unity/Launcher/launcheritem.cpp:108
27msgid "Pin shortcut"
27msgid "Pin shortcut"
28msgstr "Apega la drecera"
28msgstr "Apega la drecera"
29
29
30−#: plugins/Unity/Launcher/launcheritem.cpp:53
30+#: plugins/Unity/Launcher/launcheritem.cpp:54
31msgid "Quit"
31msgid "Quit"
32msgstr ""
32msgstr ""
33
33
34−#: plugins/Unity/Launcher/launcheritem.cpp:107
34+#: plugins/Unity/Launcher/launcheritem.cpp:108
35msgid "Unpin shortcut"
35msgid "Unpin shortcut"
36msgstr "Desenganxa la drecera"
36msgstr "Desenganxa la drecera"
37
37
38−#: qml/Components/DelayedLockscreen.qml:49
38+#: qml/Components/DelayedLockscreen.qml:50
39msgid "Device Locked"
39msgid "Device Locked"
40msgstr "Dispositiu bloquejat"
40msgstr "Dispositiu bloquejat"
41
41
42−#: qml/Components/DelayedLockscreen.qml:64
42+#: qml/Components/DelayedLockscreen.qml:65
43msgid "You have been locked out due to too many failed passphrase attempts."
43msgid "You have been locked out due to too many failed passphrase attempts."
44msgstr ""
44msgstr ""
45"Se vos ha bloquejat l'accés al dispositiu. Heu sobrepassat el nombre "
45"Se vos ha bloquejat l'accés al dispositiu. Heu sobrepassat el nombre "
46"d'intents d'introducció de la contrasenya."
46"d'intents d'introducció de la contrasenya."
47
47
48−#: qml/Components/DelayedLockscreen.qml:65
48+#: qml/Components/DelayedLockscreen.qml:66
49msgid "You have been locked out due to too many failed passcode attempts."
49msgid "You have been locked out due to too many failed passcode attempts."
50msgstr ""
50msgstr ""
51"Se vos ha bloquejat l'accés al dispositiu. Heu sobrepassat el nombre "
51"Se vos ha bloquejat l'accés al dispositiu. Heu sobrepassat el nombre "
52"d'intents d'introducció del codi d'accés."
52"d'intents d'introducció del codi d'accés."
53
53
54−#: qml/Components/DelayedLockscreen.qml:74
54+#: qml/Components/DelayedLockscreen.qml:75
55#, qt-format
55#, qt-format
56msgid "Please wait %1 minute and then try again…"
56msgid "Please wait %1 minute and then try again…"
57msgid_plural "Please wait %1 minutes and then try again…"
57msgid_plural "Please wait %1 minutes and then try again…"
@@ -78,7 +78,7 @@ msgid "Log Out"
78msgstr ""
78msgstr ""
79
79
80#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
80#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
81−#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
81+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
82#: qml/Wizard/Pages/passcode-set.qml:32
82#: qml/Wizard/Pages/passcode-set.qml:32
83msgid "Cancel"
83msgid "Cancel"
84msgstr "Cancel·la"
84msgstr "Cancel·la"
@@ -123,18 +123,188 @@ msgctxt "Button: Restart the system"
123msgid "Restart"
123msgid "Restart"
124msgstr ""
124msgstr ""
125
125
126+#: qml/Components/KeyboardShortcutsOverlay.qml:41
127+msgid "Keyboard Shortcuts"
128+msgstr ""
129+
130+#: qml/Components/KeyboardShortcutsOverlay.qml:55
131+msgid "Unity 8"
132+msgstr ""
133+
134+#: qml/Components/KeyboardShortcutsOverlay.qml:62
135+msgid "PrtScr"
136+msgstr ""
137+
138+#: qml/Components/KeyboardShortcutsOverlay.qml:67
139+msgid "Takes a screenshot."
140+msgstr ""
141+
142+#: qml/Components/KeyboardShortcutsOverlay.qml:75
143+msgid "Alt + PrtScr"
144+msgstr ""
145+
146+#: qml/Components/KeyboardShortcutsOverlay.qml:80
147+msgid "Takes a screenshot of a window."
148+msgstr ""
149+
150+#: qml/Components/KeyboardShortcutsOverlay.qml:88
151+msgid "Super + Space"
152+msgstr ""
153+
154+#: qml/Components/KeyboardShortcutsOverlay.qml:93
155+msgid "Switches to next keyboard layout."
156+msgstr ""
157+
158+#: qml/Components/KeyboardShortcutsOverlay.qml:101
159+msgid "Super + Shift + Space"
160+msgstr ""
161+
162+#: qml/Components/KeyboardShortcutsOverlay.qml:106
163+msgid "Switches to previous keyboard layout."
164+msgstr ""
165+
166+#: qml/Components/KeyboardShortcutsOverlay.qml:118
167+msgid "Launcher"
168+msgstr ""
169+
170+#: qml/Components/KeyboardShortcutsOverlay.qml:125
171+msgid "Super (Hold)"
172+msgstr ""
173+
174+#: qml/Components/KeyboardShortcutsOverlay.qml:130
175+msgid "Opens the launcher, displays shortcuts."
176+msgstr ""
177+
178+#: qml/Components/KeyboardShortcutsOverlay.qml:138
179+msgid "Alt + F1"
180+msgstr ""
181+
182+#: qml/Components/KeyboardShortcutsOverlay.qml:143
183+msgid "Opens launcher keyboard navigation mode."
184+msgstr ""
185+
186+#: qml/Components/KeyboardShortcutsOverlay.qml:151
187+msgid "Super + Tab"
188+msgstr ""
189+
190+#: qml/Components/KeyboardShortcutsOverlay.qml:156
191+msgid "Switches applications via the launcher."
192+msgstr ""
193+
194+#: qml/Components/KeyboardShortcutsOverlay.qml:164
195+msgid "Super + 0 to 9"
196+msgstr ""
197+
198+#: qml/Components/KeyboardShortcutsOverlay.qml:169
199+msgid "Same as clicking on a launcher icon."
200+msgstr ""
201+
202+#: qml/Components/KeyboardShortcutsOverlay.qml:181
203+msgid "Scopes"
204+msgstr ""
205+
206+#: qml/Components/KeyboardShortcutsOverlay.qml:188
207+msgid "Super (Tap)"
208+msgstr ""
209+
210+#: qml/Components/KeyboardShortcutsOverlay.qml:193
211+msgid "Opens the Scopes home."
212+msgstr ""
213+
214+#: qml/Components/KeyboardShortcutsOverlay.qml:209
215+msgid "Switching"
216+msgstr ""
217+
218+#: qml/Components/KeyboardShortcutsOverlay.qml:216
219+msgid "Alt + Tab"
220+msgstr ""
221+
222+#: qml/Components/KeyboardShortcutsOverlay.qml:221
223+msgid "Switches between applications."
224+msgstr ""
225+
226+#: qml/Components/KeyboardShortcutsOverlay.qml:229
227+msgid "Super + W"
228+msgstr ""
229+
230+#: qml/Components/KeyboardShortcutsOverlay.qml:234
231+msgid "Opens the desktop spread."
232+msgstr ""
233+
234+#: qml/Components/KeyboardShortcutsOverlay.qml:242
235+msgid "Cursor Left or Right"
236+msgstr ""
237+
238+#: qml/Components/KeyboardShortcutsOverlay.qml:247
239+msgid "Moves the focus."
240+msgstr ""
241+
242+#: qml/Components/KeyboardShortcutsOverlay.qml:259
243+msgid "Windows"
244+msgstr ""
245+
246+#: qml/Components/KeyboardShortcutsOverlay.qml:266
247+msgid "Ctrl + Super + D"
248+msgstr ""
249+
250+#: qml/Components/KeyboardShortcutsOverlay.qml:271
251+msgid "Minimizes all windows."
252+msgstr ""
253+
254+#: qml/Components/KeyboardShortcutsOverlay.qml:279
255+msgid "Ctrl + Super + Up"
256+msgstr ""
257+
258+#: qml/Components/KeyboardShortcutsOverlay.qml:284
259+msgid "Maximizes the current window."
260+msgstr ""
261+
262+#: qml/Components/KeyboardShortcutsOverlay.qml:292
263+msgid "Ctrl + Super + Down"
264+msgstr ""
265+
266+#: qml/Components/KeyboardShortcutsOverlay.qml:297
267+msgid "Minimizes or restores the current window."
268+msgstr ""
269+
270+#: qml/Components/KeyboardShortcutsOverlay.qml:305
271+msgid "Ctrl + Super + Left or Right"
272+msgstr ""
273+
274+#: qml/Components/KeyboardShortcutsOverlay.qml:310
275+msgid "Semi-maximizes the current window."
276+msgstr ""
277+
278+#: qml/Components/KeyboardShortcutsOverlay.qml:318
279+msgid "Alt + F4"
280+msgstr ""
281+
282+#: qml/Components/KeyboardShortcutsOverlay.qml:323
283+msgid "Closes the current window."
284+msgstr ""
285+
126−#: qml/Components/Lockscreen.qml:231
286+#: qml/Components/Lockscreen.qml:239
127msgid "Return to Call"
287msgid "Return to Call"
128msgstr "Torna a la cridada"
288msgstr "Torna a la cridada"
129
289
130−#: qml/Components/Lockscreen.qml:231
290+#: qml/Components/Lockscreen.qml:239
131msgid "Emergency Call"
291msgid "Emergency Call"
132msgstr "Cridada d'emergència"
292msgstr "Cridada d'emergència"
133
293
134−#: qml/Components/Lockscreen.qml:263
294+#: qml/Components/Lockscreen.qml:271
135msgid "OK"
295msgid "OK"
136msgstr "D'acord"
296msgstr "D'acord"
137
297
298+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
299+#, qt-format
300+msgid "%1:%2:%3"
301+msgstr ""
302+
303+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
304+#, qt-format
305+msgid "%1:%2"
306+msgstr ""
307+
138#: qml/Components/ModeSwitchWarningDialog.qml:32
308#: qml/Components/ModeSwitchWarningDialog.qml:32
139msgid "Apps may have unsaved data:"
309msgid "Apps may have unsaved data:"
140msgstr ""
310msgstr ""
@@ -161,26 +331,30 @@ msgstr ""
161msgid "Close all"
331msgid "Close all"
162msgstr ""
332msgstr ""
163
333
334+#: qml/Components/SharingPicker.qml:54
335+msgid "Preview Share Item"
336+msgstr ""
337+
164−#: qml/Dash/DashPageHeader.qml:337
338+#: qml/Dash/DashPageHeader.qml:333
165msgctxt "Button: Open the Ubuntu Store"
339msgctxt "Button: Open the Ubuntu Store"
166msgid "Store"
340msgid "Store"
167msgstr ""
341msgstr ""
168
342
169−#: qml/Dash/DashPageHeader.qml:344
343+#: qml/Dash/DashPageHeader.qml:340
170msgctxt "Button: Start a search in the current dash scope"
344msgctxt "Button: Start a search in the current dash scope"
171msgid "Search"
345msgid "Search"
172msgstr ""
346msgstr ""
173
347
174−#: qml/Dash/DashPageHeader.qml:354
348+#: qml/Dash/DashPageHeader.qml:350
175msgctxt "Button: Show the current dash scope settings"
349msgctxt "Button: Show the current dash scope settings"
176msgid "Settings"
350msgid "Settings"
177msgstr ""
351msgstr ""
178
352
179−#: qml/Dash/DashPageHeader.qml:361
353+#: qml/Dash/DashPageHeader.qml:357
180msgid "Remove from Favorites"
354msgid "Remove from Favorites"
181msgstr "Suprimeix dels preferits"
355msgstr "Suprimeix dels preferits"
182
356
183−#: qml/Dash/DashPageHeader.qml:361
357+#: qml/Dash/DashPageHeader.qml:357
184msgid "Add to Favorites"
358msgid "Add to Favorites"
185msgstr "Afig als preferits"
359msgstr "Afig als preferits"
186
360
@@ -192,24 +366,24 @@ msgstr ""
192msgid "Reset"
366msgid "Reset"
193msgstr ""
367msgstr ""
194
368
195−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:764
369+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
196msgid "Show less"
370msgid "Show less"
197msgstr ""
371msgstr ""
198
372
199−#: qml/Dash/GenericScopeView.qml:579
373+#: qml/Dash/GenericScopeView.qml:580
200msgid "Show all"
374msgid "Show all"
201msgstr ""
375msgstr ""
202
376
203−#: qml/Dash/GenericScopeView.qml:636
377+#: qml/Dash/GenericScopeView.qml:637
204msgctxt "Label: Hint for dash search line edit"
378msgctxt "Label: Hint for dash search line edit"
205msgid "Search"
379msgid "Search"
206msgstr ""
380msgstr ""
207
381
208−#: qml/Dash/PageHeaderExtraPanel.qml:55
382+#: qml/Dash/PageHeaderExtraPanel.qml:56
209msgid "Recent Searches"
383msgid "Recent Searches"
210msgstr ""
384msgstr ""
211
385
212−#: qml/Dash/PageHeaderExtraPanel.qml:66
386+#: qml/Dash/PageHeaderExtraPanel.qml:67
213msgid "Clear All"
387msgid "Clear All"
214msgstr ""
388msgstr ""
215
389
@@ -222,22 +396,18 @@ msgid "Less..."
222msgstr "Menys..."
396msgstr "Menys..."
223
397
224#: qml/Dash/Previews/PreviewCommentInput.qml:68
398#: qml/Dash/Previews/PreviewCommentInput.qml:68
225−#: qml/Dash/Previews/PreviewRatingInput.qml:174
399+#: qml/Dash/Previews/PreviewRatingInput.qml:175
226msgid "Send"
400msgid "Send"
227msgstr "Envia"
401msgstr "Envia"
228
402
229−#: qml/Dash/Previews/PreviewRatingInput.qml:84
403+#: qml/Dash/Previews/PreviewRatingInput.qml:82
230msgid "Rate this"
404msgid "Rate this"
231msgstr "Puntueu-ho"
405msgstr "Puntueu-ho"
232
406
233−#: qml/Dash/Previews/PreviewRatingInput.qml:129
407+#: qml/Dash/Previews/PreviewRatingInput.qml:157
234msgid "Add a review"
408msgid "Add a review"
235msgstr "Afegiu una ressenya"
409msgstr "Afegiu una ressenya"
236
410
237−#: qml/Dash/Previews/PreviewSharing.qml:66
238−msgid "Preview Share Item"
239−msgstr ""
240−
241#: qml/Dash/PullToRefreshScopeStyle.qml:55
411#: qml/Dash/PullToRefreshScopeStyle.qml:55
242msgid "Pull to refresh…"
412msgid "Pull to refresh…"
243msgstr "Estireu per actualitzar..."
413msgstr "Estireu per actualitzar..."
@@ -250,49 +420,61 @@ msgstr "Deixeu anar per actualitzar..."
250msgid "Enable location data"
420msgid "Enable location data"
251msgstr "Habilita les dades d'ubicació"
421msgstr "Habilita les dades d'ubicació"
252
422
253−#: qml/Dash/ScopesList.qml:67
423+#: qml/Dash/ScopesList.qml:55
254msgid "Manage"
424msgid "Manage"
255msgstr "Gestiona"
425msgstr "Gestiona"
256
426
257−#: qml/Dash/ScopesList.qml:113
427+#: qml/Dash/ScopesList.qml:102
258msgid "Home"
428msgid "Home"
259msgstr "Inici"
429msgstr "Inici"
260
430
261−#: qml/Dash/ScopesList.qml:114
431+#: qml/Dash/ScopesList.qml:103
262msgid "Also installed"
432msgid "Also installed"
263msgstr "També instal·lat"
433msgstr "També instal·lat"
264
434
265−#: qml/DisabledScreenNotice.qml:104
435+#: qml/DisabledScreenNotice.qml:109
266msgid ""
436msgid ""
267"Your device is now connected to an external display. Use this screen as a "
437"Your device is now connected to an external display. Use this screen as a "
268"touch pad to interact with the pointer."
438"touch pad to interact with the pointer."
269msgstr ""
439msgstr ""
270
440
271−#: qml/Greeter/CoverPage.qml:118
441+#: qml/Greeter/CoverPage.qml:127
272msgid "Unlock"
442msgid "Unlock"
273msgstr "Desbloca"
443msgstr "Desbloca"
274
444
445+#: qml/Greeter/Greeter.qml:555
446+msgid "Try again"
447+msgstr ""
448+
275−#: qml/Greeter/LoginList.qml:239
449+#: qml/Greeter/LoginList.qml:63
450+msgid "Passphrase"
451+msgstr ""
452+
453+#: qml/Greeter/LoginList.qml:64
454+msgid "Passcode"
455+msgstr ""
456+
457+#: qml/Greeter/LoginList.qml:87
276msgid "Retry"
458msgid "Retry"
277msgstr ""
459msgstr ""
278
460
279−#: qml/Greeter/LoginList.qml:240
461+#: qml/Greeter/LoginList.qml:88
280−msgid "Tap to unlock"
462+msgid "Log In"
281msgstr ""
463msgstr ""
282
464
283−#: qml/Greeter/NarrowView.qml:54
465+#: qml/Greeter/NarrowView.qml:55
284msgid "Sorry, incorrect passphrase."
466msgid "Sorry, incorrect passphrase."
285msgstr "La contrasenya és incorrecta"
467msgstr "La contrasenya és incorrecta"
286
468
287−#: qml/Greeter/NarrowView.qml:55
469+#: qml/Greeter/NarrowView.qml:56
288msgid "Sorry, incorrect passcode."
470msgid "Sorry, incorrect passcode."
289msgstr "El codi d'accés no és correcte"
471msgstr "El codi d'accés no és correcte"
290
472
291−#: qml/Greeter/NarrowView.qml:56
473+#: qml/Greeter/NarrowView.qml:57
292msgid "This will be your last attempt."
474msgid "This will be your last attempt."
293msgstr "Este serà el darrer intent."
475msgstr "Este serà el darrer intent."
294
476
295−#: qml/Greeter/NarrowView.qml:58
477+#: qml/Greeter/NarrowView.qml:59
296msgid ""
478msgid ""
297"If passphrase is entered incorrectly, your phone will conduct a factory "
479"If passphrase is entered incorrectly, your phone will conduct a factory "
298"reset and all personal data will be deleted."
480"reset and all personal data will be deleted."
@@ -301,7 +483,7 @@ msgstr ""
301"reinicialitzarà a l'estat de fàbrica i se suprimiran totes les dades "
483"reinicialitzarà a l'estat de fàbrica i se suprimiran totes les dades "
302"personals."
484"personals."
303
485
304−#: qml/Greeter/NarrowView.qml:59
486+#: qml/Greeter/NarrowView.qml:60
305msgid ""
487msgid ""
306"If passcode is entered incorrectly, your phone will conduct a factory reset "
488"If passcode is entered incorrectly, your phone will conduct a factory reset "
307"and all personal data will be deleted."
489"and all personal data will be deleted."
@@ -310,34 +492,34 @@ msgstr ""
310"reinicialitzarà a l'estat de fàbrica i se suprimiran totes les dades "
492"reinicialitzarà a l'estat de fàbrica i se suprimiran totes les dades "
311"personals."
493"personals."
312
494
313−#: qml/Greeter/NarrowView.qml:116
495+#: qml/Greeter/NarrowView.qml:129
314#, qt-format
496#, qt-format
315msgid "Enter %1"
497msgid "Enter %1"
316msgstr "Introduïu: %1"
498msgstr "Introduïu: %1"
317
499
318−#: qml/Greeter/NarrowView.qml:117
500+#: qml/Greeter/NarrowView.qml:130
319msgid "Enter passphrase"
501msgid "Enter passphrase"
320msgstr "Introduïu la contrasenya"
502msgstr "Introduïu la contrasenya"
321
503
322−#: qml/Greeter/NarrowView.qml:118
504+#: qml/Greeter/NarrowView.qml:131
323msgid "Enter passcode"
505msgid "Enter passcode"
324msgstr "Introduïu el codi d'accés"
506msgstr "Introduïu el codi d'accés"
325
507
326−#: qml/Greeter/NarrowView.qml:119
508+#: qml/Greeter/NarrowView.qml:135
327#, qt-format
509#, qt-format
328msgid "Sorry, incorrect %1"
510msgid "Sorry, incorrect %1"
329msgstr "Incorrecte (%1)"
511msgstr "Incorrecte (%1)"
330
512
331−#: qml/Greeter/NarrowView.qml:120
513+#: qml/Greeter/NarrowView.qml:136
332msgid "Sorry, incorrect passphrase"
514msgid "Sorry, incorrect passphrase"
333msgstr "La contrasenya no és correcta"
515msgstr "La contrasenya no és correcta"
334
516
335−#: qml/Greeter/NarrowView.qml:121
517+#: qml/Greeter/NarrowView.qml:137
336msgctxt "passphrase"
518msgctxt "passphrase"
337msgid "Please re-enter"
519msgid "Please re-enter"
338msgstr ""
520msgstr ""
339
521
340−#: qml/Greeter/NarrowView.qml:122
522+#: qml/Greeter/NarrowView.qml:138
341msgid "Sorry, incorrect passcode"
523msgid "Sorry, incorrect passcode"
342msgstr "El codi d'accés no és correcte"
524msgstr "El codi d'accés no és correcte"
343
525
@@ -412,18 +594,18 @@ msgstr "S'ha finalitzat"
412msgid "Failed, tap to retry"
594msgid "Failed, tap to retry"
413msgstr "Ha fallat, feu un toc per tornar-ho a intentar"
595msgstr "Ha fallat, feu un toc per tornar-ho a intentar"
414
596
415−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
597+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
416−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
598+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
417msgctxt "Button: Send a reply message"
599msgctxt "Button: Send a reply message"
418msgid "Send"
600msgid "Send"
419msgstr ""
601msgstr ""
420
602
421−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
603+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
422msgctxt "Label: Hint in message indicator line edit"
604msgctxt "Label: Hint in message indicator line edit"
423msgid "Reply"
605msgid "Reply"
424msgstr ""
606msgstr ""
425
607
426−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
608+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
427msgctxt "Button: Call back on phone"
609msgctxt "Button: Call back on phone"
428msgid "Call back"
610msgid "Call back"
429msgstr ""
611msgstr ""
@@ -432,32 +614,12 @@ msgstr ""
432msgid "Drag using 3 fingers any application from one window to the other"
614msgid "Drag using 3 fingers any application from one window to the other"
433msgstr ""
615msgstr ""
434
616
435−#: qml/Tutorial/TutorialBottom.qml:78
436−msgid "Swipe up to add a contact"
437−msgstr ""
438−
439−#: qml/Tutorial/TutorialBottom.qml:80
440−msgid "Swipe up for favorite calculations"
441−msgstr ""
442−
443−#: qml/Tutorial/TutorialBottom.qml:82
444−msgid "Swipe up for recent calls"
445−msgstr ""
446−
447−#: qml/Tutorial/TutorialBottom.qml:84
448−msgid "Swipe up to create a message"
449−msgstr ""
450−
451−#: qml/Tutorial/TutorialBottom.qml:85
452−msgid "Swipe up to manage the app"
453−msgstr ""
454−
455−#: qml/Tutorial/TutorialLeftLong.qml:47
617+#: qml/Tutorial/TutorialLeftLong.qml:49
456msgid "Long swipe from the left edge to open the Today scope"
618msgid "Long swipe from the left edge to open the Today scope"
457msgstr ""
619msgstr ""
458
620
459#: qml/Tutorial/TutorialLeft.qml:47
621#: qml/Tutorial/TutorialLeft.qml:47
460−msgid "Swipe from the left edge to open the launcher"
622+msgid "Short swipe from the left edge to open the launcher"
461msgstr ""
623msgstr ""
462
624
463#: qml/Tutorial/TutorialRight.qml:55
625#: qml/Tutorial/TutorialRight.qml:55
@@ -465,15 +627,11 @@ msgid "Push your mouse against the right edge to view your open apps"
465msgstr ""
627msgstr ""
466
628
467#: qml/Tutorial/TutorialRight.qml:56
629#: qml/Tutorial/TutorialRight.qml:56
468−msgid "Short or long swipe from the right edge to view your open apps"
630+msgid "Swipe from the right edge to view your open apps"
469msgstr ""
631msgstr ""
470
632
471#: qml/Tutorial/TutorialTop.qml:53
633#: qml/Tutorial/TutorialTop.qml:53
472−msgid "Swipe from the top right edge to open the notification bar"
634+msgid "Swipe from the top edge to access notifications and quick settings"
473−msgstr ""
474−
475−#: qml/Tutorial/TutorialTop.qml:54
476−msgid "Swipe from the top edge to open the notification bar"
477msgstr ""
635msgstr ""
478
636
479#: qml/Wizard/Page.qml:54
637#: qml/Wizard/Page.qml:54
@@ -485,11 +643,11 @@ msgstr ""
485msgid "Language"
643msgid "Language"
486msgstr ""
644msgstr ""
487
645
488−#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
646+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
489−#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
647+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
490#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
648#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
491#: qml/Wizard/Pages/75-report-check.qml:84
649#: qml/Wizard/Pages/75-report-check.qml:84
492−#: qml/Wizard/Pages/passcode-desktop.qml:124
650+#: qml/Wizard/Pages/passcode-desktop.qml:141
493#: qml/Wizard/Pages/password-set.qml:141
651#: qml/Wizard/Pages/password-set.qml:141
494msgid "Next"
652msgid "Next"
495msgstr ""
653msgstr ""
@@ -551,7 +709,7 @@ msgstr ""
551msgid "Time Zone"
709msgid "Time Zone"
552msgstr ""
710msgstr ""
553
711
554−#: qml/Wizard/Pages/50-timezone.qml:178
712+#: qml/Wizard/Pages/50-timezone.qml:181
555msgid "Enter your city"
713msgid "Enter your city"
556msgstr ""
714msgstr ""
557
715
@@ -641,7 +799,7 @@ msgid "Service Terms"
641msgstr ""
799msgstr ""
642
800
643#: qml/Wizard/Pages/passcode-confirm.qml:43
801#: qml/Wizard/Pages/passcode-confirm.qml:43
644−#: qml/Wizard/Pages/passcode-desktop.qml:80
802+#: qml/Wizard/Pages/passcode-desktop.qml:96
645msgid "Confirm passcode"
803msgid "Confirm passcode"
646msgstr "Confirmeu el codi d'accés"
804msgstr "Confirmeu el codi d'accés"
647
805
@@ -658,24 +816,24 @@ msgstr ""
658msgid "Lock Screen Passcode"
816msgid "Lock Screen Passcode"
659msgstr ""
817msgstr ""
660
818
661−#: qml/Wizard/Pages/passcode-desktop.qml:56
819+#: qml/Wizard/Pages/passcode-desktop.qml:60
662msgid "Enter 4 numbers to setup your passcode"
820msgid "Enter 4 numbers to setup your passcode"
663msgstr ""
821msgstr ""
664
822
665−#: qml/Wizard/Pages/passcode-desktop.qml:65
823+#: qml/Wizard/Pages/passcode-desktop.qml:76
666#: qml/Wizard/Pages/passcode-set.qml:54
824#: qml/Wizard/Pages/passcode-set.qml:54
667msgid "Choose passcode"
825msgid "Choose passcode"
668msgstr ""
826msgstr ""
669
827
670−#: qml/Wizard/Pages/passcode-desktop.qml:105
828+#: qml/Wizard/Pages/passcode-desktop.qml:126
671msgid "Passcode too short"
829msgid "Passcode too short"
672msgstr ""
830msgstr ""
673
831
674−#: qml/Wizard/Pages/passcode-desktop.qml:107
832+#: qml/Wizard/Pages/passcode-desktop.qml:128
675msgid "Passcodes match"
833msgid "Passcodes match"
676msgstr ""
834msgstr ""
677
835
678−#: qml/Wizard/Pages/passcode-desktop.qml:109
836+#: qml/Wizard/Pages/passcode-desktop.qml:130
679msgid "Passcodes do not match"
837msgid "Passcodes do not match"
680msgstr ""
838msgstr ""
681
839
@@ -724,26 +882,30 @@ msgid "To proceed with no SIM tap Skip."
724msgstr ""
882msgstr ""
725
883
726#: qml/Wizard/PasswordMeter.qml:87
884#: qml/Wizard/PasswordMeter.qml:87
727−msgid "Passwords match"
885+msgid "Password too short"
728msgstr ""
886msgstr ""
729
887
730#: qml/Wizard/PasswordMeter.qml:89
888#: qml/Wizard/PasswordMeter.qml:89
889+msgid "Passwords match"
890+msgstr ""
891+
892+#: qml/Wizard/PasswordMeter.qml:91
731msgid "Passwords do not match"
893msgid "Passwords do not match"
732msgstr ""
894msgstr ""
733
895
734−#: qml/Wizard/PasswordMeter.qml:93
896+#: qml/Wizard/PasswordMeter.qml:95
735msgid "Strong password"
897msgid "Strong password"
736msgstr ""
898msgstr ""
737
899
738−#: qml/Wizard/PasswordMeter.qml:95
900+#: qml/Wizard/PasswordMeter.qml:97
739msgid "Fair password"
901msgid "Fair password"
740msgstr ""
902msgstr ""
741
903
742−#: qml/Wizard/PasswordMeter.qml:97
904+#: qml/Wizard/PasswordMeter.qml:99
743msgid "Weak password"
905msgid "Weak password"
744msgstr ""
906msgstr ""
745
907
746−#: qml/Wizard/PasswordMeter.qml:99
908+#: qml/Wizard/PasswordMeter.qml:101
747msgid "Very weak password"
909msgid "Very weak password"
748msgstr ""
910msgstr ""
749
911
po/ce.po+262−100
@@ -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-05-18 11:19+0000\n"
10+"POT-Creation-Date: 2016-07-11 17:24+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,39 +15,39 @@ 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-05-19 05:49+0000\n"
18+"X-Launchpad-Export-Date: 2016-07-14 06:01+0000\n"
19−"X-Generator: Launchpad (build 18025)\n"
19+"X-Generator: Launchpad (build 18115)\n"
20
20
21−#: plugins/IntegratedLightDM/Greeter.cpp:112
21+#: plugins/LightDM/Greeter.cpp:123
22msgid "Password: "
22msgid "Password: "
23msgstr ""
23msgstr ""
24
24
25−#: plugins/Unity/Launcher/launcheritem.cpp:48
25+#: plugins/Unity/Launcher/launcheritem.cpp:49
26−#: plugins/Unity/Launcher/launcheritem.cpp:107
26+#: plugins/Unity/Launcher/launcheritem.cpp:108
27msgid "Pin shortcut"
27msgid "Pin shortcut"
28msgstr ""
28msgstr ""
29
29
30−#: plugins/Unity/Launcher/launcheritem.cpp:53
30+#: plugins/Unity/Launcher/launcheritem.cpp:54
31msgid "Quit"
31msgid "Quit"
32msgstr ""
32msgstr ""
33
33
34−#: plugins/Unity/Launcher/launcheritem.cpp:107
34+#: plugins/Unity/Launcher/launcheritem.cpp:108
35msgid "Unpin shortcut"
35msgid "Unpin shortcut"
36msgstr ""
36msgstr ""
37
37
38−#: qml/Components/DelayedLockscreen.qml:49
38+#: qml/Components/DelayedLockscreen.qml:50
39msgid "Device Locked"
39msgid "Device Locked"
40msgstr ""
40msgstr ""
41
41
42−#: qml/Components/DelayedLockscreen.qml:64
42+#: qml/Components/DelayedLockscreen.qml:65
43msgid "You have been locked out due to too many failed passphrase attempts."
43msgid "You have been locked out due to too many failed passphrase attempts."
44msgstr ""
44msgstr ""
45
45
46−#: qml/Components/DelayedLockscreen.qml:65
46+#: qml/Components/DelayedLockscreen.qml:66
47msgid "You have been locked out due to too many failed passcode attempts."
47msgid "You have been locked out due to too many failed passcode attempts."
48msgstr ""
48msgstr ""
49
49
50−#: qml/Components/DelayedLockscreen.qml:74
50+#: qml/Components/DelayedLockscreen.qml:75
51#, qt-format
51#, qt-format
52msgid "Please wait %1 minute and then try again…"
52msgid "Please wait %1 minute and then try again…"
53msgid_plural "Please wait %1 minutes and then try again…"
53msgid_plural "Please wait %1 minutes and then try again…"
@@ -74,7 +74,7 @@ msgid "Log Out"
74msgstr ""
74msgstr ""
75
75
76#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
76#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
77−#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
77+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
78#: qml/Wizard/Pages/passcode-set.qml:32
78#: qml/Wizard/Pages/passcode-set.qml:32
79msgid "Cancel"
79msgid "Cancel"
80msgstr ""
80msgstr ""
@@ -117,18 +117,188 @@ msgctxt "Button: Restart the system"
117msgid "Restart"
117msgid "Restart"
118msgstr ""
118msgstr ""
119
119
120+#: qml/Components/KeyboardShortcutsOverlay.qml:41
121+msgid "Keyboard Shortcuts"
122+msgstr ""
123+
124+#: qml/Components/KeyboardShortcutsOverlay.qml:55
125+msgid "Unity 8"
126+msgstr ""
127+
128+#: qml/Components/KeyboardShortcutsOverlay.qml:62
129+msgid "PrtScr"
130+msgstr ""
131+
132+#: qml/Components/KeyboardShortcutsOverlay.qml:67
133+msgid "Takes a screenshot."
134+msgstr ""
135+
136+#: qml/Components/KeyboardShortcutsOverlay.qml:75
137+msgid "Alt + PrtScr"
138+msgstr ""
139+
140+#: qml/Components/KeyboardShortcutsOverlay.qml:80
141+msgid "Takes a screenshot of a window."
142+msgstr ""
143+
144+#: qml/Components/KeyboardShortcutsOverlay.qml:88
145+msgid "Super + Space"
146+msgstr ""
147+
148+#: qml/Components/KeyboardShortcutsOverlay.qml:93
149+msgid "Switches to next keyboard layout."
150+msgstr ""
151+
152+#: qml/Components/KeyboardShortcutsOverlay.qml:101
153+msgid "Super + Shift + Space"
154+msgstr ""
155+
156+#: qml/Components/KeyboardShortcutsOverlay.qml:106
157+msgid "Switches to previous keyboard layout."
158+msgstr ""
159+
160+#: qml/Components/KeyboardShortcutsOverlay.qml:118
161+msgid "Launcher"
162+msgstr ""
163+
164+#: qml/Components/KeyboardShortcutsOverlay.qml:125
165+msgid "Super (Hold)"
166+msgstr ""
167+
168+#: qml/Components/KeyboardShortcutsOverlay.qml:130
169+msgid "Opens the launcher, displays shortcuts."
170+msgstr ""
171+
172+#: qml/Components/KeyboardShortcutsOverlay.qml:138
173+msgid "Alt + F1"
174+msgstr ""
175+
176+#: qml/Components/KeyboardShortcutsOverlay.qml:143
177+msgid "Opens launcher keyboard navigation mode."
178+msgstr ""
179+
180+#: qml/Components/KeyboardShortcutsOverlay.qml:151
181+msgid "Super + Tab"
182+msgstr ""
183+
184+#: qml/Components/KeyboardShortcutsOverlay.qml:156
185+msgid "Switches applications via the launcher."
186+msgstr ""
187+
188+#: qml/Components/KeyboardShortcutsOverlay.qml:164
189+msgid "Super + 0 to 9"
190+msgstr ""
191+
192+#: qml/Components/KeyboardShortcutsOverlay.qml:169
193+msgid "Same as clicking on a launcher icon."
194+msgstr ""
195+
196+#: qml/Components/KeyboardShortcutsOverlay.qml:181
197+msgid "Scopes"
198+msgstr ""
199+
200+#: qml/Components/KeyboardShortcutsOverlay.qml:188
201+msgid "Super (Tap)"
202+msgstr ""
203+
204+#: qml/Components/KeyboardShortcutsOverlay.qml:193
205+msgid "Opens the Scopes home."
206+msgstr ""
207+
208+#: qml/Components/KeyboardShortcutsOverlay.qml:209
209+msgid "Switching"
210+msgstr ""
211+
212+#: qml/Components/KeyboardShortcutsOverlay.qml:216
213+msgid "Alt + Tab"
214+msgstr ""
215+
216+#: qml/Components/KeyboardShortcutsOverlay.qml:221
217+msgid "Switches between applications."
218+msgstr ""
219+
220+#: qml/Components/KeyboardShortcutsOverlay.qml:229
221+msgid "Super + W"
222+msgstr ""
223+
224+#: qml/Components/KeyboardShortcutsOverlay.qml:234
225+msgid "Opens the desktop spread."
226+msgstr ""
227+
228+#: qml/Components/KeyboardShortcutsOverlay.qml:242
229+msgid "Cursor Left or Right"
230+msgstr ""
231+
232+#: qml/Components/KeyboardShortcutsOverlay.qml:247
233+msgid "Moves the focus."
234+msgstr ""
235+
236+#: qml/Components/KeyboardShortcutsOverlay.qml:259
237+msgid "Windows"
238+msgstr ""
239+
240+#: qml/Components/KeyboardShortcutsOverlay.qml:266
241+msgid "Ctrl + Super + D"
242+msgstr ""
243+
244+#: qml/Components/KeyboardShortcutsOverlay.qml:271
245+msgid "Minimizes all windows."
246+msgstr ""
247+
248+#: qml/Components/KeyboardShortcutsOverlay.qml:279
249+msgid "Ctrl + Super + Up"
250+msgstr ""
251+
252+#: qml/Components/KeyboardShortcutsOverlay.qml:284
253+msgid "Maximizes the current window."
254+msgstr ""
255+
256+#: qml/Components/KeyboardShortcutsOverlay.qml:292
257+msgid "Ctrl + Super + Down"
258+msgstr ""
259+
260+#: qml/Components/KeyboardShortcutsOverlay.qml:297
261+msgid "Minimizes or restores the current window."
262+msgstr ""
263+
264+#: qml/Components/KeyboardShortcutsOverlay.qml:305
265+msgid "Ctrl + Super + Left or Right"
266+msgstr ""
267+
268+#: qml/Components/KeyboardShortcutsOverlay.qml:310
269+msgid "Semi-maximizes the current window."
270+msgstr ""
271+
272+#: qml/Components/KeyboardShortcutsOverlay.qml:318
273+msgid "Alt + F4"
274+msgstr ""
275+
276+#: qml/Components/KeyboardShortcutsOverlay.qml:323
277+msgid "Closes the current window."
278+msgstr ""
279+
120−#: qml/Components/Lockscreen.qml:231
280+#: qml/Components/Lockscreen.qml:239
121msgid "Return to Call"
281msgid "Return to Call"
122msgstr ""
282msgstr ""
123
283
124−#: qml/Components/Lockscreen.qml:231
284+#: qml/Components/Lockscreen.qml:239
125msgid "Emergency Call"
285msgid "Emergency Call"
126msgstr ""
286msgstr ""
127
287
128−#: qml/Components/Lockscreen.qml:263
288+#: qml/Components/Lockscreen.qml:271
129msgid "OK"
289msgid "OK"
130msgstr ""
290msgstr ""
131
291
292+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
293+#, qt-format
294+msgid "%1:%2:%3"
295+msgstr ""
296+
297+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
298+#, qt-format
299+msgid "%1:%2"
300+msgstr ""
301+
132#: qml/Components/ModeSwitchWarningDialog.qml:32
302#: qml/Components/ModeSwitchWarningDialog.qml:32
133msgid "Apps may have unsaved data:"
303msgid "Apps may have unsaved data:"
134msgstr ""
304msgstr ""
@@ -155,26 +325,30 @@ msgstr ""
155msgid "Close all"
325msgid "Close all"
156msgstr ""
326msgstr ""
157
327
328+#: qml/Components/SharingPicker.qml:54
329+msgid "Preview Share Item"
330+msgstr ""
331+
158−#: qml/Dash/DashPageHeader.qml:337
332+#: qml/Dash/DashPageHeader.qml:333
159msgctxt "Button: Open the Ubuntu Store"
333msgctxt "Button: Open the Ubuntu Store"
160msgid "Store"
334msgid "Store"
161msgstr ""
335msgstr ""
162
336
163−#: qml/Dash/DashPageHeader.qml:344
337+#: qml/Dash/DashPageHeader.qml:340
164msgctxt "Button: Start a search in the current dash scope"
338msgctxt "Button: Start a search in the current dash scope"
165msgid "Search"
339msgid "Search"
166msgstr ""
340msgstr ""
167
341
168−#: qml/Dash/DashPageHeader.qml:354
342+#: qml/Dash/DashPageHeader.qml:350
169msgctxt "Button: Show the current dash scope settings"
343msgctxt "Button: Show the current dash scope settings"
170msgid "Settings"
344msgid "Settings"
171msgstr ""
345msgstr ""
172
346
173−#: qml/Dash/DashPageHeader.qml:361
347+#: qml/Dash/DashPageHeader.qml:357
174msgid "Remove from Favorites"
348msgid "Remove from Favorites"
175msgstr ""
349msgstr ""
176
350
177−#: qml/Dash/DashPageHeader.qml:361
351+#: qml/Dash/DashPageHeader.qml:357
178msgid "Add to Favorites"
352msgid "Add to Favorites"
179msgstr ""
353msgstr ""
180
354
@@ -186,24 +360,24 @@ msgstr ""
186msgid "Reset"
360msgid "Reset"
187msgstr ""
361msgstr ""
188
362
189−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:764
363+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
190msgid "Show less"
364msgid "Show less"
191msgstr ""
365msgstr ""
192
366
193−#: qml/Dash/GenericScopeView.qml:579
367+#: qml/Dash/GenericScopeView.qml:580
194msgid "Show all"
368msgid "Show all"
195msgstr ""
369msgstr ""
196
370
197−#: qml/Dash/GenericScopeView.qml:636
371+#: qml/Dash/GenericScopeView.qml:637
198msgctxt "Label: Hint for dash search line edit"
372msgctxt "Label: Hint for dash search line edit"
199msgid "Search"
373msgid "Search"
200msgstr ""
374msgstr ""
201
375
202−#: qml/Dash/PageHeaderExtraPanel.qml:55
376+#: qml/Dash/PageHeaderExtraPanel.qml:56
203msgid "Recent Searches"
377msgid "Recent Searches"
204msgstr ""
378msgstr ""
205
379
206−#: qml/Dash/PageHeaderExtraPanel.qml:66
380+#: qml/Dash/PageHeaderExtraPanel.qml:67
207msgid "Clear All"
381msgid "Clear All"
208msgstr ""
382msgstr ""
209
383
@@ -216,22 +390,18 @@ msgid "Less..."
216msgstr ""
390msgstr ""
217
391
218#: qml/Dash/Previews/PreviewCommentInput.qml:68
392#: qml/Dash/Previews/PreviewCommentInput.qml:68
219−#: qml/Dash/Previews/PreviewRatingInput.qml:174
393+#: qml/Dash/Previews/PreviewRatingInput.qml:175
220msgid "Send"
394msgid "Send"
221msgstr ""
395msgstr ""
222
396
223−#: qml/Dash/Previews/PreviewRatingInput.qml:84
397+#: qml/Dash/Previews/PreviewRatingInput.qml:82
224msgid "Rate this"
398msgid "Rate this"
225msgstr ""
399msgstr ""
226
400
227−#: qml/Dash/Previews/PreviewRatingInput.qml:129
401+#: qml/Dash/Previews/PreviewRatingInput.qml:157
228msgid "Add a review"
402msgid "Add a review"
229msgstr ""
403msgstr ""
230
404
231−#: qml/Dash/Previews/PreviewSharing.qml:66
232−msgid "Preview Share Item"
233−msgstr ""
234−
235#: qml/Dash/PullToRefreshScopeStyle.qml:55
405#: qml/Dash/PullToRefreshScopeStyle.qml:55
236msgid "Pull to refresh…"
406msgid "Pull to refresh…"
237msgstr ""
407msgstr ""
@@ -244,88 +414,100 @@ msgstr ""
244msgid "Enable location data"
414msgid "Enable location data"
245msgstr ""
415msgstr ""
246
416
247−#: qml/Dash/ScopesList.qml:67
417+#: qml/Dash/ScopesList.qml:55
248msgid "Manage"
418msgid "Manage"
249msgstr ""
419msgstr ""
250
420
251−#: qml/Dash/ScopesList.qml:113
421+#: qml/Dash/ScopesList.qml:102
252msgid "Home"
422msgid "Home"
253msgstr ""
423msgstr ""
254
424
255−#: qml/Dash/ScopesList.qml:114
425+#: qml/Dash/ScopesList.qml:103
256msgid "Also installed"
426msgid "Also installed"
257msgstr ""
427msgstr ""
258
428
259−#: qml/DisabledScreenNotice.qml:104
429+#: qml/DisabledScreenNotice.qml:109
260msgid ""
430msgid ""
261"Your device is now connected to an external display. Use this screen as a "
431"Your device is now connected to an external display. Use this screen as a "
262"touch pad to interact with the pointer."
432"touch pad to interact with the pointer."
263msgstr ""
433msgstr ""
264
434
265−#: qml/Greeter/CoverPage.qml:118
435+#: qml/Greeter/CoverPage.qml:127
266msgid "Unlock"
436msgid "Unlock"
267msgstr ""
437msgstr ""
268
438
439+#: qml/Greeter/Greeter.qml:555
440+msgid "Try again"
441+msgstr ""
442+
269−#: qml/Greeter/LoginList.qml:239
443+#: qml/Greeter/LoginList.qml:63
444+msgid "Passphrase"
445+msgstr ""
446+
447+#: qml/Greeter/LoginList.qml:64
448+msgid "Passcode"
449+msgstr ""
450+
451+#: qml/Greeter/LoginList.qml:87
270msgid "Retry"
452msgid "Retry"
271msgstr ""
453msgstr ""
272
454
273−#: qml/Greeter/LoginList.qml:240
455+#: qml/Greeter/LoginList.qml:88
274−msgid "Tap to unlock"
456+msgid "Log In"
275msgstr ""
457msgstr ""
276
458
277−#: qml/Greeter/NarrowView.qml:54
459+#: qml/Greeter/NarrowView.qml:55
278msgid "Sorry, incorrect passphrase."
460msgid "Sorry, incorrect passphrase."
279msgstr ""
461msgstr ""
280
462
281−#: qml/Greeter/NarrowView.qml:55
463+#: qml/Greeter/NarrowView.qml:56
282msgid "Sorry, incorrect passcode."
464msgid "Sorry, incorrect passcode."
283msgstr ""
465msgstr ""
284
466
285−#: qml/Greeter/NarrowView.qml:56
467+#: qml/Greeter/NarrowView.qml:57
286msgid "This will be your last attempt."
468msgid "This will be your last attempt."
287msgstr ""
469msgstr ""
288
470
289−#: qml/Greeter/NarrowView.qml:58
471+#: qml/Greeter/NarrowView.qml:59
290msgid ""
472msgid ""
291"If passphrase is entered incorrectly, your phone will conduct a factory "
473"If passphrase is entered incorrectly, your phone will conduct a factory "
292"reset and all personal data will be deleted."
474"reset and all personal data will be deleted."
293msgstr ""
475msgstr ""
294
476
295−#: qml/Greeter/NarrowView.qml:59
477+#: qml/Greeter/NarrowView.qml:60
296msgid ""
478msgid ""
297"If passcode is entered incorrectly, your phone will conduct a factory reset "
479"If passcode is entered incorrectly, your phone will conduct a factory reset "
298"and all personal data will be deleted."
480"and all personal data will be deleted."
299msgstr ""
481msgstr ""
300
482
301−#: qml/Greeter/NarrowView.qml:116
483+#: qml/Greeter/NarrowView.qml:129
302#, qt-format
484#, qt-format
303msgid "Enter %1"
485msgid "Enter %1"
304msgstr ""
486msgstr ""
305
487
306−#: qml/Greeter/NarrowView.qml:117
488+#: qml/Greeter/NarrowView.qml:130
307msgid "Enter passphrase"
489msgid "Enter passphrase"
308msgstr ""
490msgstr ""
309
491
310−#: qml/Greeter/NarrowView.qml:118
492+#: qml/Greeter/NarrowView.qml:131
311msgid "Enter passcode"
493msgid "Enter passcode"
312msgstr ""
494msgstr ""
313
495
314−#: qml/Greeter/NarrowView.qml:119
496+#: qml/Greeter/NarrowView.qml:135
315#, qt-format
497#, qt-format
316msgid "Sorry, incorrect %1"
498msgid "Sorry, incorrect %1"
317msgstr ""
499msgstr ""
318
500
319−#: qml/Greeter/NarrowView.qml:120
501+#: qml/Greeter/NarrowView.qml:136
320msgid "Sorry, incorrect passphrase"
502msgid "Sorry, incorrect passphrase"
321msgstr ""
503msgstr ""
322
504
323−#: qml/Greeter/NarrowView.qml:121
505+#: qml/Greeter/NarrowView.qml:137
324msgctxt "passphrase"
506msgctxt "passphrase"
325msgid "Please re-enter"
507msgid "Please re-enter"
326msgstr ""
508msgstr ""
327
509
328−#: qml/Greeter/NarrowView.qml:122
510+#: qml/Greeter/NarrowView.qml:138
329msgid "Sorry, incorrect passcode"
511msgid "Sorry, incorrect passcode"
330msgstr ""
512msgstr ""
331
513
@@ -400,18 +582,18 @@ msgstr ""
400msgid "Failed, tap to retry"
582msgid "Failed, tap to retry"
401msgstr ""
583msgstr ""
402
584
403−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
585+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
404−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
586+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
405msgctxt "Button: Send a reply message"
587msgctxt "Button: Send a reply message"
406msgid "Send"
588msgid "Send"
407msgstr ""
589msgstr ""
408
590
409−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
591+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
410msgctxt "Label: Hint in message indicator line edit"
592msgctxt "Label: Hint in message indicator line edit"
411msgid "Reply"
593msgid "Reply"
412msgstr ""
594msgstr ""
413
595
414−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
596+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
415msgctxt "Button: Call back on phone"
597msgctxt "Button: Call back on phone"
416msgid "Call back"
598msgid "Call back"
417msgstr ""
599msgstr ""
@@ -420,32 +602,12 @@ msgstr ""
420msgid "Drag using 3 fingers any application from one window to the other"
602msgid "Drag using 3 fingers any application from one window to the other"
421msgstr ""
603msgstr ""
422
604
423−#: qml/Tutorial/TutorialBottom.qml:78
424−msgid "Swipe up to add a contact"
425−msgstr ""
426−
427−#: qml/Tutorial/TutorialBottom.qml:80
428−msgid "Swipe up for favorite calculations"
429−msgstr ""
430−
431−#: qml/Tutorial/TutorialBottom.qml:82
432−msgid "Swipe up for recent calls"
433−msgstr ""
434−
435−#: qml/Tutorial/TutorialBottom.qml:84
436−msgid "Swipe up to create a message"
437−msgstr ""
438−
439−#: qml/Tutorial/TutorialBottom.qml:85
440−msgid "Swipe up to manage the app"
441−msgstr ""
442−
443−#: qml/Tutorial/TutorialLeftLong.qml:47
605+#: qml/Tutorial/TutorialLeftLong.qml:49
444msgid "Long swipe from the left edge to open the Today scope"
606msgid "Long swipe from the left edge to open the Today scope"
445msgstr ""
607msgstr ""
446
608
447#: qml/Tutorial/TutorialLeft.qml:47
609#: qml/Tutorial/TutorialLeft.qml:47
448−msgid "Swipe from the left edge to open the launcher"
610+msgid "Short swipe from the left edge to open the launcher"
449msgstr ""
611msgstr ""
450
612
451#: qml/Tutorial/TutorialRight.qml:55
613#: qml/Tutorial/TutorialRight.qml:55
@@ -453,15 +615,11 @@ msgid "Push your mouse against the right edge to view your open apps"
453msgstr ""
615msgstr ""
454
616
455#: qml/Tutorial/TutorialRight.qml:56
617#: qml/Tutorial/TutorialRight.qml:56
456−msgid "Short or long swipe from the right edge to view your open apps"
618+msgid "Swipe from the right edge to view your open apps"
457msgstr ""
619msgstr ""
458
620
459#: qml/Tutorial/TutorialTop.qml:53
621#: qml/Tutorial/TutorialTop.qml:53
460−msgid "Swipe from the top right edge to open the notification bar"
622+msgid "Swipe from the top edge to access notifications and quick settings"
461−msgstr ""
462−
463−#: qml/Tutorial/TutorialTop.qml:54
464−msgid "Swipe from the top edge to open the notification bar"
465msgstr ""
623msgstr ""
466
624
467#: qml/Wizard/Page.qml:54
625#: qml/Wizard/Page.qml:54
@@ -473,11 +631,11 @@ msgstr ""
473msgid "Language"
631msgid "Language"
474msgstr ""
632msgstr ""
475
633
476−#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
634+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
477−#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
635+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
478#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
636#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
479#: qml/Wizard/Pages/75-report-check.qml:84
637#: qml/Wizard/Pages/75-report-check.qml:84
480−#: qml/Wizard/Pages/passcode-desktop.qml:124
638+#: qml/Wizard/Pages/passcode-desktop.qml:141
481#: qml/Wizard/Pages/password-set.qml:141
639#: qml/Wizard/Pages/password-set.qml:141
482msgid "Next"
640msgid "Next"
483msgstr ""
641msgstr ""
@@ -539,7 +697,7 @@ msgstr ""
539msgid "Time Zone"
697msgid "Time Zone"
540msgstr ""
698msgstr ""
541
699
542−#: qml/Wizard/Pages/50-timezone.qml:178
700+#: qml/Wizard/Pages/50-timezone.qml:181
543msgid "Enter your city"
701msgid "Enter your city"
544msgstr ""
702msgstr ""
545
703
@@ -629,7 +787,7 @@ msgid "Service Terms"
629msgstr ""
787msgstr ""
630
788
631#: qml/Wizard/Pages/passcode-confirm.qml:43
789#: qml/Wizard/Pages/passcode-confirm.qml:43
632−#: qml/Wizard/Pages/passcode-desktop.qml:80
790+#: qml/Wizard/Pages/passcode-desktop.qml:96
633msgid "Confirm passcode"
791msgid "Confirm passcode"
634msgstr ""
792msgstr ""
635
793
@@ -646,24 +804,24 @@ msgstr ""
646msgid "Lock Screen Passcode"
804msgid "Lock Screen Passcode"
647msgstr ""
805msgstr ""
648
806
649−#: qml/Wizard/Pages/passcode-desktop.qml:56
807+#: qml/Wizard/Pages/passcode-desktop.qml:60
650msgid "Enter 4 numbers to setup your passcode"
808msgid "Enter 4 numbers to setup your passcode"
651msgstr ""
809msgstr ""
652
810
653−#: qml/Wizard/Pages/passcode-desktop.qml:65
811+#: qml/Wizard/Pages/passcode-desktop.qml:76
654#: qml/Wizard/Pages/passcode-set.qml:54
812#: qml/Wizard/Pages/passcode-set.qml:54
655msgid "Choose passcode"
813msgid "Choose passcode"
656msgstr ""
814msgstr ""
657
815
658−#: qml/Wizard/Pages/passcode-desktop.qml:105
816+#: qml/Wizard/Pages/passcode-desktop.qml:126
659msgid "Passcode too short"
817msgid "Passcode too short"
660msgstr ""
818msgstr ""
661
819
662−#: qml/Wizard/Pages/passcode-desktop.qml:107
820+#: qml/Wizard/Pages/passcode-desktop.qml:128
663msgid "Passcodes match"
821msgid "Passcodes match"
664msgstr ""
822msgstr ""
665
823
666−#: qml/Wizard/Pages/passcode-desktop.qml:109
824+#: qml/Wizard/Pages/passcode-desktop.qml:130
667msgid "Passcodes do not match"
825msgid "Passcodes do not match"
668msgstr ""
826msgstr ""
669
827
@@ -712,25 +870,29 @@ msgid "To proceed with no SIM tap Skip."
712msgstr ""
870msgstr ""
713
871
714#: qml/Wizard/PasswordMeter.qml:87
872#: qml/Wizard/PasswordMeter.qml:87
715−msgid "Passwords match"
873+msgid "Password too short"
716msgstr ""
874msgstr ""
717
875
718#: qml/Wizard/PasswordMeter.qml:89
876#: qml/Wizard/PasswordMeter.qml:89
877+msgid "Passwords match"
878+msgstr ""
879+
880+#: qml/Wizard/PasswordMeter.qml:91
719msgid "Passwords do not match"
881msgid "Passwords do not match"
720msgstr ""
882msgstr ""
721
883
722−#: qml/Wizard/PasswordMeter.qml:93
884+#: qml/Wizard/PasswordMeter.qml:95
723msgid "Strong password"
885msgid "Strong password"
724msgstr ""
886msgstr ""
725
887
726−#: qml/Wizard/PasswordMeter.qml:95
888+#: qml/Wizard/PasswordMeter.qml:97
727msgid "Fair password"
889msgid "Fair password"
728msgstr ""
890msgstr ""
729
891
730−#: qml/Wizard/PasswordMeter.qml:97
892+#: qml/Wizard/PasswordMeter.qml:99
731msgid "Weak password"
893msgid "Weak password"
732msgstr ""
894msgstr ""
733
895
734−#: qml/Wizard/PasswordMeter.qml:99
896+#: qml/Wizard/PasswordMeter.qml:101
735msgid "Very weak password"
897msgid "Very weak password"
736msgstr ""
898msgstr ""
po/ckb.po+262−100
@@ -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-05-18 11:19+0000\n"
10+"POT-Creation-Date: 2016-07-11 17:24+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,39 +15,39 @@ 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-05-19 05:50+0000\n"
18+"X-Launchpad-Export-Date: 2016-07-14 06:02+0000\n"
19−"X-Generator: Launchpad (build 18025)\n"
19+"X-Generator: Launchpad (build 18115)\n"
20
20
21−#: plugins/IntegratedLightDM/Greeter.cpp:112
21+#: plugins/LightDM/Greeter.cpp:123
22msgid "Password: "
22msgid "Password: "
23msgstr ""
23msgstr ""
24
24
25−#: plugins/Unity/Launcher/launcheritem.cpp:48
25+#: plugins/Unity/Launcher/launcheritem.cpp:49
26−#: plugins/Unity/Launcher/launcheritem.cpp:107
26+#: plugins/Unity/Launcher/launcheritem.cpp:108
27msgid "Pin shortcut"
27msgid "Pin shortcut"
28msgstr ""
28msgstr ""
29
29
30−#: plugins/Unity/Launcher/launcheritem.cpp:53
30+#: plugins/Unity/Launcher/launcheritem.cpp:54
31msgid "Quit"
31msgid "Quit"
32msgstr ""
32msgstr ""
33
33
34−#: plugins/Unity/Launcher/launcheritem.cpp:107
34+#: plugins/Unity/Launcher/launcheritem.cpp:108
35msgid "Unpin shortcut"
35msgid "Unpin shortcut"
36msgstr ""
36msgstr ""
37
37
38−#: qml/Components/DelayedLockscreen.qml:49
38+#: qml/Components/DelayedLockscreen.qml:50
39msgid "Device Locked"
39msgid "Device Locked"
40msgstr ""
40msgstr ""
41
41
42−#: qml/Components/DelayedLockscreen.qml:64
42+#: qml/Components/DelayedLockscreen.qml:65
43msgid "You have been locked out due to too many failed passphrase attempts."
43msgid "You have been locked out due to too many failed passphrase attempts."
44msgstr ""
44msgstr ""
45
45
46−#: qml/Components/DelayedLockscreen.qml:65
46+#: qml/Components/DelayedLockscreen.qml:66
47msgid "You have been locked out due to too many failed passcode attempts."
47msgid "You have been locked out due to too many failed passcode attempts."
48msgstr ""
48msgstr ""
49
49
50−#: qml/Components/DelayedLockscreen.qml:74
50+#: qml/Components/DelayedLockscreen.qml:75
51#, qt-format
51#, qt-format
52msgid "Please wait %1 minute and then try again…"
52msgid "Please wait %1 minute and then try again…"
53msgid_plural "Please wait %1 minutes and then try again…"
53msgid_plural "Please wait %1 minutes and then try again…"
@@ -74,7 +74,7 @@ msgid "Log Out"
74msgstr ""
74msgstr ""
75
75
76#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
76#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
77−#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
77+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
78#: qml/Wizard/Pages/passcode-set.qml:32
78#: qml/Wizard/Pages/passcode-set.qml:32
79msgid "Cancel"
79msgid "Cancel"
80msgstr ""
80msgstr ""
@@ -117,18 +117,188 @@ msgctxt "Button: Restart the system"
117msgid "Restart"
117msgid "Restart"
118msgstr ""
118msgstr ""
119
119
120+#: qml/Components/KeyboardShortcutsOverlay.qml:41
121+msgid "Keyboard Shortcuts"
122+msgstr ""
123+
124+#: qml/Components/KeyboardShortcutsOverlay.qml:55
125+msgid "Unity 8"
126+msgstr ""
127+
128+#: qml/Components/KeyboardShortcutsOverlay.qml:62
129+msgid "PrtScr"
130+msgstr ""
131+
132+#: qml/Components/KeyboardShortcutsOverlay.qml:67
133+msgid "Takes a screenshot."
134+msgstr ""
135+
136+#: qml/Components/KeyboardShortcutsOverlay.qml:75
137+msgid "Alt + PrtScr"
138+msgstr ""
139+
140+#: qml/Components/KeyboardShortcutsOverlay.qml:80
141+msgid "Takes a screenshot of a window."
142+msgstr ""
143+
144+#: qml/Components/KeyboardShortcutsOverlay.qml:88
145+msgid "Super + Space"
146+msgstr ""
147+
148+#: qml/Components/KeyboardShortcutsOverlay.qml:93
149+msgid "Switches to next keyboard layout."
150+msgstr ""
151+
152+#: qml/Components/KeyboardShortcutsOverlay.qml:101
153+msgid "Super + Shift + Space"
154+msgstr ""
155+
156+#: qml/Components/KeyboardShortcutsOverlay.qml:106
157+msgid "Switches to previous keyboard layout."
158+msgstr ""
159+
160+#: qml/Components/KeyboardShortcutsOverlay.qml:118
161+msgid "Launcher"
162+msgstr ""
163+
164+#: qml/Components/KeyboardShortcutsOverlay.qml:125
165+msgid "Super (Hold)"
166+msgstr ""
167+
168+#: qml/Components/KeyboardShortcutsOverlay.qml:130
169+msgid "Opens the launcher, displays shortcuts."
170+msgstr ""
171+
172+#: qml/Components/KeyboardShortcutsOverlay.qml:138
173+msgid "Alt + F1"
174+msgstr ""
175+
176+#: qml/Components/KeyboardShortcutsOverlay.qml:143
177+msgid "Opens launcher keyboard navigation mode."
178+msgstr ""
179+
180+#: qml/Components/KeyboardShortcutsOverlay.qml:151
181+msgid "Super + Tab"
182+msgstr ""
183+
184+#: qml/Components/KeyboardShortcutsOverlay.qml:156
185+msgid "Switches applications via the launcher."
186+msgstr ""
187+
188+#: qml/Components/KeyboardShortcutsOverlay.qml:164
189+msgid "Super + 0 to 9"
190+msgstr ""
191+
192+#: qml/Components/KeyboardShortcutsOverlay.qml:169
193+msgid "Same as clicking on a launcher icon."
194+msgstr ""
195+
196+#: qml/Components/KeyboardShortcutsOverlay.qml:181
197+msgid "Scopes"
198+msgstr ""
199+
200+#: qml/Components/KeyboardShortcutsOverlay.qml:188
201+msgid "Super (Tap)"
202+msgstr ""
203+
204+#: qml/Components/KeyboardShortcutsOverlay.qml:193
205+msgid "Opens the Scopes home."
206+msgstr ""
207+
208+#: qml/Components/KeyboardShortcutsOverlay.qml:209
209+msgid "Switching"
210+msgstr ""
211+
212+#: qml/Components/KeyboardShortcutsOverlay.qml:216
213+msgid "Alt + Tab"
214+msgstr ""
215+
216+#: qml/Components/KeyboardShortcutsOverlay.qml:221
217+msgid "Switches between applications."
218+msgstr ""
219+
220+#: qml/Components/KeyboardShortcutsOverlay.qml:229
221+msgid "Super + W"
222+msgstr ""
223+
224+#: qml/Components/KeyboardShortcutsOverlay.qml:234
225+msgid "Opens the desktop spread."
226+msgstr ""
227+
228+#: qml/Components/KeyboardShortcutsOverlay.qml:242
229+msgid "Cursor Left or Right"
230+msgstr ""
231+
232+#: qml/Components/KeyboardShortcutsOverlay.qml:247
233+msgid "Moves the focus."
234+msgstr ""
235+
236+#: qml/Components/KeyboardShortcutsOverlay.qml:259
237+msgid "Windows"
238+msgstr ""
239+
240+#: qml/Components/KeyboardShortcutsOverlay.qml:266
241+msgid "Ctrl + Super + D"
242+msgstr ""
243+
244+#: qml/Components/KeyboardShortcutsOverlay.qml:271
245+msgid "Minimizes all windows."
246+msgstr ""
247+
248+#: qml/Components/KeyboardShortcutsOverlay.qml:279
249+msgid "Ctrl + Super + Up"
250+msgstr ""
251+
252+#: qml/Components/KeyboardShortcutsOverlay.qml:284
253+msgid "Maximizes the current window."
254+msgstr ""
255+
256+#: qml/Components/KeyboardShortcutsOverlay.qml:292
257+msgid "Ctrl + Super + Down"
258+msgstr ""
259+
260+#: qml/Components/KeyboardShortcutsOverlay.qml:297
261+msgid "Minimizes or restores the current window."
262+msgstr ""
263+
264+#: qml/Components/KeyboardShortcutsOverlay.qml:305
265+msgid "Ctrl + Super + Left or Right"
266+msgstr ""
267+
268+#: qml/Components/KeyboardShortcutsOverlay.qml:310
269+msgid "Semi-maximizes the current window."
270+msgstr ""
271+
272+#: qml/Components/KeyboardShortcutsOverlay.qml:318
273+msgid "Alt + F4"
274+msgstr ""
275+
276+#: qml/Components/KeyboardShortcutsOverlay.qml:323
277+msgid "Closes the current window."
278+msgstr ""
279+
120−#: qml/Components/Lockscreen.qml:231
280+#: qml/Components/Lockscreen.qml:239
121msgid "Return to Call"
281msgid "Return to Call"
122msgstr ""
282msgstr ""
123
283
124−#: qml/Components/Lockscreen.qml:231
284+#: qml/Components/Lockscreen.qml:239
125msgid "Emergency Call"
285msgid "Emergency Call"
126msgstr "هێڵی فریاگوزاری"
286msgstr "هێڵی فریاگوزاری"
127
287
128−#: qml/Components/Lockscreen.qml:263
288+#: qml/Components/Lockscreen.qml:271
129msgid "OK"
289msgid "OK"
130msgstr ""
290msgstr ""
131
291
292+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
293+#, qt-format
294+msgid "%1:%2:%3"
295+msgstr ""
296+
297+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
298+#, qt-format
299+msgid "%1:%2"
300+msgstr ""
301+
132#: qml/Components/ModeSwitchWarningDialog.qml:32
302#: qml/Components/ModeSwitchWarningDialog.qml:32
133msgid "Apps may have unsaved data:"
303msgid "Apps may have unsaved data:"
134msgstr ""
304msgstr ""
@@ -155,26 +325,30 @@ msgstr ""
155msgid "Close all"
325msgid "Close all"
156msgstr ""
326msgstr ""
157
327
328+#: qml/Components/SharingPicker.qml:54
329+msgid "Preview Share Item"
330+msgstr ""
331+
158−#: qml/Dash/DashPageHeader.qml:337
332+#: qml/Dash/DashPageHeader.qml:333
159msgctxt "Button: Open the Ubuntu Store"
333msgctxt "Button: Open the Ubuntu Store"
160msgid "Store"
334msgid "Store"
161msgstr ""
335msgstr ""
162
336
163−#: qml/Dash/DashPageHeader.qml:344
337+#: qml/Dash/DashPageHeader.qml:340
164msgctxt "Button: Start a search in the current dash scope"
338msgctxt "Button: Start a search in the current dash scope"
165msgid "Search"
339msgid "Search"
166msgstr ""
340msgstr ""
167
341
168−#: qml/Dash/DashPageHeader.qml:354
342+#: qml/Dash/DashPageHeader.qml:350
169msgctxt "Button: Show the current dash scope settings"
343msgctxt "Button: Show the current dash scope settings"
170msgid "Settings"
344msgid "Settings"
171msgstr ""
345msgstr ""
172
346
173−#: qml/Dash/DashPageHeader.qml:361
347+#: qml/Dash/DashPageHeader.qml:357
174msgid "Remove from Favorites"
348msgid "Remove from Favorites"
175msgstr ""
349msgstr ""
176
350
177−#: qml/Dash/DashPageHeader.qml:361
351+#: qml/Dash/DashPageHeader.qml:357
178msgid "Add to Favorites"
352msgid "Add to Favorites"
179msgstr ""
353msgstr ""
180
354
@@ -186,24 +360,24 @@ msgstr ""
186msgid "Reset"
360msgid "Reset"
187msgstr ""
361msgstr ""
188
362
189−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:764
363+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
190msgid "Show less"
364msgid "Show less"
191msgstr ""
365msgstr ""
192
366
193−#: qml/Dash/GenericScopeView.qml:579
367+#: qml/Dash/GenericScopeView.qml:580
194msgid "Show all"
368msgid "Show all"
195msgstr ""
369msgstr ""
196
370
197−#: qml/Dash/GenericScopeView.qml:636
371+#: qml/Dash/GenericScopeView.qml:637
198msgctxt "Label: Hint for dash search line edit"
372msgctxt "Label: Hint for dash search line edit"
199msgid "Search"
373msgid "Search"
200msgstr ""
374msgstr ""
201
375
202−#: qml/Dash/PageHeaderExtraPanel.qml:55
376+#: qml/Dash/PageHeaderExtraPanel.qml:56
203msgid "Recent Searches"
377msgid "Recent Searches"
204msgstr ""
378msgstr ""
205
379
206−#: qml/Dash/PageHeaderExtraPanel.qml:66
380+#: qml/Dash/PageHeaderExtraPanel.qml:67
207msgid "Clear All"
381msgid "Clear All"
208msgstr ""
382msgstr ""
209
383
@@ -216,22 +390,18 @@ msgid "Less..."
216msgstr ""
390msgstr ""
217
391
218#: qml/Dash/Previews/PreviewCommentInput.qml:68
392#: qml/Dash/Previews/PreviewCommentInput.qml:68
219−#: qml/Dash/Previews/PreviewRatingInput.qml:174
393+#: qml/Dash/Previews/PreviewRatingInput.qml:175
220msgid "Send"
394msgid "Send"
221msgstr "ناردن"
395msgstr "ناردن"
222
396
223−#: qml/Dash/Previews/PreviewRatingInput.qml:84
397+#: qml/Dash/Previews/PreviewRatingInput.qml:82
224msgid "Rate this"
398msgid "Rate this"
225msgstr "پلە دابنی بۆی"
399msgstr "پلە دابنی بۆی"
226
400
227−#: qml/Dash/Previews/PreviewRatingInput.qml:129
401+#: qml/Dash/Previews/PreviewRatingInput.qml:157
228msgid "Add a review"
402msgid "Add a review"
229msgstr "پێداچوونەوە زۆر بکە"
403msgstr "پێداچوونەوە زۆر بکە"
230
404
231−#: qml/Dash/Previews/PreviewSharing.qml:66
232−msgid "Preview Share Item"
233−msgstr ""
234−
235#: qml/Dash/PullToRefreshScopeStyle.qml:55
405#: qml/Dash/PullToRefreshScopeStyle.qml:55
236msgid "Pull to refresh…"
406msgid "Pull to refresh…"
237msgstr ""
407msgstr ""
@@ -244,88 +414,100 @@ msgstr ""
244msgid "Enable location data"
414msgid "Enable location data"
245msgstr ""
415msgstr ""
246
416
247−#: qml/Dash/ScopesList.qml:67
417+#: qml/Dash/ScopesList.qml:55
248msgid "Manage"
418msgid "Manage"
249msgstr ""
419msgstr ""
250
420
251−#: qml/Dash/ScopesList.qml:113
421+#: qml/Dash/ScopesList.qml:102
252msgid "Home"
422msgid "Home"
253msgstr ""
423msgstr ""
254
424
255−#: qml/Dash/ScopesList.qml:114
425+#: qml/Dash/ScopesList.qml:103
256msgid "Also installed"
426msgid "Also installed"
257msgstr ""
427msgstr ""
258
428
259−#: qml/DisabledScreenNotice.qml:104
429+#: qml/DisabledScreenNotice.qml:109
260msgid ""
430msgid ""
261"Your device is now connected to an external display. Use this screen as a "
431"Your device is now connected to an external display. Use this screen as a "
262"touch pad to interact with the pointer."
432"touch pad to interact with the pointer."
263msgstr ""
433msgstr ""
264
434
265−#: qml/Greeter/CoverPage.qml:118
435+#: qml/Greeter/CoverPage.qml:127
266msgid "Unlock"
436msgid "Unlock"
267msgstr ""
437msgstr ""
268
438
439+#: qml/Greeter/Greeter.qml:555
440+msgid "Try again"
441+msgstr ""
442+
269−#: qml/Greeter/LoginList.qml:239
443+#: qml/Greeter/LoginList.qml:63
444+msgid "Passphrase"
445+msgstr ""
446+
447+#: qml/Greeter/LoginList.qml:64
448+msgid "Passcode"
449+msgstr ""
450+
451+#: qml/Greeter/LoginList.qml:87
270msgid "Retry"
452msgid "Retry"
271msgstr ""
453msgstr ""
272
454
273−#: qml/Greeter/LoginList.qml:240
455+#: qml/Greeter/LoginList.qml:88
274−msgid "Tap to unlock"
456+msgid "Log In"
275msgstr ""
457msgstr ""
276
458
277−#: qml/Greeter/NarrowView.qml:54
459+#: qml/Greeter/NarrowView.qml:55
278msgid "Sorry, incorrect passphrase."
460msgid "Sorry, incorrect passphrase."
279msgstr ""
461msgstr ""
280
462
281−#: qml/Greeter/NarrowView.qml:55
463+#: qml/Greeter/NarrowView.qml:56
282msgid "Sorry, incorrect passcode."
464msgid "Sorry, incorrect passcode."
283msgstr ""
465msgstr ""
284
466
285−#: qml/Greeter/NarrowView.qml:56
467+#: qml/Greeter/NarrowView.qml:57
286msgid "This will be your last attempt."
468msgid "This will be your last attempt."
287msgstr ""
469msgstr ""
288
470
289−#: qml/Greeter/NarrowView.qml:58
471+#: qml/Greeter/NarrowView.qml:59
290msgid ""
472msgid ""
291"If passphrase is entered incorrectly, your phone will conduct a factory "
473"If passphrase is entered incorrectly, your phone will conduct a factory "
292"reset and all personal data will be deleted."
474"reset and all personal data will be deleted."
293msgstr ""
475msgstr ""
294
476
295−#: qml/Greeter/NarrowView.qml:59
477+#: qml/Greeter/NarrowView.qml:60
296msgid ""
478msgid ""
297"If passcode is entered incorrectly, your phone will conduct a factory reset "
479"If passcode is entered incorrectly, your phone will conduct a factory reset "
298"and all personal data will be deleted."
480"and all personal data will be deleted."
299msgstr ""
481msgstr ""
300
482
301−#: qml/Greeter/NarrowView.qml:116
483+#: qml/Greeter/NarrowView.qml:129
302#, qt-format
484#, qt-format
303msgid "Enter %1"
485msgid "Enter %1"
304msgstr ""
486msgstr ""
305
487
306−#: qml/Greeter/NarrowView.qml:117
488+#: qml/Greeter/NarrowView.qml:130
307msgid "Enter passphrase"
489msgid "Enter passphrase"
308msgstr ""
490msgstr ""
309
491
310−#: qml/Greeter/NarrowView.qml:118
492+#: qml/Greeter/NarrowView.qml:131
311msgid "Enter passcode"
493msgid "Enter passcode"
312msgstr ""
494msgstr ""
313
495
314−#: qml/Greeter/NarrowView.qml:119
496+#: qml/Greeter/NarrowView.qml:135
315#, qt-format
497#, qt-format
316msgid "Sorry, incorrect %1"
498msgid "Sorry, incorrect %1"
317msgstr ""
499msgstr ""
318
500
319−#: qml/Greeter/NarrowView.qml:120
501+#: qml/Greeter/NarrowView.qml:136
320msgid "Sorry, incorrect passphrase"
502msgid "Sorry, incorrect passphrase"
321msgstr ""
503msgstr ""
322
504
323−#: qml/Greeter/NarrowView.qml:121
505+#: qml/Greeter/NarrowView.qml:137
324msgctxt "passphrase"
506msgctxt "passphrase"
325msgid "Please re-enter"
507msgid "Please re-enter"
326msgstr ""
508msgstr ""
327
509
328−#: qml/Greeter/NarrowView.qml:122
510+#: qml/Greeter/NarrowView.qml:138
329msgid "Sorry, incorrect passcode"
511msgid "Sorry, incorrect passcode"
330msgstr ""
512msgstr ""
331
513
@@ -400,18 +582,18 @@ msgstr ""
400msgid "Failed, tap to retry"
582msgid "Failed, tap to retry"
401msgstr ""
583msgstr ""
402
584
403−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
585+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
404−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
586+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
405msgctxt "Button: Send a reply message"
587msgctxt "Button: Send a reply message"
406msgid "Send"
588msgid "Send"
407msgstr ""
589msgstr ""
408
590
409−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
591+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
410msgctxt "Label: Hint in message indicator line edit"
592msgctxt "Label: Hint in message indicator line edit"
411msgid "Reply"
593msgid "Reply"
412msgstr ""
594msgstr ""
413
595
414−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
596+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
415msgctxt "Button: Call back on phone"
597msgctxt "Button: Call back on phone"
416msgid "Call back"
598msgid "Call back"
417msgstr ""
599msgstr ""
@@ -420,32 +602,12 @@ msgstr ""
420msgid "Drag using 3 fingers any application from one window to the other"
602msgid "Drag using 3 fingers any application from one window to the other"
421msgstr ""
603msgstr ""
422
604
423−#: qml/Tutorial/TutorialBottom.qml:78
424−msgid "Swipe up to add a contact"
425−msgstr ""
426−
427−#: qml/Tutorial/TutorialBottom.qml:80
428−msgid "Swipe up for favorite calculations"
429−msgstr ""
430−
431−#: qml/Tutorial/TutorialBottom.qml:82
432−msgid "Swipe up for recent calls"
433−msgstr ""
434−
435−#: qml/Tutorial/TutorialBottom.qml:84
436−msgid "Swipe up to create a message"
437−msgstr ""
438−
439−#: qml/Tutorial/TutorialBottom.qml:85
440−msgid "Swipe up to manage the app"
441−msgstr ""
442−
443−#: qml/Tutorial/TutorialLeftLong.qml:47
605+#: qml/Tutorial/TutorialLeftLong.qml:49
444msgid "Long swipe from the left edge to open the Today scope"
606msgid "Long swipe from the left edge to open the Today scope"
445msgstr ""
607msgstr ""
446
608
447#: qml/Tutorial/TutorialLeft.qml:47
609#: qml/Tutorial/TutorialLeft.qml:47
448−msgid "Swipe from the left edge to open the launcher"
610+msgid "Short swipe from the left edge to open the launcher"
449msgstr ""
611msgstr ""
450
612
451#: qml/Tutorial/TutorialRight.qml:55
613#: qml/Tutorial/TutorialRight.qml:55
@@ -453,15 +615,11 @@ msgid "Push your mouse against the right edge to view your open apps"
453msgstr ""
615msgstr ""
454
616
455#: qml/Tutorial/TutorialRight.qml:56
617#: qml/Tutorial/TutorialRight.qml:56
456−msgid "Short or long swipe from the right edge to view your open apps"
618+msgid "Swipe from the right edge to view your open apps"
457msgstr ""
619msgstr ""
458
620
459#: qml/Tutorial/TutorialTop.qml:53
621#: qml/Tutorial/TutorialTop.qml:53
460−msgid "Swipe from the top right edge to open the notification bar"
622+msgid "Swipe from the top edge to access notifications and quick settings"
461−msgstr ""
462−
463−#: qml/Tutorial/TutorialTop.qml:54
464−msgid "Swipe from the top edge to open the notification bar"
465msgstr ""
623msgstr ""
466
624
467#: qml/Wizard/Page.qml:54
625#: qml/Wizard/Page.qml:54
@@ -473,11 +631,11 @@ msgstr ""
473msgid "Language"
631msgid "Language"
474msgstr ""
632msgstr ""
475
633
476−#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
634+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
477−#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
635+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
478#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
636#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
479#: qml/Wizard/Pages/75-report-check.qml:84
637#: qml/Wizard/Pages/75-report-check.qml:84
480−#: qml/Wizard/Pages/passcode-desktop.qml:124
638+#: qml/Wizard/Pages/passcode-desktop.qml:141
481#: qml/Wizard/Pages/password-set.qml:141
639#: qml/Wizard/Pages/password-set.qml:141
482msgid "Next"
640msgid "Next"
483msgstr ""
641msgstr ""
@@ -539,7 +697,7 @@ msgstr ""
539msgid "Time Zone"
697msgid "Time Zone"
540msgstr ""
698msgstr ""
541
699
542−#: qml/Wizard/Pages/50-timezone.qml:178
700+#: qml/Wizard/Pages/50-timezone.qml:181
543msgid "Enter your city"
701msgid "Enter your city"
544msgstr ""
702msgstr ""
545
703
@@ -629,7 +787,7 @@ msgid "Service Terms"
629msgstr ""
787msgstr ""
630
788
631#: qml/Wizard/Pages/passcode-confirm.qml:43
789#: qml/Wizard/Pages/passcode-confirm.qml:43
632−#: qml/Wizard/Pages/passcode-desktop.qml:80
790+#: qml/Wizard/Pages/passcode-desktop.qml:96
633msgid "Confirm passcode"
791msgid "Confirm passcode"
634msgstr ""
792msgstr ""
635
793
@@ -646,24 +804,24 @@ msgstr ""
646msgid "Lock Screen Passcode"
804msgid "Lock Screen Passcode"
647msgstr ""
805msgstr ""
648
806
649−#: qml/Wizard/Pages/passcode-desktop.qml:56
807+#: qml/Wizard/Pages/passcode-desktop.qml:60
650msgid "Enter 4 numbers to setup your passcode"
808msgid "Enter 4 numbers to setup your passcode"
651msgstr ""
809msgstr ""
652
810
653−#: qml/Wizard/Pages/passcode-desktop.qml:65
811+#: qml/Wizard/Pages/passcode-desktop.qml:76
654#: qml/Wizard/Pages/passcode-set.qml:54
812#: qml/Wizard/Pages/passcode-set.qml:54
655msgid "Choose passcode"
813msgid "Choose passcode"
656msgstr ""
814msgstr ""
657
815
658−#: qml/Wizard/Pages/passcode-desktop.qml:105
816+#: qml/Wizard/Pages/passcode-desktop.qml:126
659msgid "Passcode too short"
817msgid "Passcode too short"
660msgstr ""
818msgstr ""
661
819
662−#: qml/Wizard/Pages/passcode-desktop.qml:107
820+#: qml/Wizard/Pages/passcode-desktop.qml:128
663msgid "Passcodes match"
821msgid "Passcodes match"
664msgstr ""
822msgstr ""
665
823
666−#: qml/Wizard/Pages/passcode-desktop.qml:109
824+#: qml/Wizard/Pages/passcode-desktop.qml:130
667msgid "Passcodes do not match"
825msgid "Passcodes do not match"
668msgstr ""
826msgstr ""
669
827
@@ -712,26 +870,30 @@ msgid "To proceed with no SIM tap Skip."
712msgstr ""
870msgstr ""
713
871
714#: qml/Wizard/PasswordMeter.qml:87
872#: qml/Wizard/PasswordMeter.qml:87
715−msgid "Passwords match"
873+msgid "Password too short"
716msgstr ""
874msgstr ""
717
875
718#: qml/Wizard/PasswordMeter.qml:89
876#: qml/Wizard/PasswordMeter.qml:89
877+msgid "Passwords match"
878+msgstr ""
879+
880+#: qml/Wizard/PasswordMeter.qml:91
719msgid "Passwords do not match"
881msgid "Passwords do not match"
720msgstr ""
882msgstr ""
721
883
722−#: qml/Wizard/PasswordMeter.qml:93
884+#: qml/Wizard/PasswordMeter.qml:95
723msgid "Strong password"
885msgid "Strong password"
724msgstr ""
886msgstr ""
725
887
726−#: qml/Wizard/PasswordMeter.qml:95
888+#: qml/Wizard/PasswordMeter.qml:97
727msgid "Fair password"
889msgid "Fair password"
728msgstr ""
890msgstr ""
729
891
730−#: qml/Wizard/PasswordMeter.qml:97
892+#: qml/Wizard/PasswordMeter.qml:99
731msgid "Weak password"
893msgid "Weak password"
732msgstr ""
894msgstr ""
733
895
734−#: qml/Wizard/PasswordMeter.qml:99
896+#: qml/Wizard/PasswordMeter.qml:101
735msgid "Very weak password"
897msgid "Very weak password"
736msgstr ""
898msgstr ""
737
899
po/co.ponew file+964
@@ -0,0 +1,964 @@
1+# Corsican translation for unity8
2+# Copyright (c) 2016 Rosetta Contributors and Canonical Ltd 2016
3+# This file is distributed under the same license as the unity8 package.
4+# FIRST AUTHOR <EMAIL@ADDRESS>, 2016.
5+#
6+msgid ""
7+msgstr ""
8+"Project-Id-Version: unity8\n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10+"POT-Creation-Date: 2016-07-11 17:24+0000\n"
11+"PO-Revision-Date: 2016-05-24 10:40+0000\n"
12+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13+"Language-Team: Corsican <co@li.org>\n"
14+"MIME-Version: 1.0\n"
15+"Content-Type: text/plain; charset=UTF-8\n"
16+"Content-Transfer-Encoding: 8bit\n"
17+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2016-07-14 06:01+0000\n"
19+"X-Generator: Launchpad (build 18115)\n"
20+
21+#: plugins/LightDM/Greeter.cpp:123
22+msgid "Password: "
23+msgstr "Parolla d'ordine: "
24+
25+#: plugins/Unity/Launcher/launcheritem.cpp:49
26+#: plugins/Unity/Launcher/launcheritem.cpp:108
27+msgid "Pin shortcut"
28+msgstr "Fissà l'accurtatoghju"
29+
30+#: plugins/Unity/Launcher/launcheritem.cpp:54
31+msgid "Quit"
32+msgstr "Abbandunà"
33+
34+#: plugins/Unity/Launcher/launcheritem.cpp:108
35+msgid "Unpin shortcut"
36+msgstr "Toglie l'accurtatoghju"
37+
38+#: qml/Components/DelayedLockscreen.qml:50
39+msgid "Device Locked"
40+msgstr "Dispusitivu bluccatu"
41+
42+#: qml/Components/DelayedLockscreen.qml:65
43+msgid "You have been locked out due to too many failed passphrase attempts."
44+msgstr ""
45+"Site stati bluccati per troppi tentativi fallati d'inserimentu di a frasa "
46+"d'ordine."
47+
48+#: qml/Components/DelayedLockscreen.qml:66
49+msgid "You have been locked out due to too many failed passcode attempts."
50+msgstr ""
51+"Site stati bluccati per troppi tentativi fallati d'inserimentu di u codice "
52+"d'accessu."
53+
54+#: qml/Components/DelayedLockscreen.qml:75
55+#, qt-format
56+msgid "Please wait %1 minute and then try again…"
57+msgid_plural "Please wait %1 minutes and then try again…"
58+msgstr[0] "Aspettà %1 minutu è po turnà à pruvà…"
59+msgstr[1] "Aspettà %1 minuti è po turnà à pruvà…"
60+
61+#: qml/Components/Dialogs.qml:144
62+msgctxt "Title: Lock/Log out dialog"
63+msgid "Log out"
64+msgstr "Escì"
65+
66+#: qml/Components/Dialogs.qml:145
67+msgid "Are you sure you want to log out?"
68+msgstr "Site sicuri di vulè escì?"
69+
70+#: qml/Components/Dialogs.qml:147
71+msgctxt "Button: Lock the system"
72+msgid "Lock"
73+msgstr "Bluccà"
74+
75+#: qml/Components/Dialogs.qml:154
76+msgctxt "Button: Log out from the system"
77+msgid "Log Out"
78+msgstr "Escì"
79+
80+#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
81+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
82+#: qml/Wizard/Pages/passcode-set.qml:32
83+msgid "Cancel"
84+msgstr "Annullà"
85+
86+#: qml/Components/Dialogs.qml:173
87+msgctxt "Title: Reboot dialog"
88+msgid "Reboot"
89+msgstr "Turnà ad avvià"
90+
91+#: qml/Components/Dialogs.qml:174
92+msgid "Are you sure you want to reboot?"
93+msgstr "Site sicuri di vulè turnà ad avvià?"
94+
95+#: qml/Components/Dialogs.qml:176
96+msgid "No"
97+msgstr "Nò"
98+
99+#: qml/Components/Dialogs.qml:182
100+msgid "Yes"
101+msgstr "Iè"
102+
103+#: qml/Components/Dialogs.qml:197
104+msgctxt "Title: Power off/Restart dialog"
105+msgid "Power"
106+msgstr "Alimentazione"
107+
108+#: qml/Components/Dialogs.qml:198
109+msgid ""
110+"Are you sure you would like\n"
111+"to power off?"
112+msgstr ""
113+"Site sicuri di vulè\n"
114+"spenghje?"
115+
116+#: qml/Components/Dialogs.qml:200
117+msgctxt "Button: Power off the system"
118+msgid "Power off"
119+msgstr "Spenghje"
120+
121+#: qml/Components/Dialogs.qml:209
122+msgctxt "Button: Restart the system"
123+msgid "Restart"
124+msgstr "Turnà ad avvià"
125+
126+#: qml/Components/KeyboardShortcutsOverlay.qml:41
127+msgid "Keyboard Shortcuts"
128+msgstr ""
129+
130+#: qml/Components/KeyboardShortcutsOverlay.qml:55
131+msgid "Unity 8"
132+msgstr ""
133+
134+#: qml/Components/KeyboardShortcutsOverlay.qml:62
135+msgid "PrtScr"
136+msgstr ""
137+
138+#: qml/Components/KeyboardShortcutsOverlay.qml:67
139+msgid "Takes a screenshot."
140+msgstr ""
141+
142+#: qml/Components/KeyboardShortcutsOverlay.qml:75
143+msgid "Alt + PrtScr"
144+msgstr ""
145+
146+#: qml/Components/KeyboardShortcutsOverlay.qml:80
147+msgid "Takes a screenshot of a window."
148+msgstr ""
149+
150+#: qml/Components/KeyboardShortcutsOverlay.qml:88
151+msgid "Super + Space"
152+msgstr ""
153+
154+#: qml/Components/KeyboardShortcutsOverlay.qml:93
155+msgid "Switches to next keyboard layout."
156+msgstr ""
157+
158+#: qml/Components/KeyboardShortcutsOverlay.qml:101
159+msgid "Super + Shift + Space"
160+msgstr ""
161+
162+#: qml/Components/KeyboardShortcutsOverlay.qml:106
163+msgid "Switches to previous keyboard layout."
164+msgstr ""
165+
166+#: qml/Components/KeyboardShortcutsOverlay.qml:118
167+msgid "Launcher"
168+msgstr ""
169+
170+#: qml/Components/KeyboardShortcutsOverlay.qml:125
171+msgid "Super (Hold)"
172+msgstr ""
173+
174+#: qml/Components/KeyboardShortcutsOverlay.qml:130
175+msgid "Opens the launcher, displays shortcuts."
176+msgstr ""
177+
178+#: qml/Components/KeyboardShortcutsOverlay.qml:138
179+msgid "Alt + F1"
180+msgstr ""
181+
182+#: qml/Components/KeyboardShortcutsOverlay.qml:143
183+msgid "Opens launcher keyboard navigation mode."
184+msgstr ""
185+
186+#: qml/Components/KeyboardShortcutsOverlay.qml:151
187+msgid "Super + Tab"
188+msgstr ""
189+
190+#: qml/Components/KeyboardShortcutsOverlay.qml:156
191+msgid "Switches applications via the launcher."
192+msgstr ""
193+
194+#: qml/Components/KeyboardShortcutsOverlay.qml:164
195+msgid "Super + 0 to 9"
196+msgstr ""
197+
198+#: qml/Components/KeyboardShortcutsOverlay.qml:169
199+msgid "Same as clicking on a launcher icon."
200+msgstr ""
201+
202+#: qml/Components/KeyboardShortcutsOverlay.qml:181
203+msgid "Scopes"
204+msgstr ""
205+
206+#: qml/Components/KeyboardShortcutsOverlay.qml:188
207+msgid "Super (Tap)"
208+msgstr ""
209+
210+#: qml/Components/KeyboardShortcutsOverlay.qml:193
211+msgid "Opens the Scopes home."
212+msgstr ""
213+
214+#: qml/Components/KeyboardShortcutsOverlay.qml:209
215+msgid "Switching"
216+msgstr ""
217+
218+#: qml/Components/KeyboardShortcutsOverlay.qml:216
219+msgid "Alt + Tab"
220+msgstr ""
221+
222+#: qml/Components/KeyboardShortcutsOverlay.qml:221
223+msgid "Switches between applications."
224+msgstr ""
225+
226+#: qml/Components/KeyboardShortcutsOverlay.qml:229
227+msgid "Super + W"
228+msgstr ""
229+
230+#: qml/Components/KeyboardShortcutsOverlay.qml:234
231+msgid "Opens the desktop spread."
232+msgstr ""
233+
234+#: qml/Components/KeyboardShortcutsOverlay.qml:242
235+msgid "Cursor Left or Right"
236+msgstr ""
237+
238+#: qml/Components/KeyboardShortcutsOverlay.qml:247
239+msgid "Moves the focus."
240+msgstr ""
241+
242+#: qml/Components/KeyboardShortcutsOverlay.qml:259
243+msgid "Windows"
244+msgstr ""
245+
246+#: qml/Components/KeyboardShortcutsOverlay.qml:266
247+msgid "Ctrl + Super + D"
248+msgstr ""
249+
250+#: qml/Components/KeyboardShortcutsOverlay.qml:271
251+msgid "Minimizes all windows."
252+msgstr ""
253+
254+#: qml/Components/KeyboardShortcutsOverlay.qml:279
255+msgid "Ctrl + Super + Up"
256+msgstr ""
257+
258+#: qml/Components/KeyboardShortcutsOverlay.qml:284
259+msgid "Maximizes the current window."
260+msgstr ""
261+
262+#: qml/Components/KeyboardShortcutsOverlay.qml:292
263+msgid "Ctrl + Super + Down"
264+msgstr ""
265+
266+#: qml/Components/KeyboardShortcutsOverlay.qml:297
267+msgid "Minimizes or restores the current window."
268+msgstr ""
269+
270+#: qml/Components/KeyboardShortcutsOverlay.qml:305
271+msgid "Ctrl + Super + Left or Right"
272+msgstr ""
273+
274+#: qml/Components/KeyboardShortcutsOverlay.qml:310
275+msgid "Semi-maximizes the current window."
276+msgstr ""
277+
278+#: qml/Components/KeyboardShortcutsOverlay.qml:318
279+msgid "Alt + F4"
280+msgstr ""
281+
282+#: qml/Components/KeyboardShortcutsOverlay.qml:323
283+msgid "Closes the current window."
284+msgstr ""
285+
286+#: qml/Components/Lockscreen.qml:239
287+msgid "Return to Call"
288+msgstr "Turnà à a Chjamata"
289+
290+#: qml/Components/Lockscreen.qml:239
291+msgid "Emergency Call"
292+msgstr "Chjamata d'emergenza"
293+
294+#: qml/Components/Lockscreen.qml:271
295+msgid "OK"
296+msgstr "OK"
297+
298+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
299+#, qt-format
300+msgid "%1:%2:%3"
301+msgstr ""
302+
303+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
304+#, qt-format
305+msgid "%1:%2"
306+msgstr ""
307+
308+#: qml/Components/ModeSwitchWarningDialog.qml:32
309+msgid "Apps may have unsaved data:"
310+msgstr "E app puderebbenu avè dati micca salvati:"
311+
312+#: qml/Components/ModeSwitchWarningDialog.qml:57
313+msgctxt ""
314+"Re-dock means connect the device again to an external screen/mouse/keyboard"
315+msgid "Re-dock, save your work and close these apps to continue."
316+msgstr ""
317+"Turnà à cullegà, salvà u travagliu fattu è chjode sse applicazioni per "
318+"continuà."
319+
320+#: qml/Components/ModeSwitchWarningDialog.qml:63
321+msgid "Or force close now (unsaved data will be lost)."
322+msgstr "O furzà a chjusura avà (i dati micca salvati seranu perduti)."
323+
324+#: qml/Components/ModeSwitchWarningDialog.qml:75
325+msgid "OK, I will reconnect"
326+msgstr "OK, sto cunnettendumi..."
327+
328+#: qml/Components/ModeSwitchWarningDialog.qml:76
329+msgid "Reconnect now!"
330+msgstr "Turnà à cunnettesi avà!"
331+
332+#: qml/Components/ModeSwitchWarningDialog.qml:88
333+msgid "Close all"
334+msgstr "Chjode tuttu"
335+
336+#: qml/Components/SharingPicker.qml:54
337+msgid "Preview Share Item"
338+msgstr "Anteprima elementi da sparte"
339+
340+#: qml/Dash/DashPageHeader.qml:333
341+msgctxt "Button: Open the Ubuntu Store"
342+msgid "Store"
343+msgstr "Buttega"
344+
345+#: qml/Dash/DashPageHeader.qml:340
346+msgctxt "Button: Start a search in the current dash scope"
347+msgid "Search"
348+msgstr "Circà"
349+
350+#: qml/Dash/DashPageHeader.qml:350
351+msgctxt "Button: Show the current dash scope settings"
352+msgid "Settings"
353+msgstr "Parametri"
354+
355+#: qml/Dash/DashPageHeader.qml:357
356+msgid "Remove from Favorites"
357+msgstr "Toglie da i Favuriti"
358+
359+#: qml/Dash/DashPageHeader.qml:357
360+msgid "Add to Favorites"
361+msgstr "Aghjustà à i Favuriti"
362+
363+#: qml/Dash/FiltersPopover.qml:60
364+msgid "Refine your results"
365+msgstr "Raffinà i risultati"
366+
367+#: qml/Dash/FiltersPopover.qml:69
368+msgid "Reset"
369+msgstr "Re-inizializzà"
370+
371+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
372+msgid "Show less"
373+msgstr ""
374+
375+#: qml/Dash/GenericScopeView.qml:580
376+msgid "Show all"
377+msgstr ""
378+
379+#: qml/Dash/GenericScopeView.qml:637
380+msgctxt "Label: Hint for dash search line edit"
381+msgid "Search"
382+msgstr "Circà"
383+
384+#: qml/Dash/PageHeaderExtraPanel.qml:56
385+msgid "Recent Searches"
386+msgstr "Ricerche recente"
387+
388+#: qml/Dash/PageHeaderExtraPanel.qml:67
389+msgid "Clear All"
390+msgstr "Squassà tuttu"
391+
392+#: qml/Dash/Previews/PreviewActionCombo.qml:35
393+msgid "More..."
394+msgstr "Di più..."
395+
396+#: qml/Dash/Previews/PreviewActionCombo.qml:35
397+msgid "Less..."
398+msgstr "Menu..."
399+
400+#: qml/Dash/Previews/PreviewCommentInput.qml:68
401+#: qml/Dash/Previews/PreviewRatingInput.qml:175
402+msgid "Send"
403+msgstr "Mandà"
404+
405+#: qml/Dash/Previews/PreviewRatingInput.qml:82
406+msgid "Rate this"
407+msgstr "Ghjudicà questu"
408+
409+#: qml/Dash/Previews/PreviewRatingInput.qml:157
410+msgid "Add a review"
411+msgstr "Aghjustà una recensione"
412+
413+#: qml/Dash/PullToRefreshScopeStyle.qml:55
414+msgid "Pull to refresh…"
415+msgstr "Tirà per rinnuvà..."
416+
417+#: qml/Dash/PullToRefreshScopeStyle.qml:60
418+msgid "Release to refresh…"
419+msgstr "Lascià andà per rinnuvà..."
420+
421+#: qml/Dash/ScopeSettings/ScopeSettingBoolean.qml:43
422+msgid "Enable location data"
423+msgstr "Abilità i dati nant'à u locu"
424+
425+#: qml/Dash/ScopesList.qml:55
426+msgid "Manage"
427+msgstr "Gestì"
428+
429+#: qml/Dash/ScopesList.qml:102
430+msgid "Home"
431+msgstr "Accolta"
432+
433+#: qml/Dash/ScopesList.qml:103
434+msgid "Also installed"
435+msgstr "Anu dinù installatu..."
436+
437+#: qml/DisabledScreenNotice.qml:109
438+msgid ""
439+"Your device is now connected to an external display. Use this screen as a "
440+"touch pad to interact with the pointer."
441+msgstr ""
442+"U vostru dispusitivu avà hè cunnessu à unu screnu esternu. Usà u screnu di "
443+"ssu dispusitivu cum'è un tappettu tattile per guvernà u puntatore."
444+
445+#: qml/Greeter/CoverPage.qml:127
446+msgid "Unlock"
447+msgstr "Sbluccà"
448+
449+#: qml/Greeter/Greeter.qml:555
450+msgid "Try again"
451+msgstr ""
452+
453+#: qml/Greeter/LoginList.qml:63
454+msgid "Passphrase"
455+msgstr ""
456+
457+#: qml/Greeter/LoginList.qml:64
458+msgid "Passcode"
459+msgstr ""
460+
461+#: qml/Greeter/LoginList.qml:87
462+msgid "Retry"
463+msgstr "Turnà à pruvà"
464+
465+#: qml/Greeter/LoginList.qml:88
466+msgid "Log In"
467+msgstr ""
468+
469+#: qml/Greeter/NarrowView.qml:55
470+msgid "Sorry, incorrect passphrase."
471+msgstr "Spiacenti, frasa d'ordine errata"
472+
473+#: qml/Greeter/NarrowView.qml:56
474+msgid "Sorry, incorrect passcode."
475+msgstr "Spiacenti, codice d'accessu erratu"
476+
477+#: qml/Greeter/NarrowView.qml:57
478+msgid "This will be your last attempt."
479+msgstr "Questu tentativu serà l'ultimu."
480+
481+#: qml/Greeter/NarrowView.qml:59
482+msgid ""
483+"If passphrase is entered incorrectly, your phone will conduct a factory "
484+"reset and all personal data will be deleted."
485+msgstr ""
486+"Si a frasa d'ordine hè errata, u telefunu serà reinizializatu, è tutti i "
487+"dati persunali serannu perduti."
488+
489+#: qml/Greeter/NarrowView.qml:60
490+msgid ""
491+"If passcode is entered incorrectly, your phone will conduct a factory reset "
492+"and all personal data will be deleted."
493+msgstr ""
494+"Si u codice d'accessu hè erratu, u telefunu serà reinizializatu, è tutti i "
495+"dati persunali serannu perduti."
496+
497+#: qml/Greeter/NarrowView.qml:129
498+#, qt-format
499+msgid "Enter %1"
500+msgstr "Inserì %1"
501+
502+#: qml/Greeter/NarrowView.qml:130
503+msgid "Enter passphrase"
504+msgstr "Inserì a frasa d'ordine"
505+
506+#: qml/Greeter/NarrowView.qml:131
507+msgid "Enter passcode"
508+msgstr "Inserì u codice d'accessu"
509+
510+#: qml/Greeter/NarrowView.qml:135
511+#, qt-format
512+msgid "Sorry, incorrect %1"
513+msgstr "Spiacenti, %1 micca currettu"
514+
515+#: qml/Greeter/NarrowView.qml:136
516+msgid "Sorry, incorrect passphrase"
517+msgstr "Spiacenti, frasa d'ordine micca curretta"
518+
519+#: qml/Greeter/NarrowView.qml:137
520+msgctxt "passphrase"
521+msgid "Please re-enter"
522+msgstr "Ripete l'inserimentu"
523+
524+#: qml/Greeter/NarrowView.qml:138
525+msgid "Sorry, incorrect passcode"
526+msgstr "Spiacenti, codice d'accessu micca currettu"
527+
528+#: qml/Notifications/NotificationMenuItemFactory.qml:124
529+msgid "Show password"
530+msgstr "Mustrà a parolla d'ordine"
531+
532+#: qml/Panel/ActiveCallHint.qml:79
533+msgid "Tap to return to call..."
534+msgstr "Tuccà per riturnà à a chjamata..."
535+
536+#: qml/Panel/ActiveCallHint.qml:92
537+msgid "Conference"
538+msgstr "Cunferenza"
539+
540+#: qml/Panel/Indicators/MenuItemFactory.qml:762
541+msgid "Nothing is playing"
542+msgstr "Nunda in ripruduzione..."
543+
544+#: qml/Panel/Indicators/MenuItemFactory.qml:891
545+#, qt-format
546+msgid "%1 hour"
547+msgid_plural "%1 hours"
548+msgstr[0] "%1 ora"
549+msgstr[1] "%1 ore"
550+
551+#: qml/Panel/Indicators/MenuItemFactory.qml:895
552+#, qt-format
553+msgid "%1 minute"
554+msgid_plural "%1 minutes"
555+msgstr[0] "%1 minutu"
556+msgstr[1] "%1 minuti"
557+
558+#: qml/Panel/Indicators/MenuItemFactory.qml:900
559+#, qt-format
560+msgid "%1 second"
561+msgid_plural "%1 seconds"
562+msgstr[0] "%1 seconda"
563+msgstr[1] "%1 seconde"
564+
565+#: qml/Panel/Indicators/MenuItemFactory.qml:903
566+msgid "0 seconds"
567+msgstr "0 seconde"
568+
569+#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
570+#: qml/Panel/Indicators/MenuItemFactory.qml:905
571+#, qt-format
572+msgid "%1 remaining"
573+msgstr "%1 rimanente"
574+
575+#: qml/Panel/Indicators/MenuItemFactory.qml:911
576+msgid "In queue…"
577+msgstr "In coda..."
578+
579+#: qml/Panel/Indicators/MenuItemFactory.qml:915
580+msgid "Downloading"
581+msgstr "Scaricamentu..."
582+
583+#: qml/Panel/Indicators/MenuItemFactory.qml:917
584+msgid "Paused, tap to resume"
585+msgstr "In sosta, tuccà pè riprende"
586+
587+#: qml/Panel/Indicators/MenuItemFactory.qml:919
588+msgid "Canceled"
589+msgstr "Annullatu"
590+
591+#: qml/Panel/Indicators/MenuItemFactory.qml:921
592+msgid "Finished"
593+msgstr "Cumpletu"
594+
595+#: qml/Panel/Indicators/MenuItemFactory.qml:923
596+msgid "Failed, tap to retry"
597+msgstr "Fallatu, tocca per turnà à pruvà"
598+
599+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
600+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
601+msgctxt "Button: Send a reply message"
602+msgid "Send"
603+msgstr "Mandà"
604+
605+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
606+msgctxt "Label: Hint in message indicator line edit"
607+msgid "Reply"
608+msgstr "Risponde"
609+
610+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
611+msgctxt "Button: Call back on phone"
612+msgid "Call back"
613+msgstr "Richjamà"
614+
615+#: qml/Stages/SideStage.qml:76
616+msgid "Drag using 3 fingers any application from one window to the other"
617+msgstr ""
618+"Trascinà cù 3 dite qualichissia applicazione da una finestra à un'antra"
619+
620+#: qml/Tutorial/TutorialLeftLong.qml:49
621+msgid "Long swipe from the left edge to open the Today scope"
622+msgstr "Scorre longu da mancina versu diritta per aprì u pannellu Oghje"
623+
624+#: qml/Tutorial/TutorialLeft.qml:47
625+msgid "Short swipe from the left edge to open the launcher"
626+msgstr ""
627+
628+#: qml/Tutorial/TutorialRight.qml:55
629+msgid "Push your mouse against the right edge to view your open apps"
630+msgstr ""
631+
632+#: qml/Tutorial/TutorialRight.qml:56
633+msgid "Swipe from the right edge to view your open apps"
634+msgstr ""
635+
636+#: qml/Tutorial/TutorialTop.qml:53
637+msgid "Swipe from the top edge to access notifications and quick settings"
638+msgstr ""
639+
640+#: qml/Wizard/Page.qml:54
641+msgctxt "Button: Go back one page in the Wizard"
642+msgid "Back"
643+msgstr "Riturnà"
644+
645+#: qml/Wizard/Pages/10-welcome.qml:27
646+msgid "Language"
647+msgstr "Lingua"
648+
649+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
650+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
651+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
652+#: qml/Wizard/Pages/75-report-check.qml:84
653+#: qml/Wizard/Pages/passcode-desktop.qml:141
654+#: qml/Wizard/Pages/password-set.qml:141
655+msgid "Next"
656+msgstr "Prossimu"
657+
658+#: qml/Wizard/Pages/30-wifi.qml:29
659+msgid "Connect to Wi‑Fi"
660+msgstr "Cunnettesi à u Wi-Fi"
661+
662+#: qml/Wizard/Pages/30-wifi.qml:130
663+msgid "Connected"
664+msgstr "Cunnessu"
665+
666+#: qml/Wizard/Pages/30-wifi.qml:163
667+msgid "Available Wi-Fi networks"
668+msgstr "Rete Wi-Fi dispunibili"
669+
670+#: qml/Wizard/Pages/30-wifi.qml:164
671+msgid "No available Wi-Fi networks"
672+msgstr "Nisuna reta Wi-Fi hè dispunibile"
673+
674+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
675+#: qml/Wizard/Pages/sim.qml:101
676+msgid "Skip"
677+msgstr "Ignurà"
678+
679+#: qml/Wizard/Pages/40-location.qml:27
680+msgid "Location Services"
681+msgstr "Servizi di lucalizazione"
682+
683+#: qml/Wizard/Pages/40-location.qml:83
684+msgid ""
685+"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
686+"(recommended)"
687+msgstr ""
688+"Usà di manera anonima u GPS, i punti d'accessu Wi-Fi, e reti mobili, per "
689+"stabilisce à pusizione (segeritu)"
690+
691+#: qml/Wizard/Pages/40-location.qml:105
692+#, qt-format
693+msgid "By selecting this option you agree to the Nokia HERE %1."
694+msgstr "Selezziunendu issa ozzione s'accettanu i %1 di Nokia HERE."
695+
696+#: qml/Wizard/Pages/40-location.qml:106
697+msgctxt "part of: Nokia HERE terms and conditions"
698+msgid "terms and conditions"
699+msgstr "termini è cundizioni"
700+
701+#: qml/Wizard/Pages/40-location.qml:160
702+msgid "GPS only"
703+msgstr "Sulamente GPS"
704+
705+#: qml/Wizard/Pages/40-location.qml:214
706+msgid "Don't use my location"
707+msgstr "Miccà usà u mo locu"
708+
709+#: qml/Wizard/Pages/40-location.qml:260
710+msgid "You can change it later in System Settings."
711+msgstr "A pudite cambià successivamente ind'i Parametri di Sistema"
712+
713+#: qml/Wizard/Pages/50-timezone.qml:29
714+msgid "Time Zone"
715+msgstr "Fusu orariu"
716+
717+#: qml/Wizard/Pages/50-timezone.qml:181
718+msgid "Enter your city"
719+msgstr "Inserì a vostra cità"
720+
721+#: qml/Wizard/Pages/60-account.qml:24
722+msgid "Personalize Your Device"
723+msgstr "Persunalizà u vostru dispusitivu"
724+
725+#: qml/Wizard/Pages/60-account.qml:48
726+msgid "Preferred Name"
727+msgstr "Nome preferitu"
728+
729+#: qml/Wizard/Pages/70-passwd-type.qml:39
730+msgid "Lock Screen"
731+msgstr "Bluccà u screnu"
732+
733+#: qml/Wizard/Pages/70-passwd-type.qml:101
734+msgctxt "Label: Type of security method"
735+msgid "Create new password"
736+msgstr "Creà una nova parolla d'ordine"
737+
738+#: qml/Wizard/Pages/70-passwd-type.qml:103
739+msgctxt "Label: Type of security method"
740+msgid "Create passcode (numbers only)"
741+msgstr "Creà un codice d'accessu (sulamente numeri)"
742+
743+#: qml/Wizard/Pages/70-passwd-type.qml:105
744+msgctxt "Label: Type of security method"
745+msgid "No lock code"
746+msgstr "Nisun codice di bloccu"
747+
748+#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
749+msgid "Privacy Policy"
750+msgstr "Pulitica di Riservatezza"
751+
752+#: qml/Wizard/Pages/75-report-check.qml:26
753+msgid "Help Us Improve"
754+msgstr "Aiutaci à migliurà"
755+
756+#: qml/Wizard/Pages/75-report-check.qml:59
757+msgid "Improve system performance by sending us crashes and error reports."
758+msgstr ""
759+"Migliurà l'efficienza di u sistema mandenduci nutificazioni d'errori è "
760+"blocchi impurtanti."
761+
762+#: qml/Wizard/Pages/75-report-check.qml:60
763+msgid "Privacy policy"
764+msgstr "Pulitica di Riservatezza"
765+
766+#: qml/Wizard/Pages/80-finished.qml:89
767+msgid "Welcome to Ubuntu"
768+msgstr "Benvenuti in Ubuntu"
769+
770+#: qml/Wizard/Pages/80-finished.qml:104
771+msgid "You are ready to use your device now"
772+msgstr "Avà site pronti à usà u vostru dispusitivu"
773+
774+#: qml/Wizard/Pages/80-finished.qml:124
775+msgid "Get Started"
776+msgstr "Primi passi"
777+
778+#: qml/Wizard/Pages/here-terms.qml:25
779+msgid "Terms & Conditions"
780+msgstr "Termini & Cundizioni"
781+
782+#: qml/Wizard/Pages/here-terms.qml:69
783+msgid "Your device uses positioning technologies provided by HERE."
784+msgstr "U dispusitivu utliza tecnulugie di pusiziunamentu furnite da HERE."
785+
786+#: qml/Wizard/Pages/here-terms.qml:81
787+msgid ""
788+"To provide you with positioning services and to improve their quality, HERE "
789+"collects information about nearby cell towers and Wi-Fi hotspots around your "
790+"current location whenever your position is being found."
791+msgstr ""
792+"Per furnì servizii di pusiziunamentu è migliuranne a qualità, ogni volta chì "
793+"a pusizione hè truvata, HERE culleziona e infurmazione nant'à i punti "
794+"d'accessu Wi-Fi è i repetitori di telefunia mobile ind'u circondu."
795+
796+#: qml/Wizard/Pages/here-terms.qml:93
797+msgid ""
798+"The information collected is used to analyze the service and to improve the "
799+"use of service, but not to identify you personally."
800+msgstr ""
801+"E infurmazione raccolte seranu utilizate per analizà u servizi è "
802+"migliurallu, micca per idintificà l'utilizatore."
803+
804+#: qml/Wizard/Pages/here-terms.qml:106
805+#, qt-format
806+msgid "By continuing, you agree to the HERE platform %1 and %2."
807+msgstr "Cuntinuendu, s'accettanu i %1 e la %2 di a piattaforma HERE."
808+
809+#: qml/Wizard/Pages/here-terms.qml:107
810+msgid "Service Terms"
811+msgstr "Termini di u serviziu"
812+
813+#: qml/Wizard/Pages/passcode-confirm.qml:43
814+#: qml/Wizard/Pages/passcode-desktop.qml:96
815+msgid "Confirm passcode"
816+msgstr "Cunfirmà u codice d'accessu"
817+
818+#: qml/Wizard/Pages/passcode-confirm.qml:45
819+msgid "Incorrect passcode."
820+msgstr "Codice d'accessu micca currettu"
821+
822+#: qml/Wizard/Pages/passcode-confirm.qml:45
823+msgctxt "Enter the passcode again"
824+msgid "Please re-enter."
825+msgstr "Ripete l'inserimentu."
826+
827+#: qml/Wizard/Pages/passcode-desktop.qml:30
828+msgid "Lock Screen Passcode"
829+msgstr "Codice bloccu screnu"
830+
831+#: qml/Wizard/Pages/passcode-desktop.qml:60
832+msgid "Enter 4 numbers to setup your passcode"
833+msgstr "Inserì 4 numeri per creà u vostru codice d'accessu"
834+
835+#: qml/Wizard/Pages/passcode-desktop.qml:76
836+#: qml/Wizard/Pages/passcode-set.qml:54
837+msgid "Choose passcode"
838+msgstr "Sceglie u codice d'accessu"
839+
840+#: qml/Wizard/Pages/passcode-desktop.qml:126
841+msgid "Passcode too short"
842+msgstr "Codice d'accessu troppu cortu"
843+
844+#: qml/Wizard/Pages/passcode-desktop.qml:128
845+msgid "Passcodes match"
846+msgstr "I codici currispondenu."
847+
848+#: qml/Wizard/Pages/passcode-desktop.qml:130
849+msgid "Passcodes do not match"
850+msgstr "I codici ùn currispondenu micca."
851+
852+#: qml/Wizard/Pages/passcode-set.qml:62
853+msgid "Passcode must be 4 characters long"
854+msgstr "U codice d'accessu hà da esse longu almenu 4 caratteri"
855+
856+#: qml/Wizard/Pages/password-set.qml:30
857+msgid "Lock Screen Password"
858+msgstr "Parolla d'ordine per bloccu screnu"
859+
860+#: qml/Wizard/Pages/password-set.qml:61
861+msgid "Enter at least 8 characters"
862+msgstr "Inserì almenu 8 caratteri"
863+
864+#: qml/Wizard/Pages/password-set.qml:73
865+msgid "Choose password"
866+msgstr "Sceglie a parolla d'ordine"
867+
868+#: qml/Wizard/Pages/password-set.qml:103
869+msgid "Confirm password"
870+msgstr "Cunfirmà parolla d'ordine"
871+
872+#: qml/Wizard/Pages/sim.qml:27
873+msgid "No SIM card installed"
874+msgstr "Nisuna carta SIM installata"
875+
876+#: qml/Wizard/Pages/sim.qml:54
877+msgid "SIM card added"
878+msgstr "Carta SIM aghjustata"
879+
880+#: qml/Wizard/Pages/sim.qml:55
881+msgid "You must restart the device to access the mobile network."
882+msgstr "Duvite ri-avvià u dispusitivu per accede à a reta mobile."
883+
884+#: qml/Wizard/Pages/sim.qml:59
885+msgid "Restart"
886+msgstr "Turnà ad avvià"
887+
888+#: qml/Wizard/Pages/sim.qml:78
889+msgid "You won’t be able to make calls or use text messaging without a SIM."
890+msgstr ""
891+"Senza una carta SIM ùn hè micca pussibile di chjamà o mandà messaggi SMS."
892+
893+#: qml/Wizard/Pages/sim.qml:90
894+msgid "To proceed with no SIM tap Skip."
895+msgstr "Per prucede senza una carta SIM tuccà Saltà"
896+
897+#: qml/Wizard/PasswordMeter.qml:87
898+msgid "Password too short"
899+msgstr ""
900+
901+#: qml/Wizard/PasswordMeter.qml:89
902+msgid "Passwords match"
903+msgstr "E parolle d'ordine sò l'istesse"
904+
905+#: qml/Wizard/PasswordMeter.qml:91
906+msgid "Passwords do not match"
907+msgstr "E parolle d'ordine ùn coincidunu micca"
908+
909+#: qml/Wizard/PasswordMeter.qml:95
910+msgid "Strong password"
911+msgstr "Parolla d'ordine forte"
912+
913+#: qml/Wizard/PasswordMeter.qml:97
914+msgid "Fair password"
915+msgstr "Parolla d'ordine media"
916+
917+#: qml/Wizard/PasswordMeter.qml:99
918+msgid "Weak password"
919+msgstr "Parolla d'ordine debule"
920+
921+#: qml/Wizard/PasswordMeter.qml:101
922+msgid "Very weak password"
923+msgstr "Parolla d'ordine moltu debule"
924+
925+#~ msgid "See all"
926+#~ msgstr "Vede tutti"
927+
928+#~ msgid "Tap to unlock"
929+#~ msgstr "Tuccà per sbluccà"
930+
931+#~ msgid "See less"
932+#~ msgstr "Vede menu"
933+
934+#~ msgid "Swipe from the left edge to open the launcher"
935+#~ msgstr "Scorre da mancina versu diritta per aprì u launcher"
936+
937+#~ msgid "Swipe up to add a contact"
938+#~ msgstr "Scorre versu l'altu per aghjustà un cuntattu"
939+
940+#~ msgid "Swipe up for recent calls"
941+#~ msgstr "Scorre versu l'altu pè e chjamate recenti"
942+
943+#~ msgid "Swipe up for favorite calculations"
944+#~ msgstr "Scorre versu l'altu pè mustrà i calculi favuriti"
945+
946+#~ msgid "Swipe up to manage the app"
947+#~ msgstr "Scorre versu l'altu per gestì l'app"
948+
949+#~ msgid "Swipe up to create a message"
950+#~ msgstr "Scorre versu l'altu per creà un messaggiu"
951+
952+#~ msgid "Short or long swipe from the right edge to view your open apps"
953+#~ msgstr ""
954+#~ "Scorre cortu o longu da diritta versu mancina per vede e applicazioni aperte"
955+
956+#~ msgid "Swipe from the top right edge to open the notification bar"
957+#~ msgstr "Scorre da l'altu à diritta per aprì a barra di e nutificazione"
958+
959+#~ msgid "Swipe from the top edge to open the notification bar"
960+#~ msgstr "Scorre da l'altu per aprì a barra di e nutificazione"
961+
962+#~ msgid "Hover your mouse on the right edge to view your open apps"
963+#~ msgstr ""
964+#~ "Passà u puntatore di u topu nant'à u bordu destru per vede e app aperte"
po/cs.po+266−101

This diff is too big to show here.

po/cy.po+266−101

This diff is too big to show here.

po/da.po+266−101

This diff is too big to show here.

po/de.po+303−109

This diff is too big to show here.

po/el.po+266−101

This diff is too big to show here.

po/en_AU.po+296−104

This diff is too big to show here.

po/en_GB.po+297−105

This diff is too big to show here.

po/eo.po+262−100

This diff is too big to show here.

po/es.po+300−106

This diff is too big to show here.

po/eu.po+266−101

This diff is too big to show here.

po/fa.po+301−108

This diff is too big to show here.

po/fi.po+301−107

This diff is too big to show here.

po/fo.po+346−180

This diff is too big to show here.

po/fr.po+306−111

This diff is too big to show here.

po/ga.po+266−101

This diff is too big to show here.

po/gd.po+299−107

This diff is too big to show here.

po/gl.po+298−104

This diff is too big to show here.

po/gv.po+262−100

This diff is too big to show here.

po/he.po+266−101

This diff is too big to show here.

po/hi.po+262−100

This diff is too big to show here.

po/hr.po+297−105

This diff is too big to show here.

po/hu.po+299−106

This diff is too big to show here.

po/hy.po+262−100

This diff is too big to show here.

po/ia.po+299−105

This diff is too big to show here.

po/id.po+262−100

This diff is too big to show here.

po/is.po+262−100

This diff is too big to show here.

po/it.po+297−105

This diff is too big to show here.

po/ja.po+262−100

This diff is too big to show here.

po/km.po+262−100

This diff is too big to show here.

po/kn.po+262−100

This diff is too big to show here.

po/ko.po+266−101

This diff is too big to show here.

po/ku.po+262−100

This diff is too big to show here.

po/ky.po+262−100

This diff is too big to show here.

po/lo.po+262−100

This diff is too big to show here.

po/lt.po+262−100

This diff is too big to show here.

po/lv.po+266−101

This diff is too big to show here.

po/ml.po+262−100

This diff is too big to show here.

po/mr.po+262−100

This diff is too big to show here.

po/ms.po+302−105

This diff is too big to show here.

po/my.po+262−100

This diff is too big to show here.

po/nb.po+299−107

This diff is too big to show here.

po/ne.po+262−100

This diff is too big to show here.

po/nl.po+292−103

This diff is too big to show here.

po/nn.po+262−100

This diff is too big to show here.

po/oc.po+275−101

This diff is too big to show here.

po/or.po+262−100

This diff is too big to show here.

po/pa.po+266−101

This diff is too big to show here.

po/pl.po+300−108

This diff is too big to show here.

po/pt.po+302−108

This diff is too big to show here.

po/pt_BR.po+266−101

This diff is too big to show here.

po/ro.po+266−101

This diff is too big to show here.

po/ru.po+326−137

This diff is too big to show here.

po/shn.po+262−100

This diff is too big to show here.

po/si.po+262−100

This diff is too big to show here.

po/sk.po+298−106

This diff is too big to show here.

po/sl.po+296−104

This diff is too big to show here.

po/sq.po+266−101

This diff is too big to show here.

po/sr.po+296−104

This diff is too big to show here.

po/sv.po+302−109

This diff is too big to show here.

po/sw.po+266−101

This diff is too big to show here.

po/ta.po+262−100

This diff is too big to show here.

po/te.po+262−100

This diff is too big to show here.

po/th.po+262−100

This diff is too big to show here.

po/tr.po+266−101

This diff is too big to show here.

po/ug.po+287−122

This diff is too big to show here.

po/uk.po+297−105

This diff is too big to show here.

po/unity8.pot+260−98

This diff is too big to show here.

po/ur.po+262−100

This diff is too big to show here.

po/uz.po+262−100

This diff is too big to show here.

po/vi.po+262−100

This diff is too big to show here.

po/wo.po+266−101

This diff is too big to show here.

po/xh.po+262−100

This diff is too big to show here.

po/zh_CN.po+305−113

This diff is too big to show here.

po/zh_HK.po+262−100

This diff is too big to show here.

po/zh_TW.po+277−112

This diff is too big to show here.

qml/Components/DelayedLockscreen.qml+1

This diff is too big to show here.

qml/Components/Dialogs.qml+8−8

This diff is too big to show here.

qml/Components/DragHandle.qml+43−25

This diff is too big to show here.

qml/Components/FadingLabel.qmlnew file+42

This diff is too big to show here.

qml/Components/FloatingFlickable.qmlnew file+59

This diff is too big to show here.

qml/Components/InputMethod.qml+2−2

This diff is too big to show here.

qml/Components/KeyboardShortcutsOverlay.qmlnew file+334

This diff is too big to show here.

qml/Components/LazyImage.qml+3−1

This diff is too big to show here.

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

Binary file not shown.

qml/Components/Lockscreen.qml+8

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

qml/Components/ModeSwitchWarningDialog.qml+1−1

This diff is too big to show here.

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

This diff is too big to show here.

qml/Components/PassphraseLockscreen.qml+4

This diff is too big to show here.

qml/Components/PhysicalKeysMapper.qml+2−22

This diff is too big to show here.

qml/Components/PinLockscreen.qml+4

This diff is too big to show here.

qml/Components/Rating.qml+1

This diff is too big to show here.

qml/Components/RatingStyle.qml+3

This diff is too big to show here.

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

This diff is too big to show here.

qml/Components/WindowControlButtons.qml+41−34

This diff is too big to show here.

qml/Components/graphics/close@20.png

Binary file not shown.

qml/Components/graphics/icon_star_empty@20.png

Binary file not shown.

qml/Components/graphics/icon_star_full@20.png

Binary file not shown.

qml/Components/graphics/icon_star_half@20.png

Binary file not shown.

qml/Components/graphics/icon_star_off@20.png

Binary file not shown.

qml/Components/graphics/icon_star_on@20.png

Binary file not shown.

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

Binary file not shown.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

qml/Dash/CardCarousel.qml+1−1

This diff is too big to show here.

qml/Dash/CardGrid.qml−2

This diff is too big to show here.

qml/Dash/CardTool.qml+8−3

This diff is too big to show here.

qml/Dash/Dash.qml+3−3

This diff is too big to show here.

qml/Dash/DashApplication.qml+15−7

This diff is too big to show here.

qml/Dash/DashCategoryBase.qml+3−11

This diff is too big to show here.

qml/Dash/DashPageHeader.qml+31−36

This diff is too big to show here.

qml/Dash/Filters/FilterOptionSelector.qml+4

This diff is too big to show here.

qml/Dash/Filters/FilterWidgetFactory.qml+8

This diff is too big to show here.

qml/Dash/GenericScopeView.qml+20−9

This diff is too big to show here.

qml/Dash/PageHeaderExtraPanel.qml+34−10

This diff is too big to show here.

qml/Dash/Previews/Preview.qml+17

This diff is too big to show here.

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

This diff is too big to show here.

qml/Dash/Previews/PreviewImageGallery.qml+3

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

qml/Dash/Previews/PreviewWidget.qml+3

This diff is too big to show here.

qml/Dash/Previews/PreviewWidgetFactory.qml+11−1

This diff is too big to show here.

qml/Dash/Previews/PreviewZoomableImage.qml+1

This diff is too big to show here.

qml/Dash/ScopesList.qml+2−13

This diff is too big to show here.

qml/Dash/graphics/dash_divider_top_darkgrad@27.png

Binary file not shown.

qml/Dash/graphics/dash_divider_top_lightgrad@27.png

Binary file not shown.

qml/Dash/graphics/header_handlearrow2@27.png

Binary file not shown.

qml/Dash/graphics/header_handlearrow@27.png

Binary file not shown.

qml/Dash/graphics/icon_clear@20.png

Binary file not shown.

qml/Dash/graphics/icon_search_active@20.png

Binary file not shown.

qml/Dash/graphics/icon_search_inactive@20.png

Binary file not shown.

qml/Dash/graphics/navigation_shadow@18.png

Binary file not shown.

qml/Dash/graphics/navigation_shadow_light@18.png

Binary file not shown.

qml/Dash/graphics/overview_hint@27.png

Binary file not shown.

qml/Dash/graphics/pagination_dot_off@30.png

Binary file not shown.

qml/Dash/graphics/pagination_dot_on@30.png

Binary file not shown.

qml/Dash/graphics/paper.png

Binary file not shown.

qml/Dash/graphics/pixel.png

Binary file not shown.

qml/Dash/graphics/play_button@18.png

Binary file not shown.

qml/Dash/graphics/play_button_active@18.png

Binary file not shown.

qml/Dash/graphics/play_button_active_big@20.png

Binary file not shown.

qml/Dash/graphics/play_button_big@20.png

Binary file not shown.

qml/Dash/graphics/tabbarchevron@27.png

Binary file not shown.

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

Binary file not shown.

qml/Dash/graphics/tooltip_arrow@27.png

Binary file not shown.

qml/DisabledScreenNotice.qml+7

This diff is too big to show here.

qml/Greeter/CoverPage.qml+23−1

This diff is too big to show here.

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

This diff is too big to show here.

qml/Greeter/Greeter.qml+184−68

This diff is too big to show here.

qml/Greeter/GreeterPrompt.qmlnew file+197

This diff is too big to show here.

qml/Greeter/IntegratedLightDMImpl.qml+1−1

This diff is too big to show here.

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

This diff is too big to show here.

qml/Greeter/LoginList.qml+77−81

This diff is too big to show here.

qml/Greeter/NarrowView.qml+20−3

This diff is too big to show here.

qml/Greeter/WideView.qml+11−4

This diff is too big to show here.

qml/Greeter/graphics/dot_empty.png

Binary file not shown.

qml/Greeter/graphics/dot_filled.png

Binary file not shown.

qml/Greeter/graphics/dot_pointer.png

Binary file not shown.

qml/Greeter/graphics/icon_arrow.png

Binary file not shown.

qml/Greeter/graphics/infographic_circle_back.png

Binary file not shown.

qml/Greeter/qmldirnew file+1

This diff is too big to show here.

qml/Launcher/Launcher.qml+17−24

This diff is too big to show here.

qml/Launcher/LauncherDelegate.qml+6−10

This diff is too big to show here.

qml/Launcher/LauncherPanel.qml+5−1

This diff is too big to show here.

qml/Launcher/graphics/divider-line.png

Binary file not shown.

qml/Launcher/graphics/focused_app_arrow@30.png

Binary file not shown.

qml/Launcher/graphics/home@18.png

Binary file not shown.

qml/Launcher/graphics/quicklist_tooltip@30.png

Binary file not shown.

qml/Notifications/Notification.qml+36−5

This diff is too big to show here.

qml/Notifications/NotificationMenuItemFactory.qml+4

This diff is too big to show here.

qml/Notifications/Notifications.qml+19−9

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

qml/Panel/IndicatorsMenu.qml+20−14

This diff is too big to show here.

qml/Panel/Panel.qml+26−22

This diff is too big to show here.

qml/Panel/graphics/rectangular_dropshadow@30.png

Binary file not shown.

qml/Rotation/HalfLoopRotationAnimation.qml+1−1

This diff is too big to show here.

qml/Rotation/ImmediateRotationAction.qml+1−1

This diff is too big to show here.

qml/Rotation/NinetyRotationAnimation.qml+1−1

This diff is too big to show here.

qml/Rotation/UpdateShellTransformations.qml+4−4

This diff is too big to show here.

qml/Shell.qml+79−23

This diff is too big to show here.

qml/Stages/AbstractStage.qml+1

This diff is too big to show here.

qml/Stages/ApplicationWindow.qml+25−9

This diff is too big to show here.

qml/Stages/DecoratedWindow.qml+51−20

This diff is too big to show here.

qml/Stages/DesktopSpread.qml+3−1

This diff is too big to show here.

qml/Stages/DesktopSpreadDelegate.qml+1−1

This diff is too big to show here.

qml/Stages/DesktopStage.qml+131−57

This diff is too big to show here.

qml/Stages/OrientationChangeAnimation.qml+30−6

This diff is too big to show here.

qml/Stages/PhoneStage.qml+4−4

This diff is too big to show here.

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

This diff is too big to show here.

qml/Stages/SideStage.qml+1−2

This diff is too big to show here.

qml/Stages/Splash.qml+6−17

This diff is too big to show here.

qml/Stages/SpreadDelegate.qml+8−12

This diff is too big to show here.

qml/Stages/SurfaceContainer.qml+3

This diff is too big to show here.

qml/Stages/TabletSideStageTouchGesture.qml+3

This diff is too big to show here.

qml/Stages/TabletStage.qml+24−16

This diff is too big to show here.

qml/Stages/WindowControlsOverlay.qmlnew file+219

This diff is too big to show here.

qml/Stages/WindowDecoration.qml+39−13

This diff is too big to show here.

qml/Stages/WindowResizeArea.qml+40−20

This diff is too big to show here.

qml/Stages/graphics/PageHeaderBaseDividerBottom@18.png

Binary file not shown.

qml/Stages/graphics/PageHeaderBaseDividerLight@18.png

Binary file not shown.

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

Binary file not shown.

qml/Stages/graphics/arrows.pngnew file

Binary file not shown.

qml/Stages/graphics/dropshadow2gu@30.png

Binary file not shown.

qml/Stages/graphics/sidestage_handle@20.png

Binary file not shown.

qml/Tutorial/InactivityTimer.qml+26−10

This diff is too big to show here.

qml/Tutorial/Tutorial.qml+7−6

This diff is too big to show here.

qml/Tutorial/TutorialBottom.qmldeleted−124

This diff is too big to show here.

qml/Tutorial/TutorialContent.qml+51−134

This diff is too big to show here.

qml/Tutorial/TutorialLeft.qml+2−2

This diff is too big to show here.

qml/Tutorial/TutorialLeftLong.qml+3−1

This diff is too big to show here.

qml/Tutorial/TutorialPage.qml+2−2

This diff is too big to show here.

qml/Tutorial/TutorialRight.qml+2−2

This diff is too big to show here.

qml/Tutorial/TutorialTop.qml+2−3

This diff is too big to show here.

qml/Tutorial/graphics/background1.png

Binary file not shown.

qml/Tutorial/graphics/background2.png

Binary file not shown.

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

This diff is too big to show here.

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

This diff is too big to show here.

qml/Wizard/Pages/data/Desktop_header_bkg.png

Binary file not shown.

qml/Wizard/Pages/data/Desktop_splash_screen_bkg.png

Binary file not shown.

qml/Wizard/Pages/data/Phone_header_bkg.png

Binary file not shown.

qml/Wizard/Pages/data/Phone_splash_screen_bkg.png

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

This diff is too big to show here.

qml/Wizard/PasswordMeter.qml+3−1

This diff is too big to show here.

qml/Wizard/Wizard.qml+6−2

This diff is too big to show here.

qml/graphics/dropshadow_left@20.png

Binary file not shown.

qml/graphics/dropshadow_right@20.png

Binary file not shown.

src/CMakeLists.txt+2−4

This diff is too big to show here.

src/Dash/CMakeLists.txt+1

This diff is too big to show here.

src/Dash/main.cpp+29−21

This diff is too big to show here.

src/ShellApplication.cpp+11−1

This diff is too big to show here.

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

This diff is too big to show here.

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

The content is the same.

src/main.cpp+8

This diff is too big to show here.

tests/CMakeLists.txt+7−2

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/data/unity/backgrounds/blue.png

Binary file not shown.

tests/data/unity/backgrounds/red.png

Binary file not shown.

tests/graphics/applicationIcons/browser@18.png

Binary file not shown.

tests/graphics/applicationIcons/calendar@18.png

Binary file not shown.

tests/graphics/applicationIcons/camera@18.png

Binary file not shown.

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

Binary file not shown.

tests/graphics/applicationIcons/dash.png

Binary file not shown.

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

Binary file not shown.

tests/graphics/applicationIcons/evernote@18.png

Binary file not shown.

tests/graphics/applicationIcons/facebook@18.png

Binary file not shown.

tests/graphics/applicationIcons/gallery@18.png

Binary file not shown.

tests/graphics/applicationIcons/gmail@18.png

Binary file not shown.

tests/graphics/applicationIcons/libreoffice@18.png

Binary file not shown.

tests/graphics/applicationIcons/map@18.png

Binary file not shown.

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

Binary file not shown.

tests/graphics/applicationIcons/notepad@18.png

Binary file not shown.

tests/graphics/applicationIcons/pinterest@18.png

Binary file not shown.

tests/graphics/applicationIcons/soundcloud@18.png

Binary file not shown.

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

Binary file not shown.

tests/graphics/applicationIcons/twitter@18.png

Binary file not shown.

tests/graphics/applicationIcons/weather@18.png

Binary file not shown.

tests/graphics/applicationIcons/wikipedia@18.png

Binary file not shown.

tests/graphics/applicationIcons/youtube@18.png

Binary file not shown.

tests/graphics/avatars/amanda@12.png

Binary file not shown.

tests/graphics/avatars/anna_olsson@12.png

Binary file not shown.

tests/graphics/avatars/funky@12.png

Binary file not shown.

tests/graphics/clock@18.png

Binary file not shown.

tests/libs/CMakeLists.txtdeleted−1

This diff is too big to show here.

tests/libs/UbuntuGestures/CMakeLists.txtdeleted−16

This diff is too big to show here.

tests/libs/UbuntuGestures/tst_TouchRegistry.cppdeleted−974

This diff is too big to show here.

tests/mocks/AccountsService/AccountsService.cpp+24

This diff is too big to show here.

tests/mocks/AccountsService/AccountsService.h+16

This diff is too big to show here.

tests/mocks/AccountsService/AccountsService.qmltypesdeleted−41

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Biometryd/qmldirnew file+3

This diff is too big to show here.

tests/mocks/CMakeLists.txt+2−1

This diff is too big to show here.

tests/mocks/Cursor/qmldir+1−1

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/IntegratedLightDM/qmldirdeleted−3

This diff is too big to show here.

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

This diff is too big to show here.

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

The content is the same.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

The content is the same.

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

The content is the same.

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

The content is the same.

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

This diff is too big to show here.

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

The content is the same.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

The content is the same.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Lights/Lights.qmltypesdeleted−45

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Powerd/Powerd.qmltypesdeleted−39

This diff is too big to show here.

tests/mocks/QMenuModel/QMenuModel.qmltypesdeleted−111

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/QtMultimedia/QtMultimedia.qmltypesdeleted−62

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/QtMultimedia/audio.cppdeleted−132

This diff is too big to show here.

tests/mocks/QtMultimedia/audio.hdeleted−97

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Unity/Unity.qmltypesdeleted−469

This diff is too big to show here.

tests/mocks/Unity/fake_optionselectorfilter.cpp+5

This diff is too big to show here.

tests/mocks/Unity/fake_optionselectorfilter.h+2

This diff is too big to show here.

tests/mocks/Unity/fake_optionselectoroptions.cpp+13

This diff is too big to show here.

tests/mocks/Unity/fake_optionselectoroptions.h+2

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Unity/fake_scopes.cpp+12

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Utils/Utils.qmltypesdeleted−178

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Wizard/Wizard.qmltypesdeleted−37

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/AccountsService/CMakeLists.txt−5

This diff is too big to show here.

tests/plugins/CMakeLists.txt+3−2

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Dash/CMakeLists.txt+4

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Dash/cardcreatortest.qml+4−4

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Dash/tst_ScopeStyle.qml+1−1

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

The content is the same.

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

This diff is too big to show here.

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

The content is the same.

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

The content is the same.

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

This diff is too big to show here.

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

The content is the same.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/qmltests/CMakeLists.txt+3−1

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

The content is the same.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/qmltests/Components/tst_LazyImage/portrait.png

Binary file not shown.

tests/qmltests/Components/tst_LazyImage/square.png

Binary file not shown.

tests/qmltests/Components/tst_LazyImage/wide.png

Binary file not shown.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_Preview.qml−1

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_PreviewExpandable.qml+23−4

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

Binary file not shown.

tests/qmltests/Dash/artwork/background.png

Binary file not shown.

tests/qmltests/Dash/artwork/checkers.png

Binary file not shown.

tests/qmltests/Dash/artwork/emblem.png

Binary file not shown.

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

Binary file not shown.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/qmltests/Dash/tst_DashPageHeader.qml−24

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/qmltests/Notifications/tst_Notifications.qml+89

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/qmltests/UnityLogo.png

Binary file not shown.

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

This diff is too big to show here.

tests/qmltests/tst_OrientedShell.qml+71−49

This diff is too big to show here.

tests/qmltests/tst_Shell.qml+115−36

This diff is too big to show here.

tests/qmltests/tst_ShellWithPin.qml+9−7

This diff is too big to show here.

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

This diff is too big to show here.

tests/uqmlscene/main.cpp−1

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tools/CMakeLists.txt+1−1

This diff is too big to show here.

tools/scopetool.cpp+1−1

This diff is too big to show here.