on xenial help sign in
merged parent
db1d9d2Nick Dedekind
CMakeLists.txt+1−1
@@ -63,7 +63,7 @@ pkg_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)
65pkg_check_modules(GD3 REQUIRED gnome-desktop-3.0)
65pkg_check_modules(GD3 REQUIRED gnome-desktop-3.0)
66−
66+pkg_check_modules(UAL REQUIRED ubuntu-app-launch-2)
67pkg_check_modules(UBUNTUGESTURES REQUIRED UbuntuGestures)
67pkg_check_modules(UBUNTUGESTURES REQUIRED UbuntuGestures)
68
68
69### Check UbuntuGestures private headers. No pkg-config (.pc) file is provided for them
69### Check UbuntuGestures private headers. No pkg-config (.pc) file is provided for them
debian/changelog+31
@@ -1,3 +1,34 @@
1+unity8 (8.14+17.04.20161024-0ubuntu1) zesty; urgency=medium
2+
3+ [ Albert Astals Cid ]
4+ * Make PreviewProgress be thicker again (LP: #1629382)
5+ * tst_PreviewZoomableImage: Wait for LazyImage transitions on init()
6+ (LP: #1630136)
7+
8+ [ Andrea Azzarone ]
9+ * Remove UbuntuShapeForItem and replace its use with the more standard
10+ Ubuntu.Components.UbuntuShape.
11+
12+ [ Lukáš Tinkl ]
13+ * Restore the double tap decoration to maximize feature (LP: #1627281)
14+ * Hide the cursor for fullscreen apps after 3 seconds of inactivity
15+ * Implement moving windows by Alt + left mouse button
16+
17+ [ Marco Trevisan (Treviño) ]
18+ * MenuItemFactory: use more features from SlotsLayout based settings
19+ components
20+
21+ [ Michael Terry ]
22+ * Grab launcher icon information from ubuntu-app-launch, not directly
23+ from desktop files.
24+ * Adjust root paths if we're running inside a snap. (LP: #1629009)
25+
26+ [ Michael Zanetti ]
27+ * Merge all Stages into one single codebase. Apply new spread visuals.
28+ (LP: #1489517, #1603914, #1635800)
29+
30+ -- Michael Zanetti <michael.zanetti@canonical.com> Mon, 24 Oct 2016 11:37:28 +0000
31+
1unity8 (8.14+16.10.20160922-0ubuntu2) yakkety; urgency=medium
32unity8 (8.14+16.10.20160922-0ubuntu2) yakkety; urgency=medium
2
33
3 * debian/control:
34 * debian/control:
debian/control+2−1
@@ -32,6 +32,7 @@ Build-Depends: cmake,
32 libqt5svg5-dev,
32 libqt5svg5-dev,
33 libqt5xmlpatterns5-dev,
33 libqt5xmlpatterns5-dev,
34 libsystemsettings-dev,
34 libsystemsettings-dev,
35+ libubuntu-app-launch2-dev,
35 libubuntu-download-manager-common-dev,
36 libubuntu-download-manager-common-dev,
36 libubuntugestures5-dev (>= 1.3.2030),
37 libubuntugestures5-dev (>= 1.3.2030),
37 libubuntugestures5-private-dev (>= 1.3.2030),
38 libubuntugestures5-private-dev (>= 1.3.2030),
@@ -64,7 +65,7 @@ Build-Depends: cmake,
64 qtdeclarative5-dev-tools,
65 qtdeclarative5-dev-tools,
65 qtdeclarative5-private-dev (>= 5.4),
66 qtdeclarative5-private-dev (>= 5.4),
66 qtdeclarative5-ubuntu-content1,
67 qtdeclarative5-ubuntu-content1,
67− qtdeclarative5-ubuntu-settings-components (>= 0.7),
68+ qtdeclarative5-ubuntu-settings-components (>= 0.10),
68 ttf-ubuntu-font-family,
69 ttf-ubuntu-font-family,
69Standards-Version: 3.9.4
70Standards-Version: 3.9.4
70Homepage: http://launchpad.net/unity
71Homepage: http://launchpad.net/unity
include/paths.h.in+34−25
@@ -1,8 +1,5 @@
1/*
1/*
2− * Copyright (C) 2012 Canonical, Ltd.
2+ * Copyright (C) 2012-2016 Canonical, Ltd.
3− *
4− * Authors:
5− * Ugo Riboni <ugo.riboni@canonical.com>
6 *
3 *
7 * 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
8 * 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 +14,7 @@
17 * 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/>.
18 */
15 */
19
16
20−#ifndef PATHS_H
17+#pragma once
21−#define PATHS_H
22
18
23// Qt
19// Qt
24#include <QtCore/QCoreApplication>
20#include <QtCore/QCoreApplication>
@@ -27,10 +23,25 @@
27#include <QtQml/QQmlEngine>
23#include <QtQml/QQmlEngine>
28#include <QStandardPaths>
24#include <QStandardPaths>
29
25
26+inline QString installRoot() {
27+ static QString installRoot;
28+ static bool installRootSet = false;
29+ if (!installRootSet) {
30+ QString snapRoot = QFile::decodeName(qgetenv("SNAP"));
31+ if (!snapRoot.isEmpty() && QCoreApplication::applicationDirPath() ==
32+ QDir(snapRoot + QStringLiteral("@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@")).canonicalPath()) {
33+ installRoot = snapRoot;
34+ } else if (QCoreApplication::applicationDirPath() ==
35+ QDir(QStringLiteral("@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@")).canonicalPath()) {
36+ installRoot = QStringLiteral("");
37+ }
38+ installRootSet = true;
39+ }
40+ return installRoot;
41+}
42+
30inline bool isRunningInstalled() {
43inline bool isRunningInstalled() {
31− static bool installed = (QCoreApplication::applicationDirPath() ==
44+ return !installRoot().isNull();
32− QDir(QStringLiteral("@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@")).canonicalPath());
33− return installed;
34}
45}
35
46
36inline QString buildDirectory() {
47inline QString buildDirectory() {
@@ -45,24 +56,24 @@ inline QString sourceDirectory() {
45
56
46inline QString translationDirectory() {
57inline QString translationDirectory() {
47 if (isRunningInstalled()) {
58 if (isRunningInstalled()) {
48− return QStringLiteral("@CMAKE_INSTALL_PREFIX@/share/locale");
59+ return installRoot() + QStringLiteral("@CMAKE_INSTALL_PREFIX@/share/locale");
49 } else {
60 } else {
50− return QString(buildDirectory() + "/po/locale");
61+ return buildDirectory() + QStringLiteral("/po/locale");
51 }
62 }
52}
63}
53
64
54inline QString qmlDirectory() {
65inline QString qmlDirectory() {
55 if (isRunningInstalled()) {
66 if (isRunningInstalled()) {
56− return QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_APP_DIR@/");
67+ return installRoot() + QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_APP_DIR@/");
57 } else {
68 } else {
58− return QString(sourceDirectory() + "/qml");
69+ return sourceDirectory() + QStringLiteral("/qml");
59 }
70 }
60}
71}
61
72
62inline QStringList overrideImportPaths() {
73inline QStringList overrideImportPaths() {
63 QStringList paths;
74 QStringList paths;
64 if (!isRunningInstalled()) {
75 if (!isRunningInstalled()) {
65− paths << QString(buildDirectory() + "/plugins");
76+ paths << buildDirectory() + QStringLiteral("/plugins");
66 }
77 }
67 return paths;
78 return paths;
68}
79}
@@ -70,9 +81,9 @@ inline QStringList overrideImportPaths() {
70inline QStringList nonMirImportPaths() {
81inline QStringList nonMirImportPaths() {
71 QStringList paths;
82 QStringList paths;
72 if (isRunningInstalled()) {
83 if (isRunningInstalled()) {
73− paths << QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/nonmirplugins");
84+ paths << installRoot() + QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/nonmirplugins");
74 } else {
85 } else {
75− paths << QString(buildDirectory() + "/nonmirplugins");
86+ paths << buildDirectory() + QStringLiteral("/nonmirplugins");
76 }
87 }
77 return paths;
88 return paths;
78}
89}
@@ -80,23 +91,23 @@ inline QStringList nonMirImportPaths() {
80inline QStringList fallbackImportPaths() {
91inline QStringList fallbackImportPaths() {
81 QStringList paths;
92 QStringList paths;
82 if (isRunningInstalled()) {
93 if (isRunningInstalled()) {
83− paths << QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@");
94+ paths << installRoot() + QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@");
84− paths << QStringLiteral("@USS_PRIVATE_PLUGINDIR@");
95+ paths << installRoot() + QStringLiteral("@USS_PRIVATE_PLUGINDIR@");
85− paths << QStringLiteral("@SHELL_PLUGINDIR@");
96+ paths << installRoot() + QStringLiteral("@SHELL_PLUGINDIR@");
86− paths << QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/mocks");
97+ paths << installRoot() + QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/mocks");
87 } else {
98 } else {
88 paths << QStringLiteral("@USS_PRIVATE_PLUGINDIR@");
99 paths << QStringLiteral("@USS_PRIVATE_PLUGINDIR@");
89 paths << QStringLiteral("@SHELL_PLUGINDIR@");
100 paths << QStringLiteral("@SHELL_PLUGINDIR@");
90− paths << QString(buildDirectory() + "/tests/mocks");
101+ paths << buildDirectory() + QStringLiteral("/tests/mocks");
91 }
102 }
92 return paths;
103 return paths;
93}
104}
94
105
95inline QString mockPluginsDir() {
106inline QString mockPluginsDir() {
96 if (isRunningInstalled()) {
107 if (isRunningInstalled()) {
97− return QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/mocks");
108+ return installRoot() + QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/mocks");
98 } else {
109 } else {
99− return QString(buildDirectory() + "/tests/mocks");
110+ return buildDirectory() + QStringLiteral("/tests/mocks");
100 }
111 }
101}
112}
102
113
@@ -137,5 +148,3 @@ inline void appendImportPaths(QQmlEngine *engine, const QStringList &paths)
137 }
148 }
138 engine->setImportPathList(importPathList);
149 engine->setImportPathList(importPathList);
139}
150}
140−
141−#endif
plugins/Unity/Launcher/CMakeLists.txt+8−3
@@ -6,11 +6,16 @@ add_definitions(-DSM_BUSNAME=systemBus)
6include_directories(
6include_directories(
7 ${CMAKE_CURRENT_SOURCE_DIR}
7 ${CMAKE_CURRENT_SOURCE_DIR}
8 ${CMAKE_SOURCE_DIR}/plugins/AccountsService
8 ${CMAKE_SOURCE_DIR}/plugins/AccountsService
9− ${GSETTINGS_QT_INCLUDE_DIRS}
10− ${GLIB_INCLUDE_DIRS}
11 ${libunity8-private_SOURCE_DIR}
9 ${libunity8-private_SOURCE_DIR}
12)
10)
13
11
12+include_directories(
13+ SYSTEM
14+ ${GSETTINGS_QT_INCLUDE_DIRS}
15+ ${GLIB_INCLUDE_DIRS}
16+ ${UAL_INCLUDE_DIRS}
17+ )
18+
14set(QMLLAUNCHERPLUGIN_SRC
19set(QMLLAUNCHERPLUGIN_SRC
15 plugin.cpp
20 plugin.cpp
16 launchermodel.cpp
21 launchermodel.cpp
@@ -19,7 +24,6 @@ set(QMLLAUNCHERPLUGIN_SRC
19 quicklistentry.cpp
24 quicklistentry.cpp
20 dbusinterface.cpp
25 dbusinterface.cpp
21 gsettings.cpp
26 gsettings.cpp
22− desktopfilehandler.cpp
23 asadapter.cpp
27 asadapter.cpp
24 ${CMAKE_SOURCE_DIR}/plugins/AccountsService/AccountsServiceDBusAdaptor.cpp
28 ${CMAKE_SOURCE_DIR}/plugins/AccountsService/AccountsServiceDBusAdaptor.cpp
25 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationManagerInterface.h
29 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationManagerInterface.h
@@ -38,6 +42,7 @@ target_link_libraries(UnityLauncher-qml
38 unity8-private
42 unity8-private
39 ${GSETTINGS_QT_LDFLAGS}
43 ${GSETTINGS_QT_LDFLAGS}
40 ${GLIB_LIBRARIES}
44 ${GLIB_LIBRARIES}
45+ ${UAL_LIBRARIES}
41 )
46 )
42
47
43qt5_use_modules(UnityLauncher-qml DBus Qml Gui)
48qt5_use_modules(UnityLauncher-qml DBus Qml Gui)
plugins/Unity/Launcher/desktopfilehandler.cppdeleted−155
@@ -1,155 +0,0 @@
1−/*
2− * Copyright 2014 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU Lesser General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Michael Zanetti <michael.zanetti@canonical.com>
18− */
19−
20−#include "desktopfilehandler.h"
21−
22−#include <QStringList>
23−#include <QStandardPaths>
24−#include <QDir>
25−#include <QSettings>
26−#include <QLocale>
27−
28−#include <libintl.h>
29−
30−DesktopFileHandler::DesktopFileHandler(const QString &appId, QObject *parent):
31− QObject(parent),
32− m_appId(appId)
33−{
34− load();
35−}
36−
37−QString DesktopFileHandler::appId() const
38−{
39− return m_appId;
40−}
41−
42−void DesktopFileHandler::setAppId(const QString &appId)
43−{
44− if (m_appId != appId) {
45− m_appId = appId;
46− load();
47− }
48−}
49−
50−QString DesktopFileHandler::filename() const
51−{
52− return m_filename;
53−}
54−
55−bool DesktopFileHandler::isValid() const
56−{
57− return !m_filename.isEmpty();
58−}
59−
60−void DesktopFileHandler::load()
61−{
62− m_filename.clear();
63−
64− if (m_appId.isEmpty()) {
65− return;
66− }
67−
68− int dashPos = -1;
69− QString helper = m_appId;
70−
71− QStringList searchDirs = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation);
72−#ifdef LAUNCHER_TESTING
73− searchDirs << QStringLiteral(".");
74−#endif
75−
76− QString path;
77− do {
78− if (dashPos != -1) {
79− helper.replace(dashPos, 1, '/');
80− }
81−
82− if (helper.contains('/')) {
83− path += helper.split('/').at(0) + '/';
84− helper.remove(QRegExp("^" + path));
85− }
86−
87− Q_FOREACH(const QString &searchDirName, searchDirs) {
88− QDir searchDir(searchDirName + "/" + path);
89− const QString desktop = QStringLiteral("*.desktop");
90− Q_FOREACH(const QString &desktopFile, searchDir.entryList(QStringList() << desktop)) {
91− if (desktopFile.startsWith(helper)) {
92− QFileInfo fileInfo(searchDir, desktopFile);
93− m_filename = fileInfo.absoluteFilePath();
94− return;
95− }
96− }
97− }
98−
99− dashPos = helper.indexOf('-');
100− } while (dashPos != -1);
101−}
102−
103−QString DesktopFileHandler::displayName() const
104−{
105− if (!isValid()) {
106− return QString();
107− }
108−
109− QSettings settings(m_filename, QSettings::IniFormat);
110− settings.setIniCodec("UTF-8");
111− settings.beginGroup(QStringLiteral("Desktop Entry"));
112−
113− // First try to find Name[xx_YY] and Name[xx] in .desktop file
114− const QString locale = QLocale().name();
115− const QStringList splitLocale = locale.split(QLatin1Char('_'));
116− const QString shortLocale = splitLocale.first();
117−
118− if (locale != shortLocale && settings.contains(QStringLiteral("Name[%1]").arg(locale))) {
119− return settings.value(QStringLiteral("Name[%1]").arg(locale)).toString();
120− }
121−
122− if (settings.contains(QStringLiteral("Name[%1]").arg(shortLocale))) {
123− return settings.value(QStringLiteral("Name[%1]").arg(shortLocale)).toString();
124− }
125−
126− // No translation found in desktop file. Get the untranslated one and have a go with gettext.
127− QString displayName = settings.value(QStringLiteral("Name")).toString();
128−
129− if (settings.contains(QStringLiteral("X-Ubuntu-Gettext-Domain"))) {
130− const QString domain = settings.value(QStringLiteral("X-Ubuntu-Gettext-Domain")).toString();
131− return dgettext(domain.toUtf8().constData(), displayName.toUtf8().constData());
132− }
133−
134− return displayName;
135−}
136−
137−QString DesktopFileHandler::icon() const
138−{
139− if (!isValid()) {
140− return QString();
141− }
142−
143− QSettings settings(m_filename, QSettings::IniFormat);
144− settings.setIniCodec("UTF-8");
145− settings.beginGroup(QStringLiteral("Desktop Entry"));
146− QString iconString = settings.value(QStringLiteral("Icon")).toString();
147− QString pathString = settings.value(QStringLiteral("Path")).toString();
148−
149− if (QFileInfo::exists(iconString)) {
150− return QFileInfo(iconString).absoluteFilePath();
151− } else if (QFileInfo::exists(pathString + '/' + iconString)) {
152− return pathString + '/' + iconString;
153− }
154− return "image://theme/" + iconString;
155−}
plugins/Unity/Launcher/desktopfilehandler.hdeleted−56
@@ -1,56 +0,0 @@
1−/*
2− * Copyright 2014 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU Lesser General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Michael Zanetti <michael.zanetti@canonical.com>
18− */
19−
20−#ifndef DESKTOPFILEHANDLER_H
21−#define DESKTOPFILEHANDLER_H
22−
23−#include <QObject>
24−
25−/**
26− * When an object of this class is created or whenever setAppId(appId) is called,
27− * this will search for a .desktop file matching the give appId. If a file is
28− * found, isValid() will return true and the other methods return the contents
29− * of the .desktop file.
30− *
31− * Note that this class will consider the user's locale and do a best effort
32− * to return localized values.
33− */
34−
35−class DesktopFileHandler: public QObject
36−{
37− Q_OBJECT
38−public:
39− DesktopFileHandler(const QString &appId = QString(), QObject *parent = nullptr);
40−
41− QString appId() const;
42− void setAppId(const QString &appId);
43−
44− bool isValid() const;
45− QString filename() const;
46− QString displayName() const;
47− QString icon() const;
48−
49−private:
50− void load();
51−
52− QString m_appId;
53− QString m_filename;
54−};
55−
56−#endif
plugins/Unity/Launcher/launchermodel.cpp+53−26
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright 2013-2014 Canonical Ltd.
2+ * Copyright 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 Lesser General Public License as published by
5 * it under the terms of the GNU Lesser General Public License as published by
@@ -12,24 +12,25 @@
12 *
12 *
13 * You should have received a copy of the GNU Lesser General Public License
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Michael Zanetti <michael.zanetti@canonical.com>
18 */
15 */
19
16
20#include "launchermodel.h"
17#include "launchermodel.h"
21#include "launcheritem.h"
18#include "launcheritem.h"
22#include "gsettings.h"
19#include "gsettings.h"
23−#include "desktopfilehandler.h"
24#include "dbusinterface.h"
20#include "dbusinterface.h"
25#include "asadapter.h"
21#include "asadapter.h"
26
22
23+#include <ubuntu-app-launch/appid.h>
24+#include <ubuntu-app-launch/application.h>
25+#include <ubuntu-app-launch/registry.h>
27#include <unity/shell/application/ApplicationInfoInterface.h>
26#include <unity/shell/application/ApplicationInfoInterface.h>
28#include <unity/shell/application/MirSurfaceListInterface.h>
27#include <unity/shell/application/MirSurfaceListInterface.h>
29
28
30#include <QDesktopServices>
29#include <QDesktopServices>
31#include <QDebug>
30#include <QDebug>
32
31
32+namespace ual = ubuntu::app_launch;
33+
33using namespace unity::shell::application;
34using namespace unity::shell::application;
34
35
35LauncherModel::LauncherModel(QObject *parent):
36LauncherModel::LauncherModel(QObject *parent):
@@ -37,7 +38,8 @@ LauncherModel::LauncherModel(QObject *parent):
37 m_settings(new GSettings(this)),
38 m_settings(new GSettings(this)),
38 m_dbusIface(new DBusInterface(this)),
39 m_dbusIface(new DBusInterface(this)),
39 m_asAdapter(new ASAdapter()),
40 m_asAdapter(new ASAdapter()),
40− m_appManager(nullptr)
41+ m_appManager(nullptr),
42+ m_ualRegistry(std::make_shared<ual::Registry>())
41{
43{
42 connect(m_dbusIface, &DBusInterface::countChanged, this, &LauncherModel::countChanged);
44 connect(m_dbusIface, &DBusInterface::countChanged, this, &LauncherModel::countChanged);
43 connect(m_dbusIface, &DBusInterface::countVisibleChanged, this, &LauncherModel::countVisibleChanged);
45 connect(m_dbusIface, &DBusInterface::countVisibleChanged, this, &LauncherModel::countVisibleChanged);
@@ -157,16 +159,16 @@ void LauncherModel::pin(const QString &appId, int index)
157 index = m_list.count();
159 index = m_list.count();
158 }
160 }
159
161
160− DesktopFileHandler desktopFile(appId);
162+ auto appInfo = getApplicationInfo(appId);
161− if (!desktopFile.isValid()) {
163+ if (!appInfo.valid) {
162− qWarning() << "Can't pin this application, there is no .desktop file available.";
164+ qWarning() << "Can't pin application, appId not found:" << appId;
163 return;
165 return;
164 }
166 }
165
167
166 beginInsertRows(QModelIndex(), index, index);
168 beginInsertRows(QModelIndex(), index, index);
167 LauncherItem *item = new LauncherItem(appId,
169 LauncherItem *item = new LauncherItem(appId,
168− desktopFile.displayName(),
170+ appInfo.name,
169− desktopFile.icon(),
171+ appInfo.icon,
170 this);
172 this);
171 item->setPinned(true);
173 item->setPinned(true);
172 m_list.insert(index, item);
174 m_list.insert(index, item);
@@ -333,6 +335,32 @@ int LauncherModel::findApplication(const QString &appId)
333 return -1;
335 return -1;
334}
336}
335
337
338+LauncherModel::AppInfo LauncherModel::getApplicationInfo(const QString &appId)
339+{
340+ AppInfo info;
341+
342+ ual::AppID ualAppId = ual::AppID::find(m_ualRegistry, appId.toStdString());
343+ if (ualAppId.empty()) {
344+ return info;
345+ }
346+
347+ std::shared_ptr<ual::Application> ualApp;
348+ try
349+ {
350+ ualApp = ual::Application::create(ualAppId, m_ualRegistry);
351+ }
352+ catch (std::runtime_error &e)
353+ {
354+ qWarning() << "Couldn't find application info for" << appId << "-" << e.what();
355+ return info;
356+ }
357+
358+ info.valid = true;
359+ info.name = QString::fromStdString(ualApp->info()->name());
360+ info.icon = QString::fromStdString(ualApp->info()->iconPath());
361+ return info;
362+}
363+
336void LauncherModel::progressChanged(const QString &appId, int progress)
364void LauncherModel::progressChanged(const QString &appId, int progress)
337{
365{
338 const int idx = findApplication(appId);
366 const int idx = findApplication(appId);
@@ -380,11 +408,11 @@ void LauncherModel::countVisibleChanged(const QString &appId, bool countVisible)
380 }
408 }
381 } else {
409 } else {
382 // Need to create a new LauncherItem and show the highlight
410 // Need to create a new LauncherItem and show the highlight
383− DesktopFileHandler desktopFile(appId);
411+ auto appInfo = getApplicationInfo(appId);
384− if (countVisible && desktopFile.isValid()) {
412+ if (countVisible && appInfo.valid) {
385 LauncherItem *item = new LauncherItem(appId,
413 LauncherItem *item = new LauncherItem(appId,
386− desktopFile.displayName(),
414+ appInfo.name,
387− desktopFile.icon(),
415+ appInfo.icon,
388 this);
416 this);
389 item->setCountVisible(true);
417 item->setCountVisible(true);
390 beginInsertRows(QModelIndex(), m_list.count(), m_list.count());
418 beginInsertRows(QModelIndex(), m_list.count(), m_list.count());
@@ -400,28 +428,28 @@ void LauncherModel::refresh()
400 // First walk through all the existing items and see if we need to remove something
428 // First walk through all the existing items and see if we need to remove something
401 QList<LauncherItem*> toBeRemoved;
429 QList<LauncherItem*> toBeRemoved;
402 Q_FOREACH (LauncherItem* item, m_list) {
430 Q_FOREACH (LauncherItem* item, m_list) {
403− DesktopFileHandler desktopFile(item->appId());
431+ auto appInfo = getApplicationInfo(item->appId());
404− if (!desktopFile.isValid()) {
432+ if (!appInfo.valid) {
405− // Desktop file not available for this app => drop it!
433+ // Application no longer available => drop it!
406 toBeRemoved << item;
434 toBeRemoved << item;
407 } else if (!m_settings->storedApplications().contains(item->appId())) {
435 } else if (!m_settings->storedApplications().contains(item->appId())) {
408 // Item not in settings any more => drop it!
436 // Item not in settings any more => drop it!
409 toBeRemoved << item;
437 toBeRemoved << item;
410 } else {
438 } else {
411 int idx = m_list.indexOf(item);
439 int idx = m_list.indexOf(item);
412− item->setName(desktopFile.displayName());
440+ item->setName(appInfo.name);
413 item->setPinned(item->pinned()); // update pinned text if needed
441 item->setPinned(item->pinned()); // update pinned text if needed
414 item->setRunning(item->running());
442 item->setRunning(item->running());
415 Q_EMIT dataChanged(index(idx), index(idx), {RoleName, RoleRunning});
443 Q_EMIT dataChanged(index(idx), index(idx), {RoleName, RoleRunning});
416
444
417 const QString oldIcon = item->icon();
445 const QString oldIcon = item->icon();
418− if (oldIcon == desktopFile.icon()) { // same icon file, perhaps different contents, simulate changing the icon name to force reload
446+ if (oldIcon == appInfo.icon) { // same icon file, perhaps different contents, simulate changing the icon name to force reload
419 item->setIcon(QString());
447 item->setIcon(QString());
420 Q_EMIT dataChanged(index(idx), index(idx), {RoleIcon});
448 Q_EMIT dataChanged(index(idx), index(idx), {RoleIcon});
421 }
449 }
422
450
423 // now set the icon for real
451 // now set the icon for real
424− item->setIcon(desktopFile.icon());
452+ item->setIcon(appInfo.icon);
425 Q_EMIT dataChanged(index(idx), index(idx), {RoleIcon});
453 Q_EMIT dataChanged(index(idx), index(idx), {RoleIcon});
426 }
454 }
427 }
455 }
@@ -452,15 +480,14 @@ void LauncherModel::refresh()
452 if (itemIndex == -1) {
480 if (itemIndex == -1) {
453 // Need to add it. Just add it into the addedIndex to keep same ordering as the list
481 // Need to add it. Just add it into the addedIndex to keep same ordering as the list
454 // in the settings.
482 // in the settings.
455− DesktopFileHandler desktopFile(entry);
483+ auto appInfo = getApplicationInfo(entry);
456− if (!desktopFile.isValid()) {
484+ if (!appInfo.valid) {
457− qWarning() << "Couldn't find a .desktop file for" << entry << ". Skipping...";
458 continue;
485 continue;
459 }
486 }
460
487
461 LauncherItem *item = new LauncherItem(entry,
488 LauncherItem *item = new LauncherItem(entry,
462− desktopFile.displayName(),
489+ appInfo.name,
463− desktopFile.icon(),
490+ appInfo.icon,
464 this);
491 this);
465 item->setPinned(true);
492 item->setPinned(true);
466 beginInsertRows(QModelIndex(), addedIndex, addedIndex);
493 beginInsertRows(QModelIndex(), addedIndex, addedIndex);
plugins/Unity/Launcher/launchermodel.h+17−8
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright 2013-2014 Canonical Ltd.
2+ * Copyright 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 Lesser General Public License as published by
5 * it under the terms of the GNU Lesser General Public License as published by
@@ -12,14 +12,11 @@
12 *
12 *
13 * You should have received a copy of the GNU Lesser General Public License
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Michael Zanetti <michael.zanetti@canonical.com>
18 */
15 */
19
16
20−#ifndef LAUNCHERMODEL_H
17+#pragma once
21−#define LAUNCHERMODEL_H
22
18
19+#include <memory>
23#include <unity/shell/launcher/LauncherModelInterface.h>
20#include <unity/shell/launcher/LauncherModelInterface.h>
24#include <unity/shell/application/ApplicationManagerInterface.h>
21#include <unity/shell/application/ApplicationManagerInterface.h>
25
22
@@ -30,6 +27,12 @@ class GSettings;
30class DBusInterface;
27class DBusInterface;
31class ASAdapter;
28class ASAdapter;
32
29
30+namespace ubuntu {
31+ namespace app_launch {
32+ class Registry;
33+ }
34+}
35+
33using namespace unity::shell::launcher;
36using namespace unity::shell::launcher;
34using namespace unity::shell::application;
37using namespace unity::shell::application;
35
38
@@ -70,6 +73,13 @@ private:
70
73
71 void unpin(const QString &appId);
74 void unpin(const QString &appId);
72
75
76+ struct AppInfo {
77+ bool valid = false;
78+ QString name;
79+ QString icon;
80+ };
81+ AppInfo getApplicationInfo(const QString &appId);
82+
73private Q_SLOTS:
83private Q_SLOTS:
74 void countChanged(const QString &appId, int count);
84 void countChanged(const QString &appId, int count);
75 void countVisibleChanged(const QString &appId, bool count);
85 void countVisibleChanged(const QString &appId, bool count);
@@ -88,8 +98,7 @@ private:
88 ASAdapter *m_asAdapter;
98 ASAdapter *m_asAdapter;
89
99
90 ApplicationManagerInterface *m_appManager;
100 ApplicationManagerInterface *m_appManager;
101+ std::shared_ptr<ubuntu::app_launch::Registry> m_ualRegistry;
91
102
92 friend class LauncherModelTest;
103 friend class LauncherModelTest;
93};
104};
94−
95−#endif // LAUNCHERMODEL_H
po/fa.po+17−15
@@ -8,15 +8,15 @@ msgstr ""
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-09-22 07:46+0000\n"
10"POT-Creation-Date: 2016-09-22 07:46+0000\n"
11−"PO-Revision-Date: 2016-07-09 07:27+0000\n"
11+"PO-Revision-Date: 2016-10-18 07:03+0000\n"
12"Last-Translator: Danial Behzadi <dani.behzi@gmail.com>\n"
12"Last-Translator: Danial Behzadi <dani.behzi@gmail.com>\n"
13"Language-Team: Persian <fa@li.org>\n"
13"Language-Team: Persian <fa@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=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2016-09-27 07:04+0000\n"
18+"X-Launchpad-Export-Date: 2016-10-19 06:33+0000\n"
19−"X-Generator: Launchpad (build 18204)\n"
19+"X-Generator: Launchpad (build 18232)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:123
21#: plugins/LightDM/Greeter.cpp:123
22msgid "Password: "
22msgid "Password: "
@@ -448,11 +448,11 @@ msgstr "تلاش دوباره"
448
448
449#: qml/Greeter/LoginList.qml:70
449#: qml/Greeter/LoginList.qml:70
450msgid "Passphrase"
450msgid "Passphrase"
451−msgstr ""
451+msgstr "عبارت‌عبور"
452
452
453#: qml/Greeter/LoginList.qml:71
453#: qml/Greeter/LoginList.qml:71
454msgid "Passcode"
454msgid "Passcode"
455−msgstr ""
455+msgstr "رمزعبور"
456
456
457#: qml/Greeter/LoginList.qml:98
457#: qml/Greeter/LoginList.qml:98
458msgid "Retry"
458msgid "Retry"
@@ -464,11 +464,11 @@ msgstr "ورود"
464
464
465#: qml/Greeter/NarrowView.qml:252
465#: qml/Greeter/NarrowView.qml:252
466msgid "Emergency"
466msgid "Emergency"
467−msgstr ""
467+msgstr "اضطراری"
468
468
469#: qml/Greeter/SessionsList.qml:122
469#: qml/Greeter/SessionsList.qml:122
470msgid "Select desktop environment"
470msgid "Select desktop environment"
471−msgstr ""
471+msgstr "گزینش محیط میزکار"
472
472
473#: qml/Notifications/NotificationMenuItemFactory.qml:124
473#: qml/Notifications/NotificationMenuItemFactory.qml:124
474msgid "Show password"
474msgid "Show password"
@@ -600,15 +600,15 @@ msgstr "بعدی"
600
600
601#: qml/Wizard/Pages/20-keyboard.qml:31
601#: qml/Wizard/Pages/20-keyboard.qml:31
602msgid "Select Keyboard"
602msgid "Select Keyboard"
603−msgstr ""
603+msgstr "گزینش صفحه‌کلید"
604
604
605#: qml/Wizard/Pages/20-keyboard.qml:71
605#: qml/Wizard/Pages/20-keyboard.qml:71
606msgid "Keyboard language"
606msgid "Keyboard language"
607−msgstr ""
607+msgstr "زبان صفحه‌کلید"
608
608
609#: qml/Wizard/Pages/20-keyboard.qml:93
609#: qml/Wizard/Pages/20-keyboard.qml:93
610msgid "Keyboard layout"
610msgid "Keyboard layout"
611−msgstr ""
611+msgstr "چینش صفحه‌کلید"
612
612
613#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
613#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
614#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
614#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
@@ -719,32 +719,34 @@ msgstr "سیاست محرمانگی"
719
719
720#: qml/Wizard/Pages/77-system-update.qml:28
720#: qml/Wizard/Pages/77-system-update.qml:28
721msgid "Update Device"
721msgid "Update Device"
722−msgstr ""
722+msgstr "به‌روز رسانی افزاره"
723
723
724#: qml/Wizard/Pages/77-system-update.qml:55
724#: qml/Wizard/Pages/77-system-update.qml:55
725msgid ""
725msgid ""
726"There is a system update available and ready to install. Afterwards, the "
726"There is a system update available and ready to install. Afterwards, the "
727"device will automatically restart."
727"device will automatically restart."
728msgstr ""
728msgstr ""
729+"یک به‌روز رسانی سامانه‌ای موجود و آمادهٔ نصب است. پس از آن، دستگاه به صورت "
730+"خودکار خاموش و روشن می‌شود."
729
731
730#: qml/Wizard/Pages/77-system-update.qml:76
732#: qml/Wizard/Pages/77-system-update.qml:76
731msgctxt "string identifying name of the update"
733msgctxt "string identifying name of the update"
732msgid "Ubuntu system"
734msgid "Ubuntu system"
733−msgstr ""
735+msgstr "سامانهٔ اوبونتو"
734
736
735#: qml/Wizard/Pages/77-system-update.qml:83
737#: qml/Wizard/Pages/77-system-update.qml:83
736#, qt-format
738#, qt-format
737msgctxt "version of the system update"
739msgctxt "version of the system update"
738msgid "Version %1"
740msgid "Version %1"
739−msgstr ""
741+msgstr "نگارش %1"
740
742
741#: qml/Wizard/Pages/77-system-update.qml:102
743#: qml/Wizard/Pages/77-system-update.qml:102
742msgid "This could take a few minutes..."
744msgid "This could take a few minutes..."
743−msgstr ""
745+msgstr "ممکن است چند دقیقه طول بکشد"
744
746
745#: qml/Wizard/Pages/77-system-update.qml:116
747#: qml/Wizard/Pages/77-system-update.qml:116
746msgid "Install and restart now"
748msgid "Install and restart now"
747−msgstr ""
749+msgstr "هم‌اکنون نصب و خاموش و روشن شود"
748
750
749#: qml/Wizard/Pages/80-finished.qml:89
751#: qml/Wizard/Pages/80-finished.qml:89
750msgid "Welcome to Ubuntu"
752msgid "Welcome to Ubuntu"
po/nl.po+111−97
@@ -8,15 +8,15 @@ msgstr ""
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-09-22 07:46+0000\n"
10"POT-Creation-Date: 2016-09-22 07:46+0000\n"
11−"PO-Revision-Date: 2015-07-07 07:14+0000\n"
11+"PO-Revision-Date: 2016-10-17 15:59+0000\n"
12−"Last-Translator: Hannie Dumoleyn <Unknown>\n"
12+"Last-Translator: Martijn Grootenboer <martijn.1987@live.nl>\n"
13"Language-Team: Dutch <nl@li.org>\n"
13"Language-Team: Dutch <nl@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-09-27 07:03+0000\n"
18+"X-Launchpad-Export-Date: 2016-10-18 06:47+0000\n"
19−"X-Generator: Launchpad (build 18204)\n"
19+"X-Generator: Launchpad (build 18232)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:123
21#: plugins/LightDM/Greeter.cpp:123
22msgid "Password: "
22msgid "Password: "
@@ -103,163 +103,163 @@ msgstr "Herstarten"
103
103
104#: qml/Components/KeyboardShortcutsOverlay.qml:41
104#: qml/Components/KeyboardShortcutsOverlay.qml:41
105msgid "Keyboard Shortcuts"
105msgid "Keyboard Shortcuts"
106−msgstr ""
106+msgstr "Sneltoetsen"
107
107
108#: qml/Components/KeyboardShortcutsOverlay.qml:55
108#: qml/Components/KeyboardShortcutsOverlay.qml:55
109msgid "Unity 8"
109msgid "Unity 8"
110−msgstr ""
110+msgstr "Unity 8"
111
111
112#: qml/Components/KeyboardShortcutsOverlay.qml:62
112#: qml/Components/KeyboardShortcutsOverlay.qml:62
113msgid "PrtScr"
113msgid "PrtScr"
114−msgstr ""
114+msgstr "PrtScr"
115
115
116#: qml/Components/KeyboardShortcutsOverlay.qml:67
116#: qml/Components/KeyboardShortcutsOverlay.qml:67
117msgid "Takes a screenshot."
117msgid "Takes a screenshot."
118−msgstr ""
118+msgstr "Maakt een schermafdruk."
119
119
120#: qml/Components/KeyboardShortcutsOverlay.qml:75
120#: qml/Components/KeyboardShortcutsOverlay.qml:75
121msgid "Alt + PrtScr"
121msgid "Alt + PrtScr"
122−msgstr ""
122+msgstr "Alt + PrtScr"
123
123
124#: qml/Components/KeyboardShortcutsOverlay.qml:80
124#: qml/Components/KeyboardShortcutsOverlay.qml:80
125msgid "Takes a screenshot of a window."
125msgid "Takes a screenshot of a window."
126−msgstr ""
126+msgstr "Maakt een schermafdruk van een venster."
127
127
128#: qml/Components/KeyboardShortcutsOverlay.qml:88
128#: qml/Components/KeyboardShortcutsOverlay.qml:88
129msgid "Super + Space"
129msgid "Super + Space"
130−msgstr ""
130+msgstr "Super + Spatiebalk"
131
131
132#: qml/Components/KeyboardShortcutsOverlay.qml:93
132#: qml/Components/KeyboardShortcutsOverlay.qml:93
133msgid "Switches to next keyboard layout."
133msgid "Switches to next keyboard layout."
134−msgstr ""
134+msgstr "Schakelt naar volgende toetsenbordindeling."
135
135
136#: qml/Components/KeyboardShortcutsOverlay.qml:101
136#: qml/Components/KeyboardShortcutsOverlay.qml:101
137msgid "Super + Shift + Space"
137msgid "Super + Shift + Space"
138−msgstr ""
138+msgstr "Super + Shift + Spatiebalk"
139
139
140#: qml/Components/KeyboardShortcutsOverlay.qml:106
140#: qml/Components/KeyboardShortcutsOverlay.qml:106
141msgid "Switches to previous keyboard layout."
141msgid "Switches to previous keyboard layout."
142−msgstr ""
142+msgstr "Schakelt naar vorige toetsenbordindeling."
143
143
144#: qml/Components/KeyboardShortcutsOverlay.qml:118
144#: qml/Components/KeyboardShortcutsOverlay.qml:118
145msgid "Launcher"
145msgid "Launcher"
146−msgstr ""
146+msgstr "De Starter"
147
147
148#: qml/Components/KeyboardShortcutsOverlay.qml:125
148#: qml/Components/KeyboardShortcutsOverlay.qml:125
149msgid "Super (Hold)"
149msgid "Super (Hold)"
150−msgstr ""
150+msgstr "Super (Vasthouden)"
151
151
152#: qml/Components/KeyboardShortcutsOverlay.qml:130
152#: qml/Components/KeyboardShortcutsOverlay.qml:130
153msgid "Opens the launcher, displays shortcuts."
153msgid "Opens the launcher, displays shortcuts."
154−msgstr ""
154+msgstr "Opent de Starter; toont sneltoetsnen."
155
155
156#: qml/Components/KeyboardShortcutsOverlay.qml:138
156#: qml/Components/KeyboardShortcutsOverlay.qml:138
157msgid "Alt + F1"
157msgid "Alt + F1"
158−msgstr ""
158+msgstr "Alt + F1"
159
159
160#: qml/Components/KeyboardShortcutsOverlay.qml:143
160#: qml/Components/KeyboardShortcutsOverlay.qml:143
161msgid "Opens launcher keyboard navigation mode."
161msgid "Opens launcher keyboard navigation mode."
162−msgstr ""
162+msgstr "Opent toetsenbordnavigatiemodus van Starter."
163
163
164#: qml/Components/KeyboardShortcutsOverlay.qml:151
164#: qml/Components/KeyboardShortcutsOverlay.qml:151
165msgid "Super + Tab"
165msgid "Super + Tab"
166−msgstr ""
166+msgstr "Super + Tab"
167
167
168#: qml/Components/KeyboardShortcutsOverlay.qml:156
168#: qml/Components/KeyboardShortcutsOverlay.qml:156
169msgid "Switches applications via the launcher."
169msgid "Switches applications via the launcher."
170−msgstr ""
170+msgstr "Wisselt toepassingen via de Starter."
171
171
172#: qml/Components/KeyboardShortcutsOverlay.qml:164
172#: qml/Components/KeyboardShortcutsOverlay.qml:164
173msgid "Super + 0 to 9"
173msgid "Super + 0 to 9"
174−msgstr ""
174+msgstr "Super + 0 tot 9"
175
175
176#: qml/Components/KeyboardShortcutsOverlay.qml:169
176#: qml/Components/KeyboardShortcutsOverlay.qml:169
177msgid "Same as clicking on a launcher icon."
177msgid "Same as clicking on a launcher icon."
178−msgstr ""
178+msgstr "Hetzelfde als klikken op een pictogram in de Starter."
179
179
180#: qml/Components/KeyboardShortcutsOverlay.qml:181
180#: qml/Components/KeyboardShortcutsOverlay.qml:181
181msgid "Scopes"
181msgid "Scopes"
182−msgstr ""
182+msgstr "Scopes"
183
183
184#: qml/Components/KeyboardShortcutsOverlay.qml:188
184#: qml/Components/KeyboardShortcutsOverlay.qml:188
185msgid "Super (Tap)"
185msgid "Super (Tap)"
186−msgstr ""
186+msgstr "Super (Tikken)"
187
187
188#: qml/Components/KeyboardShortcutsOverlay.qml:193
188#: qml/Components/KeyboardShortcutsOverlay.qml:193
189msgid "Opens the Scopes home."
189msgid "Opens the Scopes home."
190−msgstr ""
190+msgstr "Opent Scopes-startpagina."
191
191
192#: qml/Components/KeyboardShortcutsOverlay.qml:209
192#: qml/Components/KeyboardShortcutsOverlay.qml:209
193msgid "Switching"
193msgid "Switching"
194−msgstr ""
194+msgstr "Wisselen"
195
195
196#: qml/Components/KeyboardShortcutsOverlay.qml:216
196#: qml/Components/KeyboardShortcutsOverlay.qml:216
197msgid "Alt + Tab"
197msgid "Alt + Tab"
198−msgstr ""
198+msgstr "Alt + Tab"
199
199
200#: qml/Components/KeyboardShortcutsOverlay.qml:221
200#: qml/Components/KeyboardShortcutsOverlay.qml:221
201msgid "Switches between applications."
201msgid "Switches between applications."
202−msgstr ""
202+msgstr "Wisselt tussen toepassingen."
203
203
204#: qml/Components/KeyboardShortcutsOverlay.qml:229
204#: qml/Components/KeyboardShortcutsOverlay.qml:229
205msgid "Super + W"
205msgid "Super + W"
206−msgstr ""
206+msgstr "Super + W"
207
207
208#: qml/Components/KeyboardShortcutsOverlay.qml:234
208#: qml/Components/KeyboardShortcutsOverlay.qml:234
209msgid "Opens the desktop spread."
209msgid "Opens the desktop spread."
210−msgstr ""
210+msgstr "Opent bureaubladspreiding."
211
211
212#: qml/Components/KeyboardShortcutsOverlay.qml:242
212#: qml/Components/KeyboardShortcutsOverlay.qml:242
213msgid "Cursor Left or Right"
213msgid "Cursor Left or Right"
214−msgstr ""
214+msgstr "Pijltoets links of rechts"
215
215
216#: qml/Components/KeyboardShortcutsOverlay.qml:247
216#: qml/Components/KeyboardShortcutsOverlay.qml:247
217msgid "Moves the focus."
217msgid "Moves the focus."
218−msgstr ""
218+msgstr "Verplaatst de focus."
219
219
220#: qml/Components/KeyboardShortcutsOverlay.qml:259
220#: qml/Components/KeyboardShortcutsOverlay.qml:259
221msgid "Windows"
221msgid "Windows"
222−msgstr ""
222+msgstr "Vensters"
223
223
224#: qml/Components/KeyboardShortcutsOverlay.qml:266
224#: qml/Components/KeyboardShortcutsOverlay.qml:266
225msgid "Ctrl + Super + D"
225msgid "Ctrl + Super + D"
226−msgstr ""
226+msgstr "Ctrl + Super + D"
227
227
228#: qml/Components/KeyboardShortcutsOverlay.qml:271
228#: qml/Components/KeyboardShortcutsOverlay.qml:271
229msgid "Minimizes all windows."
229msgid "Minimizes all windows."
230−msgstr ""
230+msgstr "Minimaliseert alle vensters."
231
231
232#: qml/Components/KeyboardShortcutsOverlay.qml:279
232#: qml/Components/KeyboardShortcutsOverlay.qml:279
233msgid "Ctrl + Super + Up"
233msgid "Ctrl + Super + Up"
234−msgstr ""
234+msgstr "Ctrl + Super + Pijl omhoog"
235
235
236#: qml/Components/KeyboardShortcutsOverlay.qml:284
236#: qml/Components/KeyboardShortcutsOverlay.qml:284
237msgid "Maximizes the current window."
237msgid "Maximizes the current window."
238−msgstr ""
238+msgstr "Maximaliseert het huidige venster."
239
239
240#: qml/Components/KeyboardShortcutsOverlay.qml:292
240#: qml/Components/KeyboardShortcutsOverlay.qml:292
241msgid "Ctrl + Super + Down"
241msgid "Ctrl + Super + Down"
242−msgstr ""
242+msgstr "Ctrl + Super + Pijl omlaag"
243
243
244#: qml/Components/KeyboardShortcutsOverlay.qml:297
244#: qml/Components/KeyboardShortcutsOverlay.qml:297
245msgid "Minimizes or restores the current window."
245msgid "Minimizes or restores the current window."
246−msgstr ""
246+msgstr "Maximaliseert of herstelt het huidige venster."
247
247
248#: qml/Components/KeyboardShortcutsOverlay.qml:305
248#: qml/Components/KeyboardShortcutsOverlay.qml:305
249msgid "Ctrl + Super + Left or Right"
249msgid "Ctrl + Super + Left or Right"
250−msgstr ""
250+msgstr "Ctrl + Super + Pijl links of rechts"
251
251
252#: qml/Components/KeyboardShortcutsOverlay.qml:310
252#: qml/Components/KeyboardShortcutsOverlay.qml:310
253msgid "Semi-maximizes the current window."
253msgid "Semi-maximizes the current window."
254−msgstr ""
254+msgstr "Plaatst het venster links of rechts."
255
255
256#: qml/Components/KeyboardShortcutsOverlay.qml:318
256#: qml/Components/KeyboardShortcutsOverlay.qml:318
257msgid "Alt + F4"
257msgid "Alt + F4"
258−msgstr ""
258+msgstr "Alt + F4"
259
259
260#: qml/Components/KeyboardShortcutsOverlay.qml:323
260#: qml/Components/KeyboardShortcutsOverlay.qml:323
261msgid "Closes the current window."
261msgid "Closes the current window."
262−msgstr ""
262+msgstr "Sluit het huidige venster."
263
263
264#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
264#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
265msgid "Return to Call"
265msgid "Return to Call"
@@ -276,12 +276,12 @@ msgstr "Ok"
276#: qml/Components/MediaServices/VideoPlayerControls.qml:44
276#: qml/Components/MediaServices/VideoPlayerControls.qml:44
277#, qt-format
277#, qt-format
278msgid "%1:%2:%3"
278msgid "%1:%2:%3"
279−msgstr ""
279+msgstr "%1:%2:%3"
280
280
281#: qml/Components/MediaServices/VideoPlayerControls.qml:49
281#: qml/Components/MediaServices/VideoPlayerControls.qml:49
282#, qt-format
282#, qt-format
283msgid "%1:%2"
283msgid "%1:%2"
284−msgstr ""
284+msgstr "%1:%2"
285
285
286#: qml/Components/ModeSwitchWarningDialog.qml:32
286#: qml/Components/ModeSwitchWarningDialog.qml:32
287msgid "Apps may have unsaved data:"
287msgid "Apps may have unsaved data:"
@@ -349,11 +349,11 @@ msgstr "Herstellen"
349
349
350#: qml/Dash/GenericScopeView.qml:586 qml/Dash/GenericScopeView.qml:782
350#: qml/Dash/GenericScopeView.qml:586 qml/Dash/GenericScopeView.qml:782
351msgid "Show less"
351msgid "Show less"
352−msgstr ""
352+msgstr "Minder weergeven"
353
353
354#: qml/Dash/GenericScopeView.qml:586
354#: qml/Dash/GenericScopeView.qml:586
355msgid "Show all"
355msgid "Show all"
356−msgstr ""
356+msgstr "Alles weergeven"
357
357
358#: qml/Dash/GenericScopeView.qml:643
358#: qml/Dash/GenericScopeView.qml:643
359msgctxt "Label: Hint for dash search line edit"
359msgctxt "Label: Hint for dash search line edit"
@@ -450,15 +450,15 @@ msgstr[1] "Wacht a.u.b. %1 minuten en probeer het dan opnieuw…"
450
450
451#: qml/Greeter/Greeter.qml:596
451#: qml/Greeter/Greeter.qml:596
452msgid "Try again"
452msgid "Try again"
453−msgstr ""
453+msgstr "Probeer het opnieuw"
454
454
455#: qml/Greeter/LoginList.qml:70
455#: qml/Greeter/LoginList.qml:70
456msgid "Passphrase"
456msgid "Passphrase"
457−msgstr ""
457+msgstr "Wachtwoordzin"
458
458
459#: qml/Greeter/LoginList.qml:71
459#: qml/Greeter/LoginList.qml:71
460msgid "Passcode"
460msgid "Passcode"
461−msgstr ""
461+msgstr "Toegangscode"
462
462
463#: qml/Greeter/LoginList.qml:98
463#: qml/Greeter/LoginList.qml:98
464msgid "Retry"
464msgid "Retry"
@@ -466,15 +466,15 @@ msgstr "Opnieuw proberen"
466
466
467#: qml/Greeter/LoginList.qml:99
467#: qml/Greeter/LoginList.qml:99
468msgid "Log In"
468msgid "Log In"
469−msgstr ""
469+msgstr "Aanmelden"
470
470
471#: qml/Greeter/NarrowView.qml:252
471#: qml/Greeter/NarrowView.qml:252
472msgid "Emergency"
472msgid "Emergency"
473−msgstr ""
473+msgstr "Noodgeval"
474
474
475#: qml/Greeter/SessionsList.qml:122
475#: qml/Greeter/SessionsList.qml:122
476msgid "Select desktop environment"
476msgid "Select desktop environment"
477−msgstr ""
477+msgstr "Bureaubladomgeving selecteren"
478
478
479#: qml/Notifications/NotificationMenuItemFactory.qml:124
479#: qml/Notifications/NotificationMenuItemFactory.qml:124
480msgid "Show password"
480msgid "Show password"
@@ -574,19 +574,21 @@ msgstr "Lang vanaf de linkerkant vegen om de Vandaag-scope te openen"
574
574
575#: qml/Tutorial/TutorialLeft.qml:47
575#: qml/Tutorial/TutorialLeft.qml:47
576msgid "Short swipe from the left edge to open the launcher"
576msgid "Short swipe from the left edge to open the launcher"
577−msgstr ""
577+msgstr "Veeg kort vanaf de linkerrand om de Starter te openen"
578
578
579#: qml/Tutorial/TutorialRight.qml:55
579#: qml/Tutorial/TutorialRight.qml:55
580msgid "Push your mouse against the right edge to view your open apps"
580msgid "Push your mouse against the right edge to view your open apps"
581−msgstr ""
581+msgstr "Duw uw muis tegen de rechterrand om geopende apps te zien"
582
582
583#: qml/Tutorial/TutorialRight.qml:56
583#: qml/Tutorial/TutorialRight.qml:56
584msgid "Swipe from the right edge to view your open apps"
584msgid "Swipe from the right edge to view your open apps"
585−msgstr ""
585+msgstr "Veeg vanaf de rechterrand om geopende apps te zien"
586
586
587#: qml/Tutorial/TutorialTop.qml:53
587#: qml/Tutorial/TutorialTop.qml:53
588msgid "Swipe from the top edge to access notifications and quick settings"
588msgid "Swipe from the top edge to access notifications and quick settings"
589msgstr ""
589msgstr ""
590+"Veeg van de bovenrand om toegang te krijgen tot notificaties en snelle "
591+"instellingen"
590
592
591#: qml/Wizard/Page.qml:54
593#: qml/Wizard/Page.qml:54
592msgctxt "Button: Go back one page in the Wizard"
594msgctxt "Button: Go back one page in the Wizard"
@@ -595,7 +597,7 @@ msgstr "Terug"
595
597
596#: qml/Wizard/Pages/10-welcome.qml:28
598#: qml/Wizard/Pages/10-welcome.qml:28
597msgid "Language"
599msgid "Language"
598−msgstr ""
600+msgstr "Taal"
599
601
600#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
602#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
601#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
603#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
@@ -605,19 +607,19 @@ msgstr ""
605#: qml/Wizard/Pages/passcode-desktop.qml:142
607#: qml/Wizard/Pages/passcode-desktop.qml:142
606#: qml/Wizard/Pages/password-set.qml:142
608#: qml/Wizard/Pages/password-set.qml:142
607msgid "Next"
609msgid "Next"
608−msgstr ""
610+msgstr "Volgende"
609
611
610#: qml/Wizard/Pages/20-keyboard.qml:31
612#: qml/Wizard/Pages/20-keyboard.qml:31
611msgid "Select Keyboard"
613msgid "Select Keyboard"
612−msgstr ""
614+msgstr "Toetsenbord selecteren"
613
615
614#: qml/Wizard/Pages/20-keyboard.qml:71
616#: qml/Wizard/Pages/20-keyboard.qml:71
615msgid "Keyboard language"
617msgid "Keyboard language"
616−msgstr ""
618+msgstr "Taal toetsenbord"
617
619
618#: qml/Wizard/Pages/20-keyboard.qml:93
620#: qml/Wizard/Pages/20-keyboard.qml:93
619msgid "Keyboard layout"
621msgid "Keyboard layout"
620−msgstr ""
622+msgstr "Toetsenbordindeling"
621
623
622#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
624#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
623#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
625#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
@@ -631,139 +633,144 @@ msgstr "Verbinden met Wifi"
631
633
632#: qml/Wizard/Pages/30-wifi.qml:132
634#: qml/Wizard/Pages/30-wifi.qml:132
633msgid "Connected"
635msgid "Connected"
634−msgstr ""
636+msgstr "Verbonden"
635
637
636#: qml/Wizard/Pages/30-wifi.qml:165
638#: qml/Wizard/Pages/30-wifi.qml:165
637msgid "Available Wi-Fi networks"
639msgid "Available Wi-Fi networks"
638−msgstr ""
640+msgstr "Beschikbare wifi-netwerken"
639
641
640#: qml/Wizard/Pages/30-wifi.qml:166
642#: qml/Wizard/Pages/30-wifi.qml:166
641msgid "No available Wi-Fi networks"
643msgid "No available Wi-Fi networks"
642−msgstr ""
644+msgstr "Geen wifi-netwerken beschikbaar"
643
645
644#: qml/Wizard/Pages/40-location.qml:27
646#: qml/Wizard/Pages/40-location.qml:27
645msgid "Location Services"
647msgid "Location Services"
646−msgstr ""
648+msgstr "Locatie Diensten"
647
649
648#: qml/Wizard/Pages/40-location.qml:83
650#: qml/Wizard/Pages/40-location.qml:83
649msgid ""
651msgid ""
650"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
652"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
651"(recommended)"
653"(recommended)"
652msgstr ""
654msgstr ""
655+"Maak anoniem gebruik van GPS, wifi-hotspots en het mobiele netwerk om uw "
656+"locatie te bepalen (aanbevolen)"
653
657
654#: qml/Wizard/Pages/40-location.qml:105
658#: qml/Wizard/Pages/40-location.qml:105
655#, qt-format
659#, qt-format
656msgid "By selecting this option you agree to the Nokia HERE %1."
660msgid "By selecting this option you agree to the Nokia HERE %1."
657−msgstr ""
661+msgstr "Door deze optie te selecteren gaat u akkoord met de Nokia HERE %1."
658
662
659#: qml/Wizard/Pages/40-location.qml:106
663#: qml/Wizard/Pages/40-location.qml:106
660msgctxt "part of: Nokia HERE terms and conditions"
664msgctxt "part of: Nokia HERE terms and conditions"
661msgid "terms and conditions"
665msgid "terms and conditions"
662−msgstr ""
666+msgstr "voorwaarden voor gebruik"
663
667
664#: qml/Wizard/Pages/40-location.qml:160
668#: qml/Wizard/Pages/40-location.qml:160
665msgid "GPS only"
669msgid "GPS only"
666−msgstr ""
670+msgstr "Alleen GPS"
667
671
668#: qml/Wizard/Pages/40-location.qml:214
672#: qml/Wizard/Pages/40-location.qml:214
669msgid "Don't use my location"
673msgid "Don't use my location"
670−msgstr ""
674+msgstr "Mijn locatie niet gebruiken"
671
675
672#: qml/Wizard/Pages/40-location.qml:260
676#: qml/Wizard/Pages/40-location.qml:260
673msgid "You can change it later in System Settings."
677msgid "You can change it later in System Settings."
674−msgstr ""
678+msgstr "U kunt het later aanpassen in Systeeminstellingen"
675
679
676#: qml/Wizard/Pages/50-timezone.qml:30
680#: qml/Wizard/Pages/50-timezone.qml:30
677msgid "Time Zone"
681msgid "Time Zone"
678−msgstr ""
682+msgstr "Tijdzone"
679
683
680#: qml/Wizard/Pages/50-timezone.qml:182
684#: qml/Wizard/Pages/50-timezone.qml:182
681msgid "Enter your city"
685msgid "Enter your city"
682−msgstr ""
686+msgstr "Uw stad invoeren"
683
687
684#: qml/Wizard/Pages/60-account.qml:24
688#: qml/Wizard/Pages/60-account.qml:24
685msgid "Personalize Your Device"
689msgid "Personalize Your Device"
686−msgstr ""
690+msgstr "Uw apparaat personaliseren"
687
691
688#: qml/Wizard/Pages/60-account.qml:48
692#: qml/Wizard/Pages/60-account.qml:48
689msgid "Preferred Name"
693msgid "Preferred Name"
690−msgstr ""
694+msgstr "Gebruikersnaam"
691
695
692#: qml/Wizard/Pages/70-passwd-type.qml:40
696#: qml/Wizard/Pages/70-passwd-type.qml:40
693msgid "Lock Screen"
697msgid "Lock Screen"
694−msgstr ""
698+msgstr "Schermvergrendeling"
695
699
696#: qml/Wizard/Pages/70-passwd-type.qml:102
700#: qml/Wizard/Pages/70-passwd-type.qml:102
697msgctxt "Label: Type of security method"
701msgctxt "Label: Type of security method"
698msgid "Create new password"
702msgid "Create new password"
699−msgstr ""
703+msgstr "Een nieuw wachtwoord aanmaken"
700
704
701#: qml/Wizard/Pages/70-passwd-type.qml:104
705#: qml/Wizard/Pages/70-passwd-type.qml:104
702msgctxt "Label: Type of security method"
706msgctxt "Label: Type of security method"
703msgid "Create passcode (numbers only)"
707msgid "Create passcode (numbers only)"
704−msgstr ""
708+msgstr "PIN-code (alleen nummers) aanmaken"
705
709
706#: qml/Wizard/Pages/70-passwd-type.qml:106
710#: qml/Wizard/Pages/70-passwd-type.qml:106
707msgctxt "Label: Type of security method"
711msgctxt "Label: Type of security method"
708msgid "No lock code"
712msgid "No lock code"
709−msgstr ""
713+msgstr "Geen vergrendelcode"
710
714
711#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
715#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
712msgid "Privacy Policy"
716msgid "Privacy Policy"
713−msgstr ""
717+msgstr "Privacybeleid"
714
718
715#: qml/Wizard/Pages/75-report-check.qml:26
719#: qml/Wizard/Pages/75-report-check.qml:26
716msgid "Help Us Improve"
720msgid "Help Us Improve"
717−msgstr ""
721+msgstr "Help ons verbeteren"
718
722
719#: qml/Wizard/Pages/75-report-check.qml:59
723#: qml/Wizard/Pages/75-report-check.qml:59
720msgid "Improve system performance by sending us crashes and error reports."
724msgid "Improve system performance by sending us crashes and error reports."
721msgstr ""
725msgstr ""
726+"Verbeteren van systeemprestaties door ons crash- en foutrapportages te sturen"
722
727
723#: qml/Wizard/Pages/75-report-check.qml:60
728#: qml/Wizard/Pages/75-report-check.qml:60
724msgid "Privacy policy"
729msgid "Privacy policy"
725−msgstr ""
730+msgstr "Privacybeleid"
726
731
727#: qml/Wizard/Pages/77-system-update.qml:28
732#: qml/Wizard/Pages/77-system-update.qml:28
728msgid "Update Device"
733msgid "Update Device"
729−msgstr ""
734+msgstr "Apparaat bijwerken"
730
735
731#: qml/Wizard/Pages/77-system-update.qml:55
736#: qml/Wizard/Pages/77-system-update.qml:55
732msgid ""
737msgid ""
733"There is a system update available and ready to install. Afterwards, the "
738"There is a system update available and ready to install. Afterwards, the "
734"device will automatically restart."
739"device will automatically restart."
735msgstr ""
740msgstr ""
741+"Er is een systeemupdate beschikbaar en klaar om geïnstalleerd te worden. "
742+"Daarna zal het apparaat automatisch opnieuw starten."
736
743
737#: qml/Wizard/Pages/77-system-update.qml:76
744#: qml/Wizard/Pages/77-system-update.qml:76
738msgctxt "string identifying name of the update"
745msgctxt "string identifying name of the update"
739msgid "Ubuntu system"
746msgid "Ubuntu system"
740−msgstr ""
747+msgstr "Ubuntu-systeem"
741
748
742#: qml/Wizard/Pages/77-system-update.qml:83
749#: qml/Wizard/Pages/77-system-update.qml:83
743#, qt-format
750#, qt-format
744msgctxt "version of the system update"
751msgctxt "version of the system update"
745msgid "Version %1"
752msgid "Version %1"
746−msgstr ""
753+msgstr "Versie %1"
747
754
748#: qml/Wizard/Pages/77-system-update.qml:102
755#: qml/Wizard/Pages/77-system-update.qml:102
749msgid "This could take a few minutes..."
756msgid "This could take a few minutes..."
750−msgstr ""
757+msgstr "Dit kan enkele minuten duren…"
751
758
752#: qml/Wizard/Pages/77-system-update.qml:116
759#: qml/Wizard/Pages/77-system-update.qml:116
753msgid "Install and restart now"
760msgid "Install and restart now"
754−msgstr ""
761+msgstr "Nu installeren en herstarten"
755
762
756#: qml/Wizard/Pages/80-finished.qml:89
763#: qml/Wizard/Pages/80-finished.qml:89
757msgid "Welcome to Ubuntu"
764msgid "Welcome to Ubuntu"
758−msgstr ""
765+msgstr "Welkom bij Ubuntu"
759
766
760#: qml/Wizard/Pages/80-finished.qml:104
767#: qml/Wizard/Pages/80-finished.qml:104
761msgid "You are ready to use your device now"
768msgid "You are ready to use your device now"
762−msgstr ""
769+msgstr "U bent klaar om uw apparaat te gebruiken"
763
770
764#: qml/Wizard/Pages/80-finished.qml:124
771#: qml/Wizard/Pages/80-finished.qml:124
765msgid "Get Started"
772msgid "Get Started"
766−msgstr ""
773+msgstr "Aan de slag"
767
774
768#: qml/Wizard/Pages/here-terms.qml:25
775#: qml/Wizard/Pages/here-terms.qml:25
769msgid "Terms & Conditions"
776msgid "Terms & Conditions"
@@ -772,6 +779,7 @@ msgstr "Algemene voorwaarden"
772#: qml/Wizard/Pages/here-terms.qml:69
779#: qml/Wizard/Pages/here-terms.qml:69
773msgid "Your device uses positioning technologies provided by HERE."
780msgid "Your device uses positioning technologies provided by HERE."
774msgstr ""
781msgstr ""
782+"Uw apparaat maakt gebruik van technologieën voor plaatsbepaling van HERE."
775
783
776#: qml/Wizard/Pages/here-terms.qml:81
784#: qml/Wizard/Pages/here-terms.qml:81
777msgid ""
785msgid ""
@@ -779,21 +787,27 @@ msgid ""
779"collects information about nearby cell towers and Wi-Fi hotspots around your "
787"collects information about nearby cell towers and Wi-Fi hotspots around your "
780"current location whenever your position is being found."
788"current location whenever your position is being found."
781msgstr ""
789msgstr ""
790+"Om u plaatsbepalingsdiensten te leveren en deze te verbeteren, zal HERE "
791+"informatie verzamelen over GSM-masten in de buurt en wifi-hotspots rond uw "
792+"huidige locatie wanneer uw huidige positie gevonden is."
782
793
783#: qml/Wizard/Pages/here-terms.qml:93
794#: qml/Wizard/Pages/here-terms.qml:93
784msgid ""
795msgid ""
785"The information collected is used to analyze the service and to improve the "
796"The information collected is used to analyze the service and to improve the "
786"use of service, but not to identify you personally."
797"use of service, but not to identify you personally."
787msgstr ""
798msgstr ""
799+"De informatie die wordt verzameld zal gebruikt worden om de dienst te "
800+"analyseren en om het gebruik van de dienst te verbeteren, maar niet om u "
801+"persoonlijk te identificeren."
788
802
789#: qml/Wizard/Pages/here-terms.qml:106
803#: qml/Wizard/Pages/here-terms.qml:106
790#, qt-format
804#, qt-format
791msgid "By continuing, you agree to the HERE platform %1 and %2."
805msgid "By continuing, you agree to the HERE platform %1 and %2."
792−msgstr ""
806+msgstr "Als u doorgaat, gaat u akkoord met het HERE platform %1 en %2"
793
807
794#: qml/Wizard/Pages/here-terms.qml:107
808#: qml/Wizard/Pages/here-terms.qml:107
795msgid "Service Terms"
809msgid "Service Terms"
796−msgstr ""
810+msgstr "Dienstvoorwaarden"
797
811
798#: qml/Wizard/Pages/passcode-confirm.qml:43
812#: qml/Wizard/Pages/passcode-confirm.qml:43
799#: qml/Wizard/Pages/passcode-desktop.qml:97
813#: qml/Wizard/Pages/passcode-desktop.qml:97
@@ -802,25 +816,25 @@ msgstr "Toegangscode bevestigen"
802
816
803#: qml/Wizard/Pages/passcode-confirm.qml:45
817#: qml/Wizard/Pages/passcode-confirm.qml:45
804msgid "Incorrect passcode."
818msgid "Incorrect passcode."
805−msgstr ""
819+msgstr "Onjuiste PIN-code"
806
820
807#: qml/Wizard/Pages/passcode-confirm.qml:45
821#: qml/Wizard/Pages/passcode-confirm.qml:45
808msgctxt "Enter the passcode again"
822msgctxt "Enter the passcode again"
809msgid "Please re-enter."
823msgid "Please re-enter."
810−msgstr ""
824+msgstr "Voer uw PIN opnieuw in."
811
825
812#: qml/Wizard/Pages/passcode-desktop.qml:31
826#: qml/Wizard/Pages/passcode-desktop.qml:31
813msgid "Lock Screen Passcode"
827msgid "Lock Screen Passcode"
814−msgstr ""
828+msgstr "PIN-code schermvergrendeling"
815
829
816#: qml/Wizard/Pages/passcode-desktop.qml:61
830#: qml/Wizard/Pages/passcode-desktop.qml:61
817msgid "Enter 4 numbers to setup your passcode"
831msgid "Enter 4 numbers to setup your passcode"
818−msgstr ""
832+msgstr "Voer 4 cijfers is om uw PIN-code in te stellen"
819
833
820#: qml/Wizard/Pages/passcode-desktop.qml:77
834#: qml/Wizard/Pages/passcode-desktop.qml:77
821#: qml/Wizard/Pages/passcode-set.qml:54
835#: qml/Wizard/Pages/passcode-set.qml:54
822msgid "Choose passcode"
836msgid "Choose passcode"
823−msgstr ""
837+msgstr "Kies uw PIN-code"
824
838
825#: qml/Wizard/Pages/passcode-desktop.qml:127
839#: qml/Wizard/Pages/passcode-desktop.qml:127
826msgid "Passcode too short"
840msgid "Passcode too short"
po/oc.po+115−110
@@ -8,15 +8,15 @@ msgstr ""
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-09-22 07:46+0000\n"
10"POT-Creation-Date: 2016-09-22 07:46+0000\n"
11−"PO-Revision-Date: 2015-02-05 20:35+0000\n"
11+"PO-Revision-Date: 2016-10-07 15:21+0000\n"
12−"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12+"Last-Translator: Cédric VALMARY (Tot en òc) <cvalmary@yahoo.fr>\n"
13"Language-Team: Occitan (post 1500) <oc@li.org>\n"
13"Language-Team: Occitan (post 1500) <oc@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-09-27 07:04+0000\n"
18+"X-Launchpad-Export-Date: 2016-10-08 06:48+0000\n"
19−"X-Generator: Launchpad (build 18204)\n"
19+"X-Generator: Launchpad (build 18227)\n"
20
20
21#: plugins/LightDM/Greeter.cpp:123
21#: plugins/LightDM/Greeter.cpp:123
22msgid "Password: "
22msgid "Password: "
@@ -42,7 +42,7 @@ msgstr "Tampar la session"
42
42
43#: qml/Components/Dialogs.qml:150
43#: qml/Components/Dialogs.qml:150
44msgid "Are you sure you want to log out?"
44msgid "Are you sure you want to log out?"
45−msgstr "Sètz segur que volètz vous déconnecter ?"
45+msgstr "Sètz segur que vos volètz desconnectar ?"
46
46
47#: qml/Components/Dialogs.qml:152
47#: qml/Components/Dialogs.qml:152
48msgctxt "Button: Lock the system"
48msgctxt "Button: Lock the system"
@@ -103,163 +103,163 @@ msgstr "Reaviar"
103
103
104#: qml/Components/KeyboardShortcutsOverlay.qml:41
104#: qml/Components/KeyboardShortcutsOverlay.qml:41
105msgid "Keyboard Shortcuts"
105msgid "Keyboard Shortcuts"
106−msgstr ""
106+msgstr "Acorchis de clavièr"
107
107
108#: qml/Components/KeyboardShortcutsOverlay.qml:55
108#: qml/Components/KeyboardShortcutsOverlay.qml:55
109msgid "Unity 8"
109msgid "Unity 8"
110−msgstr ""
110+msgstr "Unity 8"
111
111
112#: qml/Components/KeyboardShortcutsOverlay.qml:62
112#: qml/Components/KeyboardShortcutsOverlay.qml:62
113msgid "PrtScr"
113msgid "PrtScr"
114−msgstr ""
114+msgstr "Imprecr"
115
115
116#: qml/Components/KeyboardShortcutsOverlay.qml:67
116#: qml/Components/KeyboardShortcutsOverlay.qml:67
117msgid "Takes a screenshot."
117msgid "Takes a screenshot."
118−msgstr ""
118+msgstr "Pren una captura d'ecran."
119
119
120#: qml/Components/KeyboardShortcutsOverlay.qml:75
120#: qml/Components/KeyboardShortcutsOverlay.qml:75
121msgid "Alt + PrtScr"
121msgid "Alt + PrtScr"
122−msgstr ""
122+msgstr "Alt + Imprecr"
123
123
124#: qml/Components/KeyboardShortcutsOverlay.qml:80
124#: qml/Components/KeyboardShortcutsOverlay.qml:80
125msgid "Takes a screenshot of a window."
125msgid "Takes a screenshot of a window."
126−msgstr ""
126+msgstr "Prend una captura d'ecran d'una fenèstra."
127
127
128#: qml/Components/KeyboardShortcutsOverlay.qml:88
128#: qml/Components/KeyboardShortcutsOverlay.qml:88
129msgid "Super + Space"
129msgid "Super + Space"
130−msgstr ""
130+msgstr "Super + Espaci"
131
131
132#: qml/Components/KeyboardShortcutsOverlay.qml:93
132#: qml/Components/KeyboardShortcutsOverlay.qml:93
133msgid "Switches to next keyboard layout."
133msgid "Switches to next keyboard layout."
134−msgstr ""
134+msgstr "Passa a l'agençament de clavièr seguent."
135
135
136#: qml/Components/KeyboardShortcutsOverlay.qml:101
136#: qml/Components/KeyboardShortcutsOverlay.qml:101
137msgid "Super + Shift + Space"
137msgid "Super + Shift + Space"
138−msgstr ""
138+msgstr "Super + Maj + Espaci"
139
139
140#: qml/Components/KeyboardShortcutsOverlay.qml:106
140#: qml/Components/KeyboardShortcutsOverlay.qml:106
141msgid "Switches to previous keyboard layout."
141msgid "Switches to previous keyboard layout."
142−msgstr ""
142+msgstr "Passa a l'agençament de clavièr precedent."
143
143
144#: qml/Components/KeyboardShortcutsOverlay.qml:118
144#: qml/Components/KeyboardShortcutsOverlay.qml:118
145msgid "Launcher"
145msgid "Launcher"
146−msgstr ""
146+msgstr "Aviador"
147
147
148#: qml/Components/KeyboardShortcutsOverlay.qml:125
148#: qml/Components/KeyboardShortcutsOverlay.qml:125
149msgid "Super (Hold)"
149msgid "Super (Hold)"
150−msgstr ""
150+msgstr "Super (mantengut)"
151
151
152#: qml/Components/KeyboardShortcutsOverlay.qml:130
152#: qml/Components/KeyboardShortcutsOverlay.qml:130
153msgid "Opens the launcher, displays shortcuts."
153msgid "Opens the launcher, displays shortcuts."
154−msgstr ""
154+msgstr "Dobís l'aviador, aficha los acorchis."
155
155
156#: qml/Components/KeyboardShortcutsOverlay.qml:138
156#: qml/Components/KeyboardShortcutsOverlay.qml:138
157msgid "Alt + F1"
157msgid "Alt + F1"
158−msgstr ""
158+msgstr "Alt + F1"
159
159
160#: qml/Components/KeyboardShortcutsOverlay.qml:143
160#: qml/Components/KeyboardShortcutsOverlay.qml:143
161msgid "Opens launcher keyboard navigation mode."
161msgid "Opens launcher keyboard navigation mode."
162−msgstr ""
162+msgstr "Dobrís lo mòde navigacion amb lo clavièr de l'aviador."
163
163
164#: qml/Components/KeyboardShortcutsOverlay.qml:151
164#: qml/Components/KeyboardShortcutsOverlay.qml:151
165msgid "Super + Tab"
165msgid "Super + Tab"
166−msgstr ""
166+msgstr "Super + Tab"
167
167
168#: qml/Components/KeyboardShortcutsOverlay.qml:156
168#: qml/Components/KeyboardShortcutsOverlay.qml:156
169msgid "Switches applications via the launcher."
169msgid "Switches applications via the launcher."
170−msgstr ""
170+msgstr "Bascula las aplicacions via l'aviador."
171
171
172#: qml/Components/KeyboardShortcutsOverlay.qml:164
172#: qml/Components/KeyboardShortcutsOverlay.qml:164
173msgid "Super + 0 to 9"
173msgid "Super + 0 to 9"
174−msgstr ""
174+msgstr "Super + 0 a 9"
175
175
176#: qml/Components/KeyboardShortcutsOverlay.qml:169
176#: qml/Components/KeyboardShortcutsOverlay.qml:169
177msgid "Same as clicking on a launcher icon."
177msgid "Same as clicking on a launcher icon."
178−msgstr ""
178+msgstr "Meteis efièit qu'un clic sus una icòna de l'aviador."
179
179
180#: qml/Components/KeyboardShortcutsOverlay.qml:181
180#: qml/Components/KeyboardShortcutsOverlay.qml:181
181msgid "Scopes"
181msgid "Scopes"
182−msgstr ""
182+msgstr "Motors de recèrca"
183
183
184#: qml/Components/KeyboardShortcutsOverlay.qml:188
184#: qml/Components/KeyboardShortcutsOverlay.qml:188
185msgid "Super (Tap)"
185msgid "Super (Tap)"
186−msgstr ""
186+msgstr "Super (quichada corta)"
187
187
188#: qml/Components/KeyboardShortcutsOverlay.qml:193
188#: qml/Components/KeyboardShortcutsOverlay.qml:193
189msgid "Opens the Scopes home."
189msgid "Opens the Scopes home."
190−msgstr ""
190+msgstr "Dobrís la pagina d'acuèlh dels motors de recèrca."
191
191
192#: qml/Components/KeyboardShortcutsOverlay.qml:209
192#: qml/Components/KeyboardShortcutsOverlay.qml:209
193msgid "Switching"
193msgid "Switching"
194−msgstr ""
194+msgstr "Cambiament de burèu"
195
195
196#: qml/Components/KeyboardShortcutsOverlay.qml:216
196#: qml/Components/KeyboardShortcutsOverlay.qml:216
197msgid "Alt + Tab"
197msgid "Alt + Tab"
198−msgstr ""
198+msgstr "Alt + Tab"
199
199
200#: qml/Components/KeyboardShortcutsOverlay.qml:221
200#: qml/Components/KeyboardShortcutsOverlay.qml:221
201msgid "Switches between applications."
201msgid "Switches between applications."
202−msgstr ""
202+msgstr "Bascula entre aplicacions."
203
203
204#: qml/Components/KeyboardShortcutsOverlay.qml:229
204#: qml/Components/KeyboardShortcutsOverlay.qml:229
205msgid "Super + W"
205msgid "Super + W"
206−msgstr ""
206+msgstr "Super + W"
207
207
208#: qml/Components/KeyboardShortcutsOverlay.qml:234
208#: qml/Components/KeyboardShortcutsOverlay.qml:234
209msgid "Opens the desktop spread."
209msgid "Opens the desktop spread."
210−msgstr ""
210+msgstr "Dobrís lo mòde expausat."
211
211
212#: qml/Components/KeyboardShortcutsOverlay.qml:242
212#: qml/Components/KeyboardShortcutsOverlay.qml:242
213msgid "Cursor Left or Right"
213msgid "Cursor Left or Right"
214−msgstr ""
214+msgstr "Sagetas esquèrra o dreita"
215
215
216#: qml/Components/KeyboardShortcutsOverlay.qml:247
216#: qml/Components/KeyboardShortcutsOverlay.qml:247
217msgid "Moves the focus."
217msgid "Moves the focus."
218−msgstr ""
218+msgstr "Desplaça lo focus."
219
219
220#: qml/Components/KeyboardShortcutsOverlay.qml:259
220#: qml/Components/KeyboardShortcutsOverlay.qml:259
221msgid "Windows"
221msgid "Windows"
222−msgstr ""
222+msgstr "Fenèstras"
223
223
224#: qml/Components/KeyboardShortcutsOverlay.qml:266
224#: qml/Components/KeyboardShortcutsOverlay.qml:266
225msgid "Ctrl + Super + D"
225msgid "Ctrl + Super + D"
226−msgstr ""
226+msgstr "Ctrl + Super + D"
227
227
228#: qml/Components/KeyboardShortcutsOverlay.qml:271
228#: qml/Components/KeyboardShortcutsOverlay.qml:271
229msgid "Minimizes all windows."
229msgid "Minimizes all windows."
230−msgstr ""
230+msgstr "Minimiza totas las fenèstras."
231
231
232#: qml/Components/KeyboardShortcutsOverlay.qml:279
232#: qml/Components/KeyboardShortcutsOverlay.qml:279
233msgid "Ctrl + Super + Up"
233msgid "Ctrl + Super + Up"
234−msgstr ""
234+msgstr "Ctrl + Super + Naut"
235
235
236#: qml/Components/KeyboardShortcutsOverlay.qml:284
236#: qml/Components/KeyboardShortcutsOverlay.qml:284
237msgid "Maximizes the current window."
237msgid "Maximizes the current window."
238−msgstr ""
238+msgstr "Maximiza la fenèstra actuala."
239
239
240#: qml/Components/KeyboardShortcutsOverlay.qml:292
240#: qml/Components/KeyboardShortcutsOverlay.qml:292
241msgid "Ctrl + Super + Down"
241msgid "Ctrl + Super + Down"
242−msgstr ""
242+msgstr "Ctrl + Super + Down"
243
243
244#: qml/Components/KeyboardShortcutsOverlay.qml:297
244#: qml/Components/KeyboardShortcutsOverlay.qml:297
245msgid "Minimizes or restores the current window."
245msgid "Minimizes or restores the current window."
246−msgstr ""
246+msgstr "Minimiza o restablís la fenèstra actuala."
247
247
248#: qml/Components/KeyboardShortcutsOverlay.qml:305
248#: qml/Components/KeyboardShortcutsOverlay.qml:305
249msgid "Ctrl + Super + Left or Right"
249msgid "Ctrl + Super + Left or Right"
250−msgstr ""
250+msgstr "Ctrl + Super + Esquèrra o dreita"
251
251
252#: qml/Components/KeyboardShortcutsOverlay.qml:310
252#: qml/Components/KeyboardShortcutsOverlay.qml:310
253msgid "Semi-maximizes the current window."
253msgid "Semi-maximizes the current window."
254−msgstr ""
254+msgstr "Maximiza la fenèstra actuala sus un semi-ecran."
255
255
256#: qml/Components/KeyboardShortcutsOverlay.qml:318
256#: qml/Components/KeyboardShortcutsOverlay.qml:318
257msgid "Alt + F4"
257msgid "Alt + F4"
258−msgstr ""
258+msgstr "Alt + F4"
259
259
260#: qml/Components/KeyboardShortcutsOverlay.qml:323
260#: qml/Components/KeyboardShortcutsOverlay.qml:323
261msgid "Closes the current window."
261msgid "Closes the current window."
262−msgstr ""
262+msgstr "Tampa la fenèstra actuala."
263
263
264#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
264#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
265msgid "Return to Call"
265msgid "Return to Call"
@@ -276,12 +276,12 @@ msgstr "D'acòrdi"
276#: qml/Components/MediaServices/VideoPlayerControls.qml:44
276#: qml/Components/MediaServices/VideoPlayerControls.qml:44
277#, qt-format
277#, qt-format
278msgid "%1:%2:%3"
278msgid "%1:%2:%3"
279−msgstr ""
279+msgstr "%1 : %2 : %3"
280
280
281#: qml/Components/MediaServices/VideoPlayerControls.qml:49
281#: qml/Components/MediaServices/VideoPlayerControls.qml:49
282#, qt-format
282#, qt-format
283msgid "%1:%2"
283msgid "%1:%2"
284−msgstr ""
284+msgstr "%1 : %2"
285
285
286#: qml/Components/ModeSwitchWarningDialog.qml:32
286#: qml/Components/ModeSwitchWarningDialog.qml:32
287msgid "Apps may have unsaved data:"
287msgid "Apps may have unsaved data:"
@@ -298,11 +298,11 @@ msgstr ""
298#: qml/Components/ModeSwitchWarningDialog.qml:63
298#: qml/Components/ModeSwitchWarningDialog.qml:63
299msgid "Or force close now (unsaved data will be lost)."
299msgid "Or force close now (unsaved data will be lost)."
300msgstr ""
300msgstr ""
301−"Ou forçar la tampadura ara (les donadas pas enregistradas seràn perdues)."
301+"O forçar la tampadura ara (las donadas pas enregistradas seràn perdudas)."
302
302
303#: qml/Components/ModeSwitchWarningDialog.qml:75
303#: qml/Components/ModeSwitchWarningDialog.qml:75
304msgid "OK, I will reconnect"
304msgid "OK, I will reconnect"
305−msgstr "OK, me vau reconnectar"
305+msgstr "D'acòrdi, me vau reconnectar"
306
306
307#: qml/Components/ModeSwitchWarningDialog.qml:76
307#: qml/Components/ModeSwitchWarningDialog.qml:76
308msgid "Reconnect now!"
308msgid "Reconnect now!"
@@ -349,11 +349,11 @@ msgstr "Reïnicializar"
349
349
350#: qml/Dash/GenericScopeView.qml:586 qml/Dash/GenericScopeView.qml:782
350#: qml/Dash/GenericScopeView.qml:586 qml/Dash/GenericScopeView.qml:782
351msgid "Show less"
351msgid "Show less"
352−msgstr ""
352+msgstr "Afichar mai"
353
353
354#: qml/Dash/GenericScopeView.qml:586
354#: qml/Dash/GenericScopeView.qml:586
355msgid "Show all"
355msgid "Show all"
356−msgstr ""
356+msgstr "Afichar tot"
357
357
358#: qml/Dash/GenericScopeView.qml:643
358#: qml/Dash/GenericScopeView.qml:643
359msgctxt "Label: Hint for dash search line edit"
359msgctxt "Label: Hint for dash search line edit"
@@ -374,7 +374,7 @@ msgstr "Mai..."
374
374
375#: qml/Dash/Previews/PreviewActionCombo.qml:35
375#: qml/Dash/Previews/PreviewActionCombo.qml:35
376msgid "Less..."
376msgid "Less..."
377−msgstr "Moins..."
377+msgstr "Mens..."
378
378
379#: qml/Dash/Previews/PreviewCommentInput.qml:83
379#: qml/Dash/Previews/PreviewCommentInput.qml:83
380#: qml/Dash/Previews/PreviewRatingInput.qml:201
380#: qml/Dash/Previews/PreviewRatingInput.qml:201
@@ -391,7 +391,7 @@ msgstr "Apondre un avís"
391
391
392#: qml/Dash/PullToRefreshScopeStyle.qml:56
392#: qml/Dash/PullToRefreshScopeStyle.qml:56
393msgid "Pull to refresh…"
393msgid "Pull to refresh…"
394−msgstr "Tirer per actualizar..."
394+msgstr "Tirar per actualizar..."
395
395
396#: qml/Dash/PullToRefreshScopeStyle.qml:61
396#: qml/Dash/PullToRefreshScopeStyle.qml:61
397msgid "Release to refresh…"
397msgid "Release to refresh…"
@@ -450,15 +450,15 @@ msgstr[1] "Pacientatz %1 minutas e reensajatz..."
450
450
451#: qml/Greeter/Greeter.qml:596
451#: qml/Greeter/Greeter.qml:596
452msgid "Try again"
452msgid "Try again"
453−msgstr ""
453+msgstr "Tornar ensajar"
454
454
455#: qml/Greeter/LoginList.qml:70
455#: qml/Greeter/LoginList.qml:70
456msgid "Passphrase"
456msgid "Passphrase"
457−msgstr ""
457+msgstr "Frasa secreta"
458
458
459#: qml/Greeter/LoginList.qml:71
459#: qml/Greeter/LoginList.qml:71
460msgid "Passcode"
460msgid "Passcode"
461−msgstr ""
461+msgstr "Còdi"
462
462
463#: qml/Greeter/LoginList.qml:98
463#: qml/Greeter/LoginList.qml:98
464msgid "Retry"
464msgid "Retry"
@@ -466,15 +466,15 @@ msgstr "Ensajar tornamai"
466
466
467#: qml/Greeter/LoginList.qml:99
467#: qml/Greeter/LoginList.qml:99
468msgid "Log In"
468msgid "Log In"
469−msgstr ""
469+msgstr "Se connectar"
470
470
471#: qml/Greeter/NarrowView.qml:252
471#: qml/Greeter/NarrowView.qml:252
472msgid "Emergency"
472msgid "Emergency"
473−msgstr ""
473+msgstr "Urgéncia"
474
474
475#: qml/Greeter/SessionsList.qml:122
475#: qml/Greeter/SessionsList.qml:122
476msgid "Select desktop environment"
476msgid "Select desktop environment"
477−msgstr ""
477+msgstr "Seleccionar l'environament de burèu"
478
478
479#: qml/Notifications/NotificationMenuItemFactory.qml:124
479#: qml/Notifications/NotificationMenuItemFactory.qml:124
480msgid "Show password"
480msgid "Show password"
@@ -515,7 +515,7 @@ msgstr[1] "%1 segondas"
515
515
516#: qml/Panel/Indicators/MenuItemFactory.qml:903
516#: qml/Panel/Indicators/MenuItemFactory.qml:903
517msgid "0 seconds"
517msgid "0 seconds"
518−msgstr "0 segonda"
518+msgstr "0 segonda"
519
519
520#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
520#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
521#: qml/Panel/Indicators/MenuItemFactory.qml:905
521#: qml/Panel/Indicators/MenuItemFactory.qml:905
@@ -525,7 +525,7 @@ msgstr "Demòra %1"
525
525
526#: qml/Panel/Indicators/MenuItemFactory.qml:911
526#: qml/Panel/Indicators/MenuItemFactory.qml:911
527msgid "In queue…"
527msgid "In queue…"
528−msgstr "Dins la fia d'espèra..."
528+msgstr "Dins la fila d'espèra..."
529
529
530#: qml/Panel/Indicators/MenuItemFactory.qml:915
530#: qml/Panel/Indicators/MenuItemFactory.qml:915
531msgid "Downloading"
531msgid "Downloading"
@@ -571,10 +571,12 @@ msgstr ""
571#: qml/Tutorial/TutorialLeftLong.qml:49
571#: qml/Tutorial/TutorialLeftLong.qml:49
572msgid "Long swipe from the left edge to open the Today scope"
572msgid "Long swipe from the left edge to open the Today scope"
573msgstr ""
573msgstr ""
574+"Fasètz lisar a partir del bòrd esquèrre fins al bòrd dreit per dobrir lo "
575+"motor de recèrca Uèi"
574
576
575#: qml/Tutorial/TutorialLeft.qml:47
577#: qml/Tutorial/TutorialLeft.qml:47
576msgid "Short swipe from the left edge to open the launcher"
578msgid "Short swipe from the left edge to open the launcher"
577−msgstr ""
579+msgstr "Fasètz lisar a partir del bòrd esquèrre per dobrir l'aviador"
578
580
579#: qml/Tutorial/TutorialRight.qml:55
581#: qml/Tutorial/TutorialRight.qml:55
580msgid "Push your mouse against the right edge to view your open apps"
582msgid "Push your mouse against the right edge to view your open apps"
@@ -583,10 +585,13 @@ msgstr ""
583#: qml/Tutorial/TutorialRight.qml:56
585#: qml/Tutorial/TutorialRight.qml:56
584msgid "Swipe from the right edge to view your open apps"
586msgid "Swipe from the right edge to view your open apps"
585msgstr ""
587msgstr ""
588+"Fasètz lisar a partir del bòrd dreit per veire las aplicacions dobèrtas"
586
589
587#: qml/Tutorial/TutorialTop.qml:53
590#: qml/Tutorial/TutorialTop.qml:53
588msgid "Swipe from the top edge to access notifications and quick settings"
591msgid "Swipe from the top edge to access notifications and quick settings"
589msgstr ""
592msgstr ""
593+"Fasètz lisar a partir del bòrd superior per accedir a las notificacions e "
594+"als reglatges rapids"
590
595
591#: qml/Wizard/Page.qml:54
596#: qml/Wizard/Page.qml:54
592msgctxt "Button: Go back one page in the Wizard"
597msgctxt "Button: Go back one page in the Wizard"
@@ -595,7 +600,7 @@ msgstr "Precedent"
595
600
596#: qml/Wizard/Pages/10-welcome.qml:28
601#: qml/Wizard/Pages/10-welcome.qml:28
597msgid "Language"
602msgid "Language"
598−msgstr ""
603+msgstr "Lenga"
599
604
600#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
605#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
601#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
606#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
@@ -609,15 +614,15 @@ msgstr "Seguent"
609
614
610#: qml/Wizard/Pages/20-keyboard.qml:31
615#: qml/Wizard/Pages/20-keyboard.qml:31
611msgid "Select Keyboard"
616msgid "Select Keyboard"
612−msgstr ""
617+msgstr "Seleccionar lo clavièr"
613
618
614#: qml/Wizard/Pages/20-keyboard.qml:71
619#: qml/Wizard/Pages/20-keyboard.qml:71
615msgid "Keyboard language"
620msgid "Keyboard language"
616−msgstr ""
621+msgstr "Lenga del clavièr"
617
622
618#: qml/Wizard/Pages/20-keyboard.qml:93
623#: qml/Wizard/Pages/20-keyboard.qml:93
619msgid "Keyboard layout"
624msgid "Keyboard layout"
620−msgstr ""
625+msgstr "Disposicion del clavièr"
621
626
622#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
627#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
623#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
628#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
@@ -663,11 +668,11 @@ msgstr "condicions generalas d'utilizacion"
663
668
664#: qml/Wizard/Pages/40-location.qml:160
669#: qml/Wizard/Pages/40-location.qml:160
665msgid "GPS only"
670msgid "GPS only"
666−msgstr ""
671+msgstr "GPS unicament"
667
672
668#: qml/Wizard/Pages/40-location.qml:214
673#: qml/Wizard/Pages/40-location.qml:214
669msgid "Don't use my location"
674msgid "Don't use my location"
670−msgstr "Ne pas utilizar ma position"
675+msgstr "Utilizar pas ma posicion"
671
676
672#: qml/Wizard/Pages/40-location.qml:260
677#: qml/Wizard/Pages/40-location.qml:260
673msgid "You can change it later in System Settings."
678msgid "You can change it later in System Settings."
@@ -679,42 +684,42 @@ msgstr "Fus orari"
679
684
680#: qml/Wizard/Pages/50-timezone.qml:182
685#: qml/Wizard/Pages/50-timezone.qml:182
681msgid "Enter your city"
686msgid "Enter your city"
682−msgstr ""
687+msgstr "Sasir vòstra vila"
683
688
684#: qml/Wizard/Pages/60-account.qml:24
689#: qml/Wizard/Pages/60-account.qml:24
685msgid "Personalize Your Device"
690msgid "Personalize Your Device"
686−msgstr ""
691+msgstr "Personalizar vòstre aparelh"
687
692
688#: qml/Wizard/Pages/60-account.qml:48
693#: qml/Wizard/Pages/60-account.qml:48
689msgid "Preferred Name"
694msgid "Preferred Name"
690−msgstr ""
695+msgstr "Nom preferit"
691
696
692#: qml/Wizard/Pages/70-passwd-type.qml:40
697#: qml/Wizard/Pages/70-passwd-type.qml:40
693msgid "Lock Screen"
698msgid "Lock Screen"
694−msgstr ""
699+msgstr "Verrolhar l'ecran"
695
700
696#: qml/Wizard/Pages/70-passwd-type.qml:102
701#: qml/Wizard/Pages/70-passwd-type.qml:102
697msgctxt "Label: Type of security method"
702msgctxt "Label: Type of security method"
698msgid "Create new password"
703msgid "Create new password"
699−msgstr ""
704+msgstr "Crear un novèl senhal"
700
705
701#: qml/Wizard/Pages/70-passwd-type.qml:104
706#: qml/Wizard/Pages/70-passwd-type.qml:104
702msgctxt "Label: Type of security method"
707msgctxt "Label: Type of security method"
703msgid "Create passcode (numbers only)"
708msgid "Create passcode (numbers only)"
704−msgstr ""
709+msgstr "Crear un còdi (chifras unicament)"
705
710
706#: qml/Wizard/Pages/70-passwd-type.qml:106
711#: qml/Wizard/Pages/70-passwd-type.qml:106
707msgctxt "Label: Type of security method"
712msgctxt "Label: Type of security method"
708msgid "No lock code"
713msgid "No lock code"
709−msgstr ""
714+msgstr "Pas cap de còdi de verrolhatge"
710
715
711#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
716#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
712msgid "Privacy Policy"
717msgid "Privacy Policy"
713−msgstr "Politica de confidentialité"
718+msgstr "Politica de confidencialitat"
714
719
715#: qml/Wizard/Pages/75-report-check.qml:26
720#: qml/Wizard/Pages/75-report-check.qml:26
716msgid "Help Us Improve"
721msgid "Help Us Improve"
717−msgstr ""
722+msgstr "Ajudatz-nos a nos melhorar"
718
723
719#: qml/Wizard/Pages/75-report-check.qml:59
724#: qml/Wizard/Pages/75-report-check.qml:59
720msgid "Improve system performance by sending us crashes and error reports."
725msgid "Improve system performance by sending us crashes and error reports."
@@ -722,11 +727,11 @@ msgstr ""
722
727
723#: qml/Wizard/Pages/75-report-check.qml:60
728#: qml/Wizard/Pages/75-report-check.qml:60
724msgid "Privacy policy"
729msgid "Privacy policy"
725−msgstr ""
730+msgstr "Politica de confidencialitat"
726
731
727#: qml/Wizard/Pages/77-system-update.qml:28
732#: qml/Wizard/Pages/77-system-update.qml:28
728msgid "Update Device"
733msgid "Update Device"
729−msgstr ""
734+msgstr "Metre a jorn l'aparelh"
730
735
731#: qml/Wizard/Pages/77-system-update.qml:55
736#: qml/Wizard/Pages/77-system-update.qml:55
732msgid ""
737msgid ""
@@ -737,25 +742,25 @@ msgstr ""
737#: qml/Wizard/Pages/77-system-update.qml:76
742#: qml/Wizard/Pages/77-system-update.qml:76
738msgctxt "string identifying name of the update"
743msgctxt "string identifying name of the update"
739msgid "Ubuntu system"
744msgid "Ubuntu system"
740−msgstr ""
745+msgstr "Sistèma Ubuntu"
741
746
742#: qml/Wizard/Pages/77-system-update.qml:83
747#: qml/Wizard/Pages/77-system-update.qml:83
743#, qt-format
748#, qt-format
744msgctxt "version of the system update"
749msgctxt "version of the system update"
745msgid "Version %1"
750msgid "Version %1"
746−msgstr ""
751+msgstr "Version %1"
747
752
748#: qml/Wizard/Pages/77-system-update.qml:102
753#: qml/Wizard/Pages/77-system-update.qml:102
749msgid "This could take a few minutes..."
754msgid "This could take a few minutes..."
750−msgstr ""
755+msgstr "Aquò poirà prene qualques minutas…"
751
756
752#: qml/Wizard/Pages/77-system-update.qml:116
757#: qml/Wizard/Pages/77-system-update.qml:116
753msgid "Install and restart now"
758msgid "Install and restart now"
754−msgstr ""
759+msgstr "Installar e reaviar ara"
755
760
756#: qml/Wizard/Pages/80-finished.qml:89
761#: qml/Wizard/Pages/80-finished.qml:89
757msgid "Welcome to Ubuntu"
762msgid "Welcome to Ubuntu"
758−msgstr ""
763+msgstr "Benvenguda sus Ubuntu"
759
764
760#: qml/Wizard/Pages/80-finished.qml:104
765#: qml/Wizard/Pages/80-finished.qml:104
761msgid "You are ready to use your device now"
766msgid "You are ready to use your device now"
@@ -763,7 +768,7 @@ msgstr ""
763
768
764#: qml/Wizard/Pages/80-finished.qml:124
769#: qml/Wizard/Pages/80-finished.qml:124
765msgid "Get Started"
770msgid "Get Started"
766−msgstr ""
771+msgstr "Començar"
767
772
768#: qml/Wizard/Pages/here-terms.qml:25
773#: qml/Wizard/Pages/here-terms.qml:25
769msgid "Terms & Conditions"
774msgid "Terms & Conditions"
@@ -793,78 +798,78 @@ msgstr ""
793
798
794#: qml/Wizard/Pages/here-terms.qml:107
799#: qml/Wizard/Pages/here-terms.qml:107
795msgid "Service Terms"
800msgid "Service Terms"
796−msgstr ""
801+msgstr "Condicions de servici"
797
802
798#: qml/Wizard/Pages/passcode-confirm.qml:43
803#: qml/Wizard/Pages/passcode-confirm.qml:43
799#: qml/Wizard/Pages/passcode-desktop.qml:97
804#: qml/Wizard/Pages/passcode-desktop.qml:97
800msgid "Confirm passcode"
805msgid "Confirm passcode"
801−msgstr "Confirmatz vòstre còde"
806+msgstr "Confirmatz vòstre còdi"
802
807
803#: qml/Wizard/Pages/passcode-confirm.qml:45
808#: qml/Wizard/Pages/passcode-confirm.qml:45
804msgid "Incorrect passcode."
809msgid "Incorrect passcode."
805−msgstr ""
810+msgstr "Còdi incorrècte."
806
811
807#: qml/Wizard/Pages/passcode-confirm.qml:45
812#: qml/Wizard/Pages/passcode-confirm.qml:45
808msgctxt "Enter the passcode again"
813msgctxt "Enter the passcode again"
809msgid "Please re-enter."
814msgid "Please re-enter."
810−msgstr ""
815+msgstr "Sasissètz un còp de mai"
811
816
812#: qml/Wizard/Pages/passcode-desktop.qml:31
817#: qml/Wizard/Pages/passcode-desktop.qml:31
813msgid "Lock Screen Passcode"
818msgid "Lock Screen Passcode"
814−msgstr ""
819+msgstr "Còdi de verrolhatge d'ecran"
815
820
816#: qml/Wizard/Pages/passcode-desktop.qml:61
821#: qml/Wizard/Pages/passcode-desktop.qml:61
817msgid "Enter 4 numbers to setup your passcode"
822msgid "Enter 4 numbers to setup your passcode"
818−msgstr ""
823+msgstr "Sasissètz 4 chifras per definir vòstre còdi"
819
824
820#: qml/Wizard/Pages/passcode-desktop.qml:77
825#: qml/Wizard/Pages/passcode-desktop.qml:77
821#: qml/Wizard/Pages/passcode-set.qml:54
826#: qml/Wizard/Pages/passcode-set.qml:54
822msgid "Choose passcode"
827msgid "Choose passcode"
823−msgstr ""
828+msgstr "Causissètz un còdi"
824
829
825#: qml/Wizard/Pages/passcode-desktop.qml:127
830#: qml/Wizard/Pages/passcode-desktop.qml:127
826msgid "Passcode too short"
831msgid "Passcode too short"
827−msgstr ""
832+msgstr "Còdi tròp cort"
828
833
829#: qml/Wizard/Pages/passcode-desktop.qml:129
834#: qml/Wizard/Pages/passcode-desktop.qml:129
830msgid "Passcodes match"
835msgid "Passcodes match"
831−msgstr ""
836+msgstr "Los còdis correspondon"
832
837
833#: qml/Wizard/Pages/passcode-desktop.qml:131
838#: qml/Wizard/Pages/passcode-desktop.qml:131
834msgid "Passcodes do not match"
839msgid "Passcodes do not match"
835−msgstr ""
840+msgstr "Los còdis correspondon pas"
836
841
837#: qml/Wizard/Pages/passcode-set.qml:62
842#: qml/Wizard/Pages/passcode-set.qml:62
838msgid "Passcode must be 4 characters long"
843msgid "Passcode must be 4 characters long"
839−msgstr ""
844+msgstr "Lo còde deu conténer al mens 4 caractèrs"
840
845
841#: qml/Wizard/Pages/password-set.qml:31
846#: qml/Wizard/Pages/password-set.qml:31
842msgid "Lock Screen Password"
847msgid "Lock Screen Password"
843−msgstr ""
848+msgstr "Senhal de verrolhatge de l'ecran"
844
849
845#: qml/Wizard/Pages/password-set.qml:62
850#: qml/Wizard/Pages/password-set.qml:62
846msgid "Enter at least 8 characters"
851msgid "Enter at least 8 characters"
847−msgstr ""
852+msgstr "Sasissètz al mens 8 caractèrs"
848
853
849#: qml/Wizard/Pages/password-set.qml:74
854#: qml/Wizard/Pages/password-set.qml:74
850msgid "Choose password"
855msgid "Choose password"
851−msgstr ""
856+msgstr "Causissètz un senhal"
852
857
853#: qml/Wizard/Pages/password-set.qml:104
858#: qml/Wizard/Pages/password-set.qml:104
854msgid "Confirm password"
859msgid "Confirm password"
855−msgstr ""
860+msgstr "Confirmatz lo senhal"
856
861
857#: qml/Wizard/Pages/sim.qml:27
862#: qml/Wizard/Pages/sim.qml:27
858msgid "No SIM card installed"
863msgid "No SIM card installed"
859−msgstr ""
864+msgstr "Cap de carta SIM pas installada"
860
865
861#: qml/Wizard/Pages/sim.qml:54
866#: qml/Wizard/Pages/sim.qml:54
862msgid "SIM card added"
867msgid "SIM card added"
863−msgstr ""
868+msgstr "Carta SIM aponduda"
864
869
865#: qml/Wizard/Pages/sim.qml:55
870#: qml/Wizard/Pages/sim.qml:55
866msgid "You must restart the device to access the mobile network."
871msgid "You must restart the device to access the mobile network."
867−msgstr ""
872+msgstr "Vos cal reaviar l'aparelh per accedir a la ret mobila."
868
873
869#: qml/Wizard/Pages/sim.qml:59
874#: qml/Wizard/Pages/sim.qml:59
870msgid "Restart"
875msgid "Restart"
@@ -880,31 +885,31 @@ msgstr ""
880
885
881#: qml/Wizard/PasswordMeter.qml:87
886#: qml/Wizard/PasswordMeter.qml:87
882msgid "Password too short"
887msgid "Password too short"
883−msgstr ""
888+msgstr "Senhal tròp cort"
884
889
885#: qml/Wizard/PasswordMeter.qml:89
890#: qml/Wizard/PasswordMeter.qml:89
886msgid "Passwords match"
891msgid "Passwords match"
887−msgstr ""
892+msgstr "Los senhals correspondon"
888
893
889#: qml/Wizard/PasswordMeter.qml:91
894#: qml/Wizard/PasswordMeter.qml:91
890msgid "Passwords do not match"
895msgid "Passwords do not match"
891−msgstr ""
896+msgstr "Los senhals correspondon pas"
892
897
893#: qml/Wizard/PasswordMeter.qml:95
898#: qml/Wizard/PasswordMeter.qml:95
894msgid "Strong password"
899msgid "Strong password"
895−msgstr ""
900+msgstr "Senhal fòrt"
896
901
897#: qml/Wizard/PasswordMeter.qml:97
902#: qml/Wizard/PasswordMeter.qml:97
898msgid "Fair password"
903msgid "Fair password"
899−msgstr ""
904+msgstr "Senhal acceptable"
900
905
901#: qml/Wizard/PasswordMeter.qml:99
906#: qml/Wizard/PasswordMeter.qml:99
902msgid "Weak password"
907msgid "Weak password"
903−msgstr ""
908+msgstr "Senhal feble"
904
909
905#: qml/Wizard/PasswordMeter.qml:101
910#: qml/Wizard/PasswordMeter.qml:101
906msgid "Very weak password"
911msgid "Very weak password"
907−msgstr ""
912+msgstr "Senhal fòrça feble"
908
913
909#~ msgid "See less"
914#~ msgid "See less"
910#~ msgstr "Veire mens"
915#~ msgstr "Veire mens"
po/unity8.pot+14−14
@@ -8,7 +8,7 @@ msgid ""
8msgstr ""
8msgstr ""
9"Project-Id-Version: unity8\n"
9"Project-Id-Version: unity8\n"
10"Report-Msgid-Bugs-To: \n"
10"Report-Msgid-Bugs-To: \n"
11−"POT-Creation-Date: 2016-09-22 07:46+0000\n"
11+"POT-Creation-Date: 2016-10-24 11:37+0000\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -477,62 +477,62 @@ msgstr ""
477msgid "Conference"
477msgid "Conference"
478msgstr ""
478msgstr ""
479
479
480−#: qml/Panel/Indicators/MenuItemFactory.qml:762
480+#: qml/Panel/Indicators/MenuItemFactory.qml:788
481msgid "Nothing is playing"
481msgid "Nothing is playing"
482msgstr ""
482msgstr ""
483
483
484−#: qml/Panel/Indicators/MenuItemFactory.qml:891
484+#: qml/Panel/Indicators/MenuItemFactory.qml:916
485#, qt-format
485#, qt-format
486msgid "%1 hour"
486msgid "%1 hour"
487msgid_plural "%1 hours"
487msgid_plural "%1 hours"
488msgstr[0] ""
488msgstr[0] ""
489msgstr[1] ""
489msgstr[1] ""
490
490
491−#: qml/Panel/Indicators/MenuItemFactory.qml:895
491+#: qml/Panel/Indicators/MenuItemFactory.qml:920
492#, qt-format
492#, qt-format
493msgid "%1 minute"
493msgid "%1 minute"
494msgid_plural "%1 minutes"
494msgid_plural "%1 minutes"
495msgstr[0] ""
495msgstr[0] ""
496msgstr[1] ""
496msgstr[1] ""
497
497
498−#: qml/Panel/Indicators/MenuItemFactory.qml:900
498+#: qml/Panel/Indicators/MenuItemFactory.qml:925
499#, qt-format
499#, qt-format
500msgid "%1 second"
500msgid "%1 second"
501msgid_plural "%1 seconds"
501msgid_plural "%1 seconds"
502msgstr[0] ""
502msgstr[0] ""
503msgstr[1] ""
503msgstr[1] ""
504
504
505−#: qml/Panel/Indicators/MenuItemFactory.qml:903
505+#: qml/Panel/Indicators/MenuItemFactory.qml:928
506msgid "0 seconds"
506msgid "0 seconds"
507msgstr ""
507msgstr ""
508
508
509#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
509#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
510−#: qml/Panel/Indicators/MenuItemFactory.qml:905
510+#: qml/Panel/Indicators/MenuItemFactory.qml:930
511#, qt-format
511#, qt-format
512msgid "%1 remaining"
512msgid "%1 remaining"
513msgstr ""
513msgstr ""
514
514
515−#: qml/Panel/Indicators/MenuItemFactory.qml:911
515+#: qml/Panel/Indicators/MenuItemFactory.qml:936
516msgid "In queue…"
516msgid "In queue…"
517msgstr ""
517msgstr ""
518
518
519−#: qml/Panel/Indicators/MenuItemFactory.qml:915
519+#: qml/Panel/Indicators/MenuItemFactory.qml:940
520msgid "Downloading"
520msgid "Downloading"
521msgstr ""
521msgstr ""
522
522
523−#: qml/Panel/Indicators/MenuItemFactory.qml:917
523+#: qml/Panel/Indicators/MenuItemFactory.qml:942
524msgid "Paused, tap to resume"
524msgid "Paused, tap to resume"
525msgstr ""
525msgstr ""
526
526
527−#: qml/Panel/Indicators/MenuItemFactory.qml:919
527+#: qml/Panel/Indicators/MenuItemFactory.qml:944
528msgid "Canceled"
528msgid "Canceled"
529msgstr ""
529msgstr ""
530
530
531−#: qml/Panel/Indicators/MenuItemFactory.qml:921
531+#: qml/Panel/Indicators/MenuItemFactory.qml:946
532msgid "Finished"
532msgid "Finished"
533msgstr ""
533msgstr ""
534
534
535−#: qml/Panel/Indicators/MenuItemFactory.qml:923
535+#: qml/Panel/Indicators/MenuItemFactory.qml:948
536msgid "Failed, tap to retry"
536msgid "Failed, tap to retry"
537msgstr ""
537msgstr ""
538
538
@@ -552,7 +552,7 @@ msgctxt "Button: Call back on phone"
552msgid "Call back"
552msgid "Call back"
553msgstr ""
553msgstr ""
554
554
555−#: qml/Stages/SideStage.qml:76
555+#: qml/Stage/SideStage.qml:76
556msgid "Drag using 3 fingers any application from one window to the other"
556msgid "Drag using 3 fingers any application from one window to the other"
557msgstr ""
557msgstr ""
558
558
qml/Components/UbuntuShapeForItem.qmldeleted−47
@@ -1,47 +0,0 @@
1−/*
2− * Copyright (C) 2012 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.4
18−import Ubuntu.Components 1.3
19−
20−/* FIXME: This component is duplicating the UbuntuShape from the SDK, but shapes more
21− * general (Item-based) components. This ability should be incorporated into the SDK's
22− * UbuntuShape so this file can be removed.
23− * Bug: https://bugs.launchpad.net/tavastia/+bug/1089595
24− */
25−
26−Item {
27− id: root
28−
29− property alias radius: shape.radius
30− property alias image: source.sourceItem
31− property alias aspect: shape.aspect
32−
33− ShaderEffectSource {
34− id: source
35− anchors.centerIn: parent // Placed under shape, so it's hidden
36− width: 1
37− height: 1
38− hideSource: true
39− }
40−
41− Shape {
42− id: shape
43− image: source
44−
45− anchors.fill: parent
46− }
47−}
qml/Dash/Previews/PreviewProgress.qml+1−2
@@ -37,8 +37,7 @@ PreviewWidget {
37 anchors.right: parent.right
37 anchors.right: parent.right
38 value: 0
38 value: 0
39 maximumValue: 100
39 maximumValue: 100
40− implicitHeight: units.gu(4)
40+ height: units.gu(4)
41− height: parent.height
42 width: (root.width - units.gu(1)) / 2
41 width: (root.width - units.gu(1)) / 2
43
42
44 property var source: widgetData["source"]
43 property var source: widgetData["source"]
qml/Launcher/LauncherPanel.qml+5−2
@@ -632,7 +632,7 @@ Rectangle {
632 }
632 }
633 }
633 }
634
634
635− UbuntuShapeForItem {
635+ UbuntuShape {
636 id: quickListShape
636 id: quickListShape
637 objectName: "quickListShape"
637 objectName: "quickListShape"
638 anchors.fill: quickList
638 anchors.fill: quickList
@@ -645,7 +645,10 @@ Rectangle {
645 UbuntuNumberAnimation {}
645 UbuntuNumberAnimation {}
646 }
646 }
647
647
648+ source: ShaderEffectSource {
648− image: quickList
649+ sourceItem: quickList
650+ hideSource: true
651+ }
649
652
650 Image {
653 Image {
651 anchors {
654 anchors {
qml/Panel/Indicators/IndicatorMenuItemFactory.qml+96−148
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright 2013,2015 Canonical Ltd.
2+ * Copyright 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 Lesser General Public License as published by
5 * it under the terms of the GNU Lesser General Public License as published by
@@ -28,11 +28,12 @@ import Unity.Platform 1.0
28Object {
28Object {
29 id: menuFactory
29 id: menuFactory
30
30
31− property string context
31+ property string indicator
32 property var rootModel: null
32 property var rootModel: null
33 property var menuModel: null
33 property var menuModel: null
34
34
35− property var _map: {
35+ property var _userMap: null
36+ readonly property var _typeToComponent: {
36 "default": {
37 "default": {
37 "unity.widgets.systemsettings.tablet.volumecontrol" : sliderMenu,
38 "unity.widgets.systemsettings.tablet.volumecontrol" : sliderMenu,
38 "unity.widgets.systemsettings.tablet.switch" : switchMenu,
39 "unity.widgets.systemsettings.tablet.switch" : switchMenu,
@@ -70,11 +71,62 @@ Object {
70 "indicator.guest-menu-item": Platform.isPC ? userMenuItem : null,
71 "indicator.guest-menu-item": Platform.isPC ? userMenuItem : null,
71 "com.canonical.indicator.switch": Math.min(Screen.width, Screen.height) > units.gu(60) ? switchMenu : null // Desktop mode switch
72 "com.canonical.indicator.switch": Math.min(Screen.width, Screen.height) > units.gu(60) ? switchMenu : null // Desktop mode switch
72 },
73 },
73− "indicator-messages" : {
74+ "indicator-messages": {
74− "com.canonical.indicator.button" : messagesButtonMenu
75+ "com.canonical.indicator.button": messagesButtonMenu
75 }
76 }
76 }
77 }
77
78
79+ readonly property var _action_filter_map: {
80+ "indicator-session": {
81+ "indicator.logout": Platform.isPC ? undefined : null,
82+ "indicator.suspend": Platform.isPC ? undefined : null,
83+ "indicator.hibernate": Platform.isPC ? undefined : null,
84+ "indicator.reboot": Platform.isPC ? undefined : null
85+ },
86+ "indicator-keyboard": {
87+ "indicator.map": null,
88+ "indicator.chart": null
89+ }
90+ }
91+
92+ function getComponentForIndicatorEntryType(type) {
93+ var component = undefined;
94+ var map = _userMap || _typeToComponent
95+ var indicatorComponents = map[indicator];
96+
97+ if (type === undefined || type === "") {
98+ return component
99+ }
100+
101+ if (indicatorComponents !== undefined) {
102+ component = indicatorComponents[type];
103+ }
104+
105+ if (component === undefined) {
106+ component = map["default"][type];
107+ }
108+
109+ if (component === undefined) {
110+ console.debug("Don't know how to make " + modelData.type + " for " + indicator);
111+ }
112+
113+ return component
114+ }
115+
116+ function getComponentForIndicatorEntryAction(action) {
117+ var component = undefined;
118+ var indicatorFilter = _action_filter_map[indicator]
119+
120+ if (action === undefined || action === "") {
121+ return component
122+ }
123+
124+ if (indicatorFilter !== undefined) {
125+ component = indicatorFilter[action];
126+ }
127+ return component
128+ }
129+
78 function getExtendedProperty(object, propertyName, defaultValue) {
130 function getExtendedProperty(object, propertyName, defaultValue) {
79 if (object && object.hasOwnProperty(propertyName)) {
131 if (object && object.hasOwnProperty(propertyName)) {
80 return object[propertyName];
132 return object[propertyName];
@@ -103,7 +155,6 @@ Object {
103 property var serverValue: getExtendedProperty(menuData, "actionState", undefined)
155 property var serverValue: getExtendedProperty(menuData, "actionState", undefined)
104
156
105 text: menuData && menuData.label || ""
157 text: menuData && menuData.label || ""
106− iconSource: menuData && menuData.icon || ""
107 minIcon: getExtendedProperty(extendedData, "minIcon", "")
158 minIcon: getExtendedProperty(extendedData, "minIcon", "")
108 maxIcon: getExtendedProperty(extendedData, "maxIcon", "")
159 maxIcon: getExtendedProperty(extendedData, "maxIcon", "")
109
160
@@ -183,29 +234,20 @@ Object {
183 Component {
234 Component {
184 id: messagesButtonMenu;
235 id: messagesButtonMenu;
185
236
186− Item {
237+ Menus.BaseLayoutMenu {
187 objectName: "messagesButtonMenu"
238 objectName: "messagesButtonMenu"
188 property QtObject menuData: null
239 property QtObject menuData: null
189 property var menuModel: menuFactory.menuModel
240 property var menuModel: menuFactory.menuModel
190 property int menuIndex: -1
241 property int menuIndex: -1
191
242
192− implicitHeight: units.gu(5)
243+ highlightWhenPressed: false
193 enabled: menuData && menuData.sensitive || false
244 enabled: menuData && menuData.sensitive || false
245+ text: menuData && menuData.label || ""
246+ title.color: theme.palette.selected.backgroundText
247+ title.horizontalAlignment: Text.AlignHCenter
248+ title.font.bold: true
194
249
195− Label {
196− id: buttonMenuLabel
197− text: menuData && menuData.label || ""
198− anchors.centerIn: parent
199− font.bold: true
200− }
201−
202− MouseArea {
203− anchors {
204− fill: buttonMenuLabel
205− margins: units.gu(-1)
206− }
207− onClicked: menuModel.activate(menuIndex);
250+ onClicked: menuModel.activate(menuIndex);
208− }
209 }
251 }
210 }
252 }
211
253
@@ -234,11 +276,6 @@ Object {
234 iconSource: menuData && menuData.icon || ""
276 iconSource: menuData && menuData.icon || ""
235 value : menuData && menuData.actionState || 0.0
277 value : menuData && menuData.actionState || 0.0
236 enabled: menuData && menuData.sensitive || false
278 enabled: menuData && menuData.sensitive || false
237− // FIXME: Because of this bug, setting it to the theme foreground color (white)
238− // currently doesn't work. Let's hack it to be "close enough"
239− // https://bugs.launchpad.net/ubuntu/+source/ubuntu-ui-toolkit/+bug/1555784
240− foregroundColor: "#fffffe"
241− highlightWhenPressed: false
242 }
279 }
243 }
280 }
244
281
@@ -258,52 +295,41 @@ Object {
258 onTriggered: {
295 onTriggered: {
259 menuModel.activate(menuIndex);
296 menuModel.activate(menuIndex);
260 }
297 }
261−
262− // FIXME : At the moment, the indicators aren't using
263− // com.canonical.indicators.link for settings menu. Need to fudge it.
264− property bool settingsMenu: menuData && menuData.action.indexOf("settings") > -1 || false
265− backColor: settingsMenu ? Qt.rgba(1,1,1,0.07) : "transparent"
266− component: settingsMenu ? buttonForSettings : undefined
267− Component {
268− id: buttonForSettings
269− Icon {
270− name: "settings"
271− height: units.gu(3)
272− width: height
273− color: theme.palette.normal.backgroundText
274− }
275− }
276 }
298 }
277 }
299 }
278
300
279 Component {
301 Component {
280 id: linkMenu;
302 id: linkMenu;
281
303
282− Menus.StandardMenu {
304+ Menus.BaseLayoutMenu {
283 objectName: "linkMenu"
305 objectName: "linkMenu"
284 property QtObject menuData: null
306 property QtObject menuData: null
285 property int menuIndex: -1
307 property int menuIndex: -1
286
308
287 text: menuData && menuData.label || ""
309 text: menuData && menuData.label || ""
288− iconSource: menuData && menuData.icon || ""
289 enabled: menuData && menuData.sensitive || false
310 enabled: menuData && menuData.sensitive || false
311+ backColor: Qt.rgba(1,1,1,0.07)
290 highlightWhenPressed: false
312 highlightWhenPressed: false
291
313
292 onTriggered: {
314 onTriggered: {
293 menuModel.activate(menuIndex);
315 menuModel.activate(menuIndex);
294 }
316 }
295
317
296− backColor: Qt.rgba(1,1,1,0.07)
297−
298− component: menuData.icon ? icon : undefined
299− Component {
300− id: icon
301− Icon {
318+ slots: Icon {
319+ source: {
320+ if (menuData) {
302− source: menuData.icon
321+ if (menuData.icon && menuData.icon != "") {
303− height: units.gu(3)
322+ return menuData.icon
304− width: height
323+ } else if (menuData.action.indexOf("settings") > -1) {
305− color: theme.palette.normal.backgroundText
324+ return "image://theme/settings"
325+ }
326+ }
327+ return ""
306 }
328 }
329+ height: units.gu(3)
330+ width: height
331+ color: theme.palette.normal.backgroundText
332+ SlotsLayout.position: SlotsLayout.Trailing
307 }
333 }
308 }
334 }
309 }
335 }
@@ -770,7 +796,6 @@ Object {
770 state: getExtendedProperty(actionState, "state", "")
796 state: getExtendedProperty(actionState, "state", "")
771 enabled: menuData && menuData.sensitive || false
797 enabled: menuData && menuData.sensitive || false
772 highlightWhenPressed: false
798 highlightWhenPressed: false
773− showDivider: false
774
799
775 onTriggered: {
800 onTriggered: {
776 model.activate(modelIndex);
801 model.activate(modelIndex);
@@ -973,116 +998,39 @@ Object {
973 menuModel.loadExtendedAttributes(menuIndex, {'x-canonical-extra-label': 'string'});
998 menuModel.loadExtendedAttributes(menuIndex, {'x-canonical-extra-label': 'string'});
974 }
999 }
975
1000
976− component: Component {
977− Button {
1001+ slots: Button {
978− objectName: "buttonSectionMenuControl"
1002+ objectName: "buttonSectionMenuControl"
979− text: getExtendedProperty(extendedData, "xCanonicalExtraLabel", "")
1003+ text: getExtendedProperty(extendedData, "xCanonicalExtraLabel", "")
980
1004
981− onClicked: {
1005+ onClicked: {
982− menuModel.activate(menuIndex);
1006+ menuModel.activate(menuIndex);
983− }
984 }
1007 }
985 }
1008 }
986 }
1009 }
987 }
1010 }
988
1011
989− Component {
990− id: keymapMenu;
991−
992− // FIXME this should use a "radio button" menu, once we have it in the SDK
993− ListItems.Empty {
994− id: checkItem
995− objectName: "keymapMenu"
996− property QtObject menuData: null
997− property int menuIndex: -1
998− readonly property bool serverChecked: menuData && menuData.isToggled || false
999−
1000− enabled: menuData && menuData.sensitive || false
1001− highlightWhenPressed: false
1002− __acceptEvents: !serverChecked
1003−
1004− CheckBox {
1005− id: checkbox
1006− __acceptEvents: !checkItem.serverChecked
1007− anchors {
1008− left: parent.left
1009− leftMargin: checkItem.__contentsMargins
1010− verticalCenter: parent.verticalCenter
1011− }
1012− }
1013−
1014− ServerPropertySynchroniser {
1015− objectName: "sync"
1016− syncTimeout: Utils.Constants.indicatorValueTimeout
1017−
1018− serverTarget: checkItem
1019− serverProperty: "serverChecked"
1020− userTarget: checkbox
1021− userProperty: "checked"
1022−
1023− onSyncTriggered: {
1024− menuModel.activate(checkItem.menuIndex);
1025− }
1026− }
1027−
1028− Label {
1029− id: label
1030− anchors {
1031− left: checkbox.right
1032− leftMargin: checkItem.__contentsMargins
1033− right: parent.right
1034− rightMargin: checkItem.__contentsMargins
1035− verticalCenter: parent.verticalCenter
1036− }
1037− elide: Text.ElideRight
1038− text: checkItem.menuData && checkItem.menuData.label || ""
1039− }
1040−
1041− onClicked: menuModel.activate(menuIndex);
1042− }
1043− }
1044−
1045 function load(modelData) {
1012 function load(modelData) {
1046− // tweak indicator-session items
1013+ var component = getComponentForIndicatorEntryAction(modelData.action)
1047− if (context === "indicator-session") {
1014+ if (component !== undefined) {
1048− if ((modelData.action === "indicator.logout" || modelData.action === "indicator.suspend" || modelData.action === "indicator.hibernate" ||
1015+ return component
1049− modelData.action === "indicator.reboot")
1050− && !Platform.isPC) {
1051− return null; // logout, suspend and hibernate hidden on devices
1052− }
1053 }
1016 }
1054
1017
1055− // specialize for indicator-keyboard
1018+ component = getComponentForIndicatorEntryType(modelData.type)
1056− if (context === "indicator-keyboard") {
1019+ if (component !== undefined) {
1057− if (modelData.isRadio) {
1020+ return component;
1058− return keymapMenu;
1059− } else if (modelData.action === "indicator.map" || modelData.action === "indicator.chart") {
1060− return null; // map and chart not available
1061− }
1062 }
1021 }
1063
1022
1064− if (modelData.type !== undefined && modelData.type !== "") {
1065− var component = undefined;
1066−
1067− var contextComponents = _map[context];
1068− if (contextComponents !== undefined) {
1069− component = contextComponents[modelData.type];
1070− }
1071−
1072− if (component === undefined) {
1073− component = _map["default"][modelData.type];
1074− }
1075− if (component !== undefined) {
1076− return component;
1077− }
1078− console.debug("Don't know how to make " + modelData.type + " for " + context);
1079− }
1080 if (modelData.isCheck || modelData.isRadio) {
1023 if (modelData.isCheck || modelData.isRadio) {
1081 return checkableMenu;
1024 return checkableMenu;
1082 }
1025 }
1083 if (modelData.isSeparator) {
1026 if (modelData.isSeparator) {
1084 return separatorMenu;
1027 return separatorMenu;
1085 }
1028 }
1029+ if (modelData.action !== undefined && modelData.action.indexOf("settings") > -1) {
1030+ // FIXME : At the moment, the indicators aren't using
1031+ // com.canonical.indicators.link for settings menu. Need to fudge it.
1032+ return linkMenu;
1033+ }
1086 return standardMenu;
1034 return standardMenu;
1087 }
1035 }
1088}
1036}
qml/Panel/Panel.qml+7−1
@@ -337,7 +337,13 @@ Item {
337 menuModel: delegate.menuModel
337 menuModel: delegate.menuModel
338
338
339 factory: IndicatorMenuItemFactory {
339 factory: IndicatorMenuItemFactory {
340+ indicator: {
340− context: modelData.identifier
341+ var context = modelData.identifier;
342+ if (context && context.indexOf("fake-") === 0) {
343+ context = context.substring("fake-".length)
344+ }
345+ return context;
346+ }
341 rootModel: delegate.menuModel
347 rootModel: delegate.menuModel
342 }
348 }
343
349
qml/Shell.qml+10
@@ -706,8 +706,16 @@ StyledItem {
706 }
706 }
707 }
707 }
708
708
709+ Timer {
710+ id: cursorHidingTimer
711+ interval: 3000
712+ running: panel.focusedSurfaceIsFullscreen && cursor.opacity > 0
713+ onTriggered: cursor.opacity = 0;
714+ }
715+
709 Cursor {
716 Cursor {
710 id: cursor
717 id: cursor
718+ objectName: "cursor"
711 visible: shell.hasMouse
719 visible: shell.hasMouse
712 z: itemGrabber.z + 1
720 z: itemGrabber.z + 1
713 topBoundaryOffset: panel.panelHeight
721 topBoundaryOffset: panel.panelHeight
@@ -781,6 +789,8 @@ StyledItem {
781 mouseNeverMoved = false;
789 mouseNeverMoved = false;
782 cursor.opacity = 1;
790 cursor.opacity = 1;
783 }
791 }
792+
793+ Behavior on opacity { UbuntuNumberAnimation {} }
784 }
794 }
785
795
786 // non-visual object
796 // non-visual object
qml/Stage/DecoratedWindow.qml+30
@@ -262,6 +262,36 @@ FocusScope {
262 }
262 }
263 }
263 }
264
264
265+ MouseArea {
266+ anchors.fill: applicationWindow
267+ acceptedButtons: Qt.LeftButton
268+ property bool dragging: false
269+ cursorShape: undefined // don't interfere with the cursor shape set by the underlying MirSurfaceItem
270+ onPressed: {
271+ if (mouse.button == Qt.LeftButton && mouse.modifiers == Qt.AltModifier) {
272+ root.decorationPressed(); // to raise it
273+ moveHandler.handlePressedChanged(true, Qt.LeftButton, mouse.x, mouse.y);
274+ dragging = true;
275+ mouse.accepted = true;
276+ } else {
277+ mouse.accepted = false;
278+ }
279+ }
280+ onPositionChanged: {
281+ if (dragging) {
282+ moveHandler.handlePositionChanged(mouse);
283+ }
284+ }
285+ onReleased: {
286+ if (dragging) {
287+ moveHandler.handlePressedChanged(false, Qt.LeftButton);
288+ root.decorationReleased(); // commits the fake preview max rectangle
289+ moveHandler.handleReleased();
290+ dragging = false;
291+ }
292+ }
293+ }
294+
265 MoveHandler {
295 MoveHandler {
266 id: moveHandler
296 id: moveHandler
267 objectName: "moveHandler"
297 objectName: "moveHandler"
qml/Stage/MoveHandler.qml+2−1
@@ -103,7 +103,8 @@ QtObject {
103 if (priv.dragging) {
103 if (priv.dragging) {
104 Mir.cursorName = "grabbing";
104 Mir.cursorName = "grabbing";
105
105
106− if (target.anyMaximized) { // restore from maximized when dragging away from edges/corners
106+ // restore from maximized when dragging away from edges/corners; guard against inadvertent changes when going into maximized state
107+ if (target.anyMaximized && !target.windowedTransitionRunning) {
107 priv.progress = 0;
108 priv.progress = 0;
108 target.restore(false, WindowStateStorage.WindowStateNormal);
109 target.restore(false, WindowStateStorage.WindowStateNormal);
109 }
110 }
qml/Stage/Stage.qml+11−2
@@ -736,6 +736,14 @@ FocusScope {
736 readonly property string appName: model.application ? model.application.name : ""
736 readonly property string appName: model.application ? model.application.name : ""
737 property bool visuallyMaximized: false
737 property bool visuallyMaximized: false
738 property bool visuallyMinimized: false
738 property bool visuallyMinimized: false
739+ readonly property alias windowedTransitionRunning: windowedTransition.running
740+
741+ property int stage: ApplicationInfoInterface.MainStage
742+ function saveStage(newStage) {
743+ appDelegate.stage = newStage;
744+ WindowStateStorage.saveStage(appId, newStage);
745+ priv.updateMainAndSideStageIndexes()
746+ }
739
747
740 property int stage: ApplicationInfoInterface.MainStage
748 property int stage: ApplicationInfoInterface.MainStage
741 function saveStage(newStage) {
749 function saveStage(newStage) {
@@ -1187,7 +1195,7 @@ FocusScope {
1187 }
1195 }
1188 },
1196 },
1189 State {
1197 State {
1190− name: "maximized"; when: appDelegate.windowState == WindowStateStorage.WindowStateMaximized
1198+ name: "maximized"; when: appDelegate.maximized && !appDelegate.minimized
1191 PropertyChanges {
1199 PropertyChanges {
1192 target: appDelegate;
1200 target: appDelegate;
1193 requestedX: root.leftMargin;
1201 requestedX: root.leftMargin;
@@ -1327,7 +1335,7 @@ FocusScope {
1327 UbuntuNumberAnimation { target: appDelegate; properties: "x,y,requestedX,requestedY,opacity,requestedWidth,requestedHeight,scale"; duration: priv.animationDuration }
1335 UbuntuNumberAnimation { target: appDelegate; properties: "x,y,requestedX,requestedY,opacity,requestedWidth,requestedHeight,scale"; duration: priv.animationDuration }
1328 },
1336 },
1329 Transition {
1337 Transition {
1330− from: "normal,maximized,maximizedHorizontally,maximizedVertically,maximizedLeft,maximizedRight,maximizedTopLeft,maximizedBottomLeft,maximizedTopRight,maximizedBottomRight";
1338+ from: "normal,restored,maximized,maximizedHorizontally,maximizedVertically,maximizedLeft,maximizedRight,maximizedTopLeft,maximizedBottomLeft,maximizedTopRight,maximizedBottomRight";
1331 to: "staged,stagedWithSideStage"
1339 to: "staged,stagedWithSideStage"
1332 UbuntuNumberAnimation { target: appDelegate; properties: "x,y,requestedX,requestedY,requestedWidth,requestedHeight"; duration: priv.animationDuration}
1340 UbuntuNumberAnimation { target: appDelegate; properties: "x,y,requestedX,requestedY,requestedWidth,requestedHeight"; duration: priv.animationDuration}
1333 },
1341 },
@@ -1404,6 +1412,7 @@ FocusScope {
1404 }
1412 }
1405 },
1413 },
1406 Transition {
1414 Transition {
1415+ id: windowedTransition
1407 from: "normal,restored,maximized,maximizedLeft,maximizedRight,maximizedTop,maximizedBottom,maximizedTopLeft,maximizedTopRight,maximizedBottomLeft,maximizedBottomRight,maximizedHorizontally,maximizedVertically,fullscreen"
1416 from: "normal,restored,maximized,maximizedLeft,maximizedRight,maximizedTop,maximizedBottom,maximizedTopLeft,maximizedTopRight,maximizedBottomLeft,maximizedBottomRight,maximizedHorizontally,maximizedVertically,fullscreen"
1408 to: "normal,restored,maximized,maximizedLeft,maximizedRight,maximizedTop,maximizedBottom,maximizedTopLeft,maximizedTopRight,maximizedBottomLeft,maximizedBottomRight,maximizedHorizontally,maximizedVertically,fullscreen"
1417 to: "normal,restored,maximized,maximizedLeft,maximizedRight,maximizedTop,maximizedBottom,maximizedTopLeft,maximizedTopRight,maximizedBottomLeft,maximizedBottomRight,maximizedHorizontally,maximizedVertically,fullscreen"
1409 enabled: appDelegate.animationsEnabled
1418 enabled: appDelegate.animationsEnabled
tests/mocks/Cursor/Cursor.qml+2
@@ -29,4 +29,6 @@ Item {
29 signal pushedBottomRightCorner(real amount, int buttons)
29 signal pushedBottomRightCorner(real amount, int buttons)
30 signal pushStopped()
30 signal pushStopped()
31 signal mouseMoved()
31 signal mouseMoved()
32+
33+ onMouseMoved: opacity = 1;
32}
34}
tests/mocks/Unity/Indicators/IndicatorsModel.qml+1−1
@@ -124,7 +124,7 @@ Indicators.FakeIndicatorsModel {
124
124
125 Indicators.UnityMenuModelCache.setCachedModelData("/com/canonical/indicators/fake0",
125 Indicators.UnityMenuModelCache.setCachedModelData("/com/canonical/indicators/fake0",
126 getUnityMenuModelData("indicator-keyboard",
126 getUnityMenuModelData("indicator-keyboard",
127− "Czech (F)",
127+ "English (F)",
128 "",
128 "",
129 [ "image://theme/input-keyboard-symbolic" ]));
129 [ "image://theme/input-keyboard-symbolic" ]));
130 Indicators.UnityMenuModelCache.setCachedModelData("/com/canonical/indicators/fake1",
130 Indicators.UnityMenuModelCache.setCachedModelData("/com/canonical/indicators/fake1",
tests/mocks/Unity/Indicators/fakeindicatorsmodeldata.js+220−32
@@ -30,7 +30,7 @@ var fakeMenuData = {
30 "type": "com.canonical.indicator.messages.messageitem",
30 "type": "com.canonical.indicator.messages.messageitem",
31 "ext": {
31 "ext": {
32 "icon": "file:///usr/share/ubuntu/settings/system/icons/settings-system-update.svg",
32 "icon": "file:///usr/share/ubuntu/settings/system/icons/settings-system-update.svg",
33− "xCanonicalAppIcon": "file:///usr/share/ubuntu/settings/system/system-settings.png",
33+ "xCanonicalAppIcon": "image://theme/system-settings",
34 "xCanonicalMessageActions": null,
34 "xCanonicalMessageActions": null,
35 "xCanonicalText": "Tap to open the system updater.",
35 "xCanonicalText": "Tap to open the system updater.",
36 "xCanonicalTime": ((new Date).getTime() - 350 * 1000) * 1000,
36 "xCanonicalTime": ((new Date).getTime() - 350 * 1000) * 1000,
@@ -47,12 +47,12 @@ var fakeMenuData = {
47 "action": "indicator.telephony-service-sms.msg.MSG_ID",
47 "action": "indicator.telephony-service-sms.msg.MSG_ID",
48 "actionState": {},
48 "actionState": {},
49 "ext": {},
49 "ext": {},
50− "icon": "file:///usr/share/telephony-service/assets/avatar-default@18.png",
50+ "icon": Qt.resolvedUrl("../../../../../tests/graphics/avatars/funky@12.png"),
51 "type": "com.canonical.indicator.messages.messageitem",
51 "type": "com.canonical.indicator.messages.messageitem",
52 "ext": {
52 "ext": {
53− "icon": "file:///usr/share/telephony-service/assets/avatar-default@18.png",
53+ "icon": Qt.resolvedUrl("../../../../../tests/graphics/avatars/funky@12.png"),
54− "xCanonicalAppIcon": "image://theme/telephony-service-message",
54+ "xCanonicalAppIcon": Qt.resolvedUrl("../../../../../tests/graphics/applicationIcons/messages-app@18.png"),
55− "xCanonicalMessageActions": "",
55+ "xCanonicalMessageActions": [ { "parameter-type": "s" } ],
56 "xCanonicalText": "This is a message sent to an awesome Ubuntu phone.",
56 "xCanonicalText": "This is a message sent to an awesome Ubuntu phone.",
57 "xCanonicalTime": ((new Date).getTime() - 35 * 1000) * 1000
57 "xCanonicalTime": ((new Date).getTime() - 35 * 1000) * 1000
58 },
58 },
@@ -64,6 +64,25 @@ var fakeMenuData = {
64 "sensitive": true
64 "sensitive": true
65 }
65 }
66 },
66 },
67+ {
68+ "rowData": {
69+ "label": "+39441234567 - [SIM 2]",
70+ "sensitive": true,
71+ "isSeparator": false,
72+ "icon": "image://theme/missed-call",
73+ "type": "com.canonical.indicator.messages.messageitem",
74+ "ext": {
75+ "xCanonicalMessageActions": [ { "parameter-type": "_s" } ],
76+ "xCanonicalText": "1 Missed call.",
77+ "xCanonicalTime": ((new Date).getTime() - 350 * 1000) * 1000,
78+ },
79+ "action": "indicator.telephony-service-missed-call.call.CALL_ID",
80+ "actionState": {},
81+ "isCheck": false,
82+ "isRadio": false,
83+ "isToggled": false,
84+ }
85+ },
67 {
86 {
68 "rowData": {
87 "rowData": {
69 "action": "indicator.remove-all",
88 "action": "indicator.remove-all",
@@ -337,34 +356,72 @@ var fakeMenuData = {
337 "type": "com.canonical.indicator.root"
356 "type": "com.canonical.indicator.root"
338 },
357 },
339 "submenu": [
358 "submenu": [
340− {
359+ {
360+ "rowData": {
361+ "label": "Charge Level",
362+ "sensitive": false,
363+ "isSeparator": false,
364+ "icon": "",
365+ "type": "com.canonical.indicator.progress",
366+ "ext": {},
367+ "action": "indicator.battery-level",
368+ "actionState": "100",
369+ "isCheck": false,
370+ "isRadio": false,
371+ "isToggled": false
372+ }
373+ },
374+ {
375+
376+ "rowData": {
377+ "label": "",
378+ "sensitive": true,
379+ "isSeparator": true,
380+ "icon": "",
381+ "type": "",
382+ "ext": {},
383+ "action": "",
384+ "actionState": "",
385+ "isCheck": false,
386+ "isRadio": false,
387+ "isToggled": false
388+ }
389+ },
390+ {
391+
392+ "rowData": {
393+ "label": "",
394+ "sensitive": true,
395+ "isSeparator": false,
396+ "icon": "",
397+ "type": "com.canonical.unity.slider",
398+ "ext": {
399+ "maxIcon": "image://theme/display-brightness-max",
400+ "maxValue": "1",
401+ "minIcon": "image://theme/display-brightness-min",
402+ "minValue": "0",
403+ },
404+ "action": "indicator.brightness",
405+ "actionState": "0.212244897959184",
406+ "isCheck": false,
407+ "isRadio": false,
408+ "isToggled": false
409+ }
410+ },
411+ {
412+
341 "rowData": {
413 "rowData": {
342− "action": "indicator.activate-statistics",
414+ "label": "Auto-brightness",
343− "actionState": {},
344− "ext": {},
345− "icon": "image://theme/battery-full-charged-symbolic",
346− "isCheck": false,
347− "isRadio": false,
348− "isSeparator": false,
349− "isToggled": false,
350− "label": "Battery (full charged)",
351 "sensitive": true,
415 "sensitive": true,
416+ "isSeparator": false,
417+ "icon": "",
352− "type": "com.canonical.indicator.basic"
418+ "type": "com.canonical.indicator.switch",
353− }
354− },
355− {
356− "rowData": {
357− "action": "indicator.activate-statistics",
358− "actionState": {},
359 "ext": {},
419 "ext": {},
360− "icon": "image://theme/battery-100",
420+ "action": "indicator.auto-brightness",
421+ "actionState": false,
361− "isCheck": false,
422+ "isCheck": true,
362 "isRadio": false,
423 "isRadio": false,
363− "isSeparator": false,
364− "isToggled": false,
424+ "isToggled": false
365− "label": "Battery",
366− "sensitive": true,
367− "type": "com.canonical.indicator.basic"
368 }
425 }
369 },
426 },
370 {
427 {
@@ -555,7 +612,6 @@ var fakeMenuData = {
555 }
612 }
556 ],
613 ],
557
614
558−
559 "fake-indicator-datetime": [
615 "fake-indicator-datetime": [
560 {
616 {
561 "rowData": {
617 "rowData": {
@@ -591,6 +647,25 @@ var fakeMenuData = {
591 "type": ""
647 "type": ""
592 }
648 }
593 },
649 },
650+ {
651+ "rowData": {
652+ "action": "indicator.calendar",
653+ "actionState": {
654+ "appointment-days": "",
655+ "calendar-day": (new Date).getTime() / 1000,
656+ "show-week-numbers": false,
657+ },
658+ "ext": {},
659+ "icon": "image://theme/calendar",
660+ "isCheck": false,
661+ "isRadio": true,
662+ "isSeparator": false,
663+ "isToggled": false,
664+ "label": "[calendar]",
665+ "sensitive": true,
666+ "type": "com.canonical.indicator.calendar"
667+ }
668+ },
594 {
669 {
595 "rowData": {
670 "rowData": {
596 "action": "",
671 "action": "",
@@ -727,7 +802,6 @@ var fakeMenuData = {
727 }
802 }
728 ],
803 ],
729
804
730−
731 "fake-indicator-files": [
805 "fake-indicator-files": [
732 {
806 {
733 "rowData": {
807 "rowData": {
@@ -1102,5 +1176,119 @@ var fakeMenuData = {
1102 }
1176 }
1103 ]
1177 ]
1104 }
1178 }
1105− ]
1179+ ],
1180+
1181+ "indicator-keyboard": [
1182+ {
1183+ "rowData": {
1184+ "action": "indicator.indicator",
1185+ "actionState": {
1186+ "icons": [],
1187+ "label": "",
1188+ "title": "English (USA, QWERTY)",
1189+ "visible": true
1190+ },
1191+ "icon": "",
1192+ "isCheck": false,
1193+ "isRadio": false,
1194+ "isSeparator": false,
1195+ "isToggled": false,
1196+ "label": "",
1197+ "sensitive": true,
1198+ "type": "com.canonical.indicator.root"
1199+ },
1200+ "submenu": [
1201+ {
1202+ "rowData": {
1203+ "label": "České (QWERTY)",
1204+ "sensitive": true,
1205+ "isSeparator": false,
1206+ "icon": "image://theme/indicator-keyboard-Cs",
1207+ "type": "",
1208+ "ext": {},
1209+ "action": "indicator.current",
1210+ "actionState": 0,
1211+ "isCheck": false,
1212+ "isRadio": true,
1213+ "isToggled": false
1214+ }
1215+ },
1216+ {
1217+ "rowData": {
1218+ "label": "Italiana (QWERTY)",
1219+ "sensitive": true,
1220+ "isSeparator": false,
1221+ "icon": "image://theme/indicator-keyboard-It",
1222+ "type": "",
1223+ "ext": {},
1224+ "action": "indicator.current",
1225+ "actionState": 0,
1226+ "isCheck": false,
1227+ "isRadio": true,
1228+ "isToggled": false
1229+ }
1230+ },
1231+ {
1232+ "rowData": {
1233+ "label": "English (USA)",
1234+ "sensitive": true,
1235+ "isSeparator": false,
1236+ "icon": "image://theme/indicator-keyboard-En",
1237+ "type": "",
1238+ "ext": {},
1239+ "action": "indicator.current",
1240+ "actionState": 0,
1241+ "isCheck": false,
1242+ "isRadio": true,
1243+ "isToggled": true
1244+ }
1245+ },
1246+ {
1247+ "rowData": {
1248+ "label": "",
1249+ "sensitive": true,
1250+ "isSeparator": true,
1251+ "icon": "",
1252+ "type": "",
1253+ "ext": {},
1254+ "action": "",
1255+ "actionState": "",
1256+ "isCheck": false,
1257+ "isRadio": false,
1258+ "isToggled": false
1259+ }
1260+ },
1261+ {
1262+ "rowData": {
1263+ "label": "Character Map",
1264+ "sensitive": true,
1265+ "isSeparator": false,
1266+ "icon": "",
1267+ "type": "",
1268+ "ext": {},
1269+ "action": "indicator.map",
1270+ "actionState": "",
1271+ "isCheck": false,
1272+ "isRadio": false,
1273+ "isToggled": false
1274+ }
1275+ },
1276+ {
1277+ "rowData": {
1278+ "label": "Keyboard layout",
1279+ "sensitive": true,
1280+ "isSeparator": false,
1281+ "icon": "",
1282+ "type": "",
1283+ "ext": {},
1284+ "action": "indicator.key-map.settings",
1285+ "actionState": "",
1286+ "isCheck": false,
1287+ "isRadio": false,
1288+ "isToggled": false
1289+ }
1290+ }
1291+ ]
1292+ }
1293+ ],
1106}
1294}
tests/plugins/Greeter/Unity/Launcher/CMakeLists.txt−1
@@ -10,7 +10,6 @@ include_directories(
10
10
11add_definitions(-DSM_BUSNAME=sessionBus)
11add_definitions(-DSM_BUSNAME=sessionBus)
12add_definitions(-DSRCDIR="${CMAKE_CURRENT_SOURCE_DIR}")
12add_definitions(-DSRCDIR="${CMAKE_CURRENT_SOURCE_DIR}")
13−add_definitions(-DLAUNCHER_TESTING)
14
13
15### LauncherModelASTest
14### LauncherModelASTest
16add_executable(launchermodelastestExec
15add_executable(launchermodelastestExec
tests/plugins/Unity/Launcher/CMakeLists.txt+12−20
@@ -6,14 +6,18 @@ include_directories(
6 ${CMAKE_CURRENT_BINARY_DIR}
6 ${CMAKE_CURRENT_BINARY_DIR}
7 ${CMAKE_SOURCE_DIR}/plugins/AccountsService
7 ${CMAKE_SOURCE_DIR}/plugins/AccountsService
8 ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher
8 ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher
9+ ${libunity8-private_SOURCE_DIR}
10+ )
11+
12+include_directories(
13+ SYSTEM
9 ${GSETTINGS_QT_INCLUDE_DIRS}
14 ${GSETTINGS_QT_INCLUDE_DIRS}
10 ${GLIB_INCLUDE_DIRS}
15 ${GLIB_INCLUDE_DIRS}
11− ${libunity8-private_SOURCE_DIR}
16+ ${UAL_INCLUDE_DIRS}
12 )
17 )
13
18
14add_definitions(-DSM_BUSNAME=sessionBus)
19add_definitions(-DSM_BUSNAME=sessionBus)
15add_definitions(-DSRCDIR="${CMAKE_CURRENT_SOURCE_DIR}")
20add_definitions(-DSRCDIR="${CMAKE_CURRENT_SOURCE_DIR}")
16−add_definitions(-DLAUNCHER_TESTING)
17
21
18### LauncherModelTest
22### LauncherModelTest
19add_executable(launchermodeltestExec
23add_executable(launchermodeltestExec
@@ -25,7 +29,6 @@ add_executable(launchermodeltestExec
25 ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/launcheritem.cpp
29 ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/launcheritem.cpp
26 ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/quicklistmodel.cpp
30 ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/quicklistmodel.cpp
27 ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/dbusinterface.cpp
31 ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/dbusinterface.cpp
28− ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/desktopfilehandler.cpp
29 ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/quicklistentry.cpp
32 ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/quicklistentry.cpp
30 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherItemInterface.h
33 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherItemInterface.h
31 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherModelInterface.h
34 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherModelInterface.h
@@ -37,11 +40,13 @@ target_link_libraries(launchermodeltestExec
37 unity8-private
40 unity8-private
38 ${GSETTINGS_QT_LDFLAGS}
41 ${GSETTINGS_QT_LDFLAGS}
39 ${GLIB_LIBRARIES}
42 ${GLIB_LIBRARIES}
43+ ${UAL_LIBRARIES}
40 )
44 )
41add_dependencies(launchermodeltestExec mock-server)
45add_dependencies(launchermodeltestExec mock-server)
42qt5_use_modules(launchermodeltestExec Test Core DBus Xml Gui)
46qt5_use_modules(launchermodeltestExec Test Core DBus Xml Gui)
43
47
44add_unity8_unittest(LauncherModel dbus-test-runner
48add_unity8_unittest(LauncherModel dbus-test-runner
49+ ENVIRONMENT "XDG_DATA_HOME=${CMAKE_CURRENT_BINARY_DIR}"
45 ARG_PREFIX "--parameter"
50 ARG_PREFIX "--parameter"
46 ARGS
51 ARGS
47 --task $<TARGET_FILE:mock-server>
52 --task $<TARGET_FILE:mock-server>
@@ -50,20 +55,7 @@ add_unity8_unittest(LauncherModel dbus-test-runner
50 --wait-for org.freedesktop.Accounts
55 --wait-for org.freedesktop.Accounts
51)
56)
52
57
53−# copy .desktop files into build directory for shadow builds
58+# copy sample application files into build directory for shadow builds
54−file(GLOB DESKTOP_FILES *.desktop)
59+file(COPY applications
55−
56−foreach(DESKTOP_FILE ${DESKTOP_FILES})
57− file(COPY "${DESKTOP_FILE}"
58− DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
60+ DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
59− )
61+ )
60−endforeach()
61−
62−# copy .svg files into build directory for shadow builds
63−file(GLOB DESKTOP_FILES *.svg)
64−
65−foreach(DESKTOP_FILE ${DESKTOP_FILES})
66− file(COPY "${DESKTOP_FILE}"
67− DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
68− )
69−endforeach()
tests/plugins/Unity/Launcher/abs-icon.desktop → tests/plugins/Unity/Launcher/applications/abs-icon.desktoprenamed+1
@@ -1,3 +1,4 @@
1[Desktop Entry]
1[Desktop Entry]
2+Type=Application
2Name=Absolute Icon
3Name=Absolute Icon
3Icon=/path/to/icon.png
4Icon=/path/to/icon.png
tests/plugins/Unity/Launcher/click-icon.desktop → tests/plugins/Unity/Launcher/applications/click-icon.desktoprenamed+1
@@ -1,4 +1,5 @@
1[Desktop Entry]
1[Desktop Entry]
2+Type=Application
2Name=Click Package Icon
3Name=Click Package Icon
3Icon=click-icon.svg
4Icon=click-icon.svg
4Path=/path/to/some/click/app
5Path=/path/to/some/click/app
tests/plugins/Unity/Launcher/click-icon.svg → tests/plugins/Unity/Launcher/applications/click-icon.svgrenamed

The content is the same.

tests/plugins/Unity/Launcher/no-name.desktop → tests/plugins/Unity/Launcher/applications/no-name.desktoprenamed+1
@@ -1,2 +1,3 @@
1[Desktop Entry]
1[Desktop Entry]
2+Type=Application
2Icon=no-name
3Icon=no-name
tests/plugins/Unity/Launcher/rel-icon.desktop → tests/plugins/Unity/Launcher/applications/rel-icon.desktoprenamed+1
@@ -1,3 +1,4 @@
1[Desktop Entry]
1[Desktop Entry]
2+Type=Application
2Name=Relative Icon
3Name=Relative Icon
3Icon=rel-icon.svg
4Icon=rel-icon.svg
tests/plugins/Unity/Launcher/rel-icon.svg → tests/plugins/Unity/Launcher/applications/rel-icon.svgrenamed

The content is the same.

tests/plugins/Unity/Launcher/launchermodeltest.cpp+19−22
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright 2013-2015 Canonical Ltd.
2+ * Copyright 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 Lesser General Public License as published by
5 * it under the terms of the GNU Lesser General Public License as published by
@@ -12,9 +12,6 @@
12 *
12 *
13 * You should have received a copy of the GNU Lesser General Public License
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Michael Zanetti <michael.zanetti@canonical.com>
18 */
15 */
19
16
20// unity-api
17// unity-api
@@ -177,7 +174,7 @@ private Q_SLOTS:
177 appManager->addApplication(new MockApp("abs-icon"));
174 appManager->addApplication(new MockApp("abs-icon"));
178 QCOMPARE(launcherModel->rowCount(QModelIndex()), 1);
175 QCOMPARE(launcherModel->rowCount(QModelIndex()), 1);
179
176
180− appManager->addApplication(new MockApp("no-icon"));
177+ appManager->addApplication(new MockApp("rel-icon"));
181 QCOMPARE(launcherModel->rowCount(QModelIndex()), 2);
178 QCOMPARE(launcherModel->rowCount(QModelIndex()), 2);
182
179
183 launcherModel->m_settings->setStoredApplications(QStringList());
180 launcherModel->m_settings->setStoredApplications(QStringList());
@@ -199,6 +196,10 @@ private Q_SLOTS:
199 QString::fromUtf8(g_get_user_name()));
196 QString::fromUtf8(g_get_user_name()));
200 QVERIFY(removeReply.isValid());
197 QVERIFY(removeReply.isValid());
201 QCOMPARE(removeReply.value(), true);
198 QCOMPARE(removeReply.value(), true);
199+
200+ // Some tests move the directory, so lets move it back if so.
201+ // But this will usually fail.
202+ QFile::rename("applications.old", "applications");
202 }
203 }
203
204
204 void testMove() {
205 void testMove() {
@@ -331,7 +332,7 @@ private Q_SLOTS:
331
332
332 void testApplicationRunning() {
333 void testApplicationRunning() {
333 launcherModel->pin("abs-icon");
334 launcherModel->pin("abs-icon");
334− launcherModel->pin("no-icon");
335+ launcherModel->pin("rel-icon");
335
336
336 QCOMPARE(launcherModel->get(0)->running(), true);
337 QCOMPARE(launcherModel->get(0)->running(), true);
337 QCOMPARE(launcherModel->get(1)->running(), true);
338 QCOMPARE(launcherModel->get(1)->running(), true);
@@ -340,7 +341,7 @@ private Q_SLOTS:
340 QCOMPARE(launcherModel->get(0)->running(), false);
341 QCOMPARE(launcherModel->get(0)->running(), false);
341 QCOMPARE(launcherModel->get(1)->running(), true);
342 QCOMPARE(launcherModel->get(1)->running(), true);
342
343
343− appManager->stopApplication("no-icon");
344+ appManager->stopApplication("rel-icon");
344 QCOMPARE(launcherModel->get(0)->running(), false);
345 QCOMPARE(launcherModel->get(0)->running(), false);
345 QCOMPARE(launcherModel->get(1)->running(), false);
346 QCOMPARE(launcherModel->get(1)->running(), false);
346 }
347 }
@@ -355,7 +356,7 @@ private Q_SLOTS:
355 QCOMPARE(launcherModel->get(0)->focused(), true);
356 QCOMPARE(launcherModel->get(0)->focused(), true);
356 QCOMPARE(launcherModel->get(1)->focused(), false);
357 QCOMPARE(launcherModel->get(1)->focused(), false);
357
358
358− appManager->focusApplication("no-icon");
359+ appManager->focusApplication("rel-icon");
359 QCOMPARE(launcherModel->rowCount(QModelIndex()), 2);
360 QCOMPARE(launcherModel->rowCount(QModelIndex()), 2);
360 QCOMPARE(launcherModel->get(0)->focused(), false);
361 QCOMPARE(launcherModel->get(0)->focused(), false);
361 QCOMPARE(launcherModel->get(1)->focused(), true);
362 QCOMPARE(launcherModel->get(1)->focused(), true);
@@ -377,8 +378,8 @@ private Q_SLOTS:
377 QCOMPARE(launcherModel->rowCount(), 2);
378 QCOMPARE(launcherModel->rowCount(), 2);
378
379
379 // stop the second one keeping it pinned so that it doesn't go away
380 // stop the second one keeping it pinned so that it doesn't go away
380− launcherModel->pin("no-icon");
381+ launcherModel->pin("rel-icon");
381− appManager->stopApplication("no-icon");
382+ appManager->stopApplication("rel-icon");
382
383
383 // find the first Quit item, should be there
384 // find the first Quit item, should be there
384 QuickListModel *model = qobject_cast<QuickListModel*>(launcherModel->get(0)->quickList());
385 QuickListModel *model = qobject_cast<QuickListModel*>(launcherModel->get(0)->quickList());
@@ -407,7 +408,7 @@ private Q_SLOTS:
407 // first app should be gone...
408 // first app should be gone...
408 QCOMPARE(launcherModel->rowCount(QModelIndex()), 1);
409 QCOMPARE(launcherModel->rowCount(QModelIndex()), 1);
409 // ... the second app (now at index 0) should still be there, pinned and stopped
410 // ... the second app (now at index 0) should still be there, pinned and stopped
410− QCOMPARE(launcherModel->get(0)->appId(), QStringLiteral("no-icon"));
411+ QCOMPARE(launcherModel->get(0)->appId(), QStringLiteral("rel-icon"));
411 QCOMPARE(launcherModel->get(0)->pinned(), true);
412 QCOMPARE(launcherModel->get(0)->pinned(), true);
412 QCOMPARE(launcherModel->get(0)->running(), false);
413 QCOMPARE(launcherModel->get(0)->running(), false);
413 }
414 }
@@ -602,17 +603,16 @@ private Q_SLOTS:
602
603
603 // pin both apps
604 // pin both apps
604 launcherModel->pin("abs-icon");
605 launcherModel->pin("abs-icon");
605− launcherModel->pin("no-icon");
606+ launcherModel->pin("rel-icon");
606 // close both apps
607 // close both apps
607 appManager->removeApplication(0);
608 appManager->removeApplication(0);
608 appManager->removeApplication(0);
609 appManager->removeApplication(0);
609
610
610 // "delete" the .desktop files
611 // "delete" the .desktop files
611− QString oldCurrent = QDir::currentPath();
612 if (deleted) {
612 if (deleted) {
613 // In testing mode, the launcher searches the current dir for the sample .desktop file
613 // In testing mode, the launcher searches the current dir for the sample .desktop file
614− // We can make that fail by changing the current dir
614+ // We can make that fail by moving the applications dir
615− QDir::setCurrent("..");
615+ QFile::rename("applications", "applications.old");
616 }
616 }
617
617
618 // Call refresh
618 // Call refresh
@@ -623,9 +623,6 @@ private Q_SLOTS:
623 QCOMPARE(reply.isValid(), true);
623 QCOMPARE(reply.isValid(), true);
624
624
625 QCOMPARE(launcherModel->rowCount(), deleted ? 0 : 2);
625 QCOMPARE(launcherModel->rowCount(), deleted ? 0 : 2);
626−
627− // Restoring current dir
628− QDir::setCurrent(oldCurrent);
629 }
626 }
630
627
631 void testSettings() {
628 void testSettings() {
@@ -637,7 +634,7 @@ private Q_SLOTS:
637
634
638 // pin both apps
635 // pin both apps
639 launcherModel->pin("abs-icon");
636 launcherModel->pin("abs-icon");
640− launcherModel->pin("no-icon");
637+ launcherModel->pin("rel-icon");
641 QCOMPARE(spy.count(), 0);
638 QCOMPARE(spy.count(), 0);
642
639
643 // Now settings should have 2 apps
640 // Now settings should have 2 apps
@@ -659,9 +656,9 @@ private Q_SLOTS:
659 QCOMPARE(launcherModel->rowCount(), 1);
656 QCOMPARE(launcherModel->rowCount(), 1);
660
657
661 // Add them back but in reverse order
658 // Add them back but in reverse order
662− settings->simulateDConfChanged(QStringList() << "no-icon" << "abs-icon");
659+ settings->simulateDConfChanged(QStringList() << "rel-icon" << "abs-icon");
663 QCOMPARE(launcherModel->rowCount(), 2);
660 QCOMPARE(launcherModel->rowCount(), 2);
664− QCOMPARE(launcherModel->get(0)->appId(), QString("no-icon"));
661+ QCOMPARE(launcherModel->get(0)->appId(), QString("rel-icon"));
665 QCOMPARE(launcherModel->get(1)->appId(), QString("abs-icon"));
662 QCOMPARE(launcherModel->get(1)->appId(), QString("abs-icon"));
666 QCOMPARE(spy.count(), 2);
663 QCOMPARE(spy.count(), 2);
667 }
664 }
@@ -671,7 +668,7 @@ private Q_SLOTS:
671 QCOMPARE(launcherModel->rowCount(), getASConfig().count());
668 QCOMPARE(launcherModel->rowCount(), getASConfig().count());
672
669
673 int oldCount = launcherModel->rowCount();
670 int oldCount = launcherModel->rowCount();
674− appManager->addApplication(new MockApp("rel-icon"));
671+ appManager->addApplication(new MockApp("click-icon"));
675 QCOMPARE(launcherModel->rowCount(), oldCount + 1);
672 QCOMPARE(launcherModel->rowCount(), oldCount + 1);
676 QCOMPARE(launcherModel->rowCount(), getASConfig().count());
673 QCOMPARE(launcherModel->rowCount(), getASConfig().count());
677 }
674 }
tests/plugins/Unity/Launcher/no-icon.desktopdeleted−2
@@ -1,2 +0,0 @@
1−[Desktop Entry]
2−Name=No Icon
tests/qmltests/Dash/Previews/tst_PreviewZoomableImage.qml+5
@@ -74,6 +74,11 @@ Rectangle {
74 waitForRendering(zoomableImage);
74 waitForRendering(zoomableImage);
75 overlay = findChild(zoomableImage.rootItem, "overlay");
75 overlay = findChild(zoomableImage.rootItem, "overlay");
76 waitForRendering(overlay);
76 waitForRendering(overlay);
77+
78+ // Make sure all the lazyImage transitions have finished
79+ for (var i in lazyImage.transitions) {
80+ tryCompare(lazyImage.transitions[i], "running", false);
81+ }
77 }
82 }
78
83
79 function cleanup() {
84 function cleanup() {
tests/qmltests/Panel/Indicators/tst_IndicatorMenuItemFactory.qml+1−6
@@ -396,7 +396,7 @@ Item {
396
396
397 function test_create_appointmentMenu_data() {
397 function test_create_appointmentMenu_data() {
398 return [
398 return [
399− {label: "testLabel1", enabled: true, icon: "file:///testIcon1", color: Qt.rgba(0, 0, 0, 0),
399+ {label: "testLabel1", enabled: true, icon: "file:///testIcon1", color: Qt.rgba(1, 2, 3, 0),
400 time: new Date(2014, 04, 14), timeFormat: "%a %d %b %l:%M %p"},
400 time: new Date(2014, 04, 14), timeFormat: "%a %d %b %l:%M %p"},
401 {label: "testLabel2", enabled: false, icon: "file:///testIcon2", color: Qt.rgba(1, 0, 0, 0),
401 {label: "testLabel2", enabled: false, icon: "file:///testIcon2", color: Qt.rgba(1, 0, 0, 0),
402 time: new Date(2015, 11, 31), timeFormat: "%A" },
402 time: new Date(2015, 11, 31), timeFormat: "%A" },
@@ -594,9 +594,7 @@ Item {
594 // ModemInfoItem gets all it's data through the actions.
594 // ModemInfoItem gets all it's data through the actions.
595 return [
595 return [
596 {
596 {
597− label: "",
598 enabled: true,
597 enabled: true,
599− checked: false,
600 statusLabelAction: "action::statusLabel",
598 statusLabelAction: "action::statusLabel",
601 statusIconAction: "action::statusIcon",
599 statusIconAction: "action::statusIcon",
602 connectivityIconAction: "action::connectivityIcon",
600 connectivityIconAction: "action::connectivityIcon",
@@ -609,9 +607,7 @@ Item {
609
607
610 function test_create_modemInfoItem(data) {
608 function test_create_modemInfoItem(data) {
611 menuData.type = "com.canonical.indicator.network.modeminfoitem";
609 menuData.type = "com.canonical.indicator.network.modeminfoitem";
612− menuData.label = data.label;
613 menuData.sensitive = data.enabled;
610 menuData.sensitive = data.enabled;
614− menuData.isToggled = data.checked;
615 menuData.ext = {
611 menuData.ext = {
616 'xCanonicalModemStatusLabelAction': data.statusLabelAction,
612 'xCanonicalModemStatusLabelAction': data.statusLabelAction,
617 'xCanonicalModemStatusIconAction': data.statusIconAction,
613 'xCanonicalModemStatusIconAction': data.statusIconAction,
@@ -625,7 +621,6 @@ Item {
625 loader.sourceComponent = factory.load(menuData);
621 loader.sourceComponent = factory.load(menuData);
626 tryCompareFunction(function() { return loader.item != undefined; }, true);
622 tryCompareFunction(function() { return loader.item != undefined; }, true);
627 compare(loader.item.objectName, "modemInfoItem", "Should have created a modem info item.");
623 compare(loader.item.objectName, "modemInfoItem", "Should have created a modem info item.");
628− compare(loader.item.text, data.label, "Label does not match data");
629
624
630 compare(loader.item.statusLabelAction.name, data.statusLabelAction, "StatusLabel action incorrect");
625 compare(loader.item.statusLabelAction.name, data.statusLabelAction, "StatusLabel action incorrect");
631 compare(loader.item.statusIconAction.name, data.statusIconAction, "StatusIcon action incorrect");
626 compare(loader.item.statusIconAction.name, data.statusIconAction, "StatusIcon action incorrect");
tests/qmltests/Panel/tst_PanelMenuPage.qml+1−7
@@ -40,13 +40,7 @@ Item {
40 menuModel: unityMenuModel
40 menuModel: unityMenuModel
41 submenuIndex: 0
41 submenuIndex: 0
42
42
43− factory: factoryComponent
44− }
45−
46− Component {
47− id: factoryComponent
48−
49− Object {
43+ factory: Object {
50 function load(model) {
44 function load(model) {
51 return standardMenuComponent;
45 return standardMenuComponent;
52 }
46 }
tests/qmltests/Stage/tst_DesktopStage.qml+16
@@ -776,5 +776,21 @@ Item {
776
776
777 tryCompare(mouseEaterSpy, "count", 0);
777 tryCompare(mouseEaterSpy, "count", 0);
778 }
778 }
779+
780+ // regression test for https://bugs.launchpad.net/ubuntu/+source/unity8/+bug/1627281
781+ function test_doubleTapToMaximizeWindow() {
782+ var dialerAppDelegate = startApplication("dialer-app");
783+ verify(dialerAppDelegate);
784+ var decoration = findChild(dialerAppDelegate, "appWindowDecoration");
785+ verify(decoration);
786+
787+ // simulate a double tap, with a slight erroneous move in between those 2 taps
788+ tap(decoration);
789+ touchPress(decoration);
790+ touchMove(decoration, decoration.width/2, decoration.height/2 - 10)
791+ touchRelease(decoration);
792+
793+ tryCompare(dialerAppDelegate, "state", "maximized");
794+ }
779 }
795 }
780}
796}
tests/qmltests/tst_Shell.qml+28
@@ -2739,5 +2739,33 @@ Rectangle {
2739 tryCompare(dashAppDelegate, "y", initialY);
2739 tryCompare(dashAppDelegate, "y", initialY);
2740 SurfaceManager.inputMethodSurface.state = oldOSKState;
2740 SurfaceManager.inputMethodSurface.state = oldOSKState;
2741 }
2741 }
2742+
2743+ function test_cursorHidingWithFullscreenApp() {
2744+ loadShell("desktop");
2745+ shell.usageScenario = "desktop";
2746+ waitForRendering(shell);
2747+ swipeAwayGreeter();
2748+
2749+ // load some fullscreen app
2750+ var cameraSurfaceId = topLevelSurfaceList.nextId;
2751+ var cameraApp = ApplicationManager.startApplication("camera-app");
2752+ waitUntilAppWindowIsFullyLoaded(cameraSurfaceId);
2753+
2754+ var cursor = findChild(shell, "cursor");
2755+ verify(cursor);
2756+ tryCompare(cursor, "opacity", 1);
2757+
2758+ // let the timer kick in and verify the cursor got hidden
2759+ wait(3000);
2760+ tryCompare(cursor, "opacity", 0);
2761+
2762+ // simulate moving the mouse, check the cursor is visible again
2763+ cursor.mouseMoved();
2764+ tryCompare(cursor, "opacity", 1);
2765+
2766+ // let the timer kick in again and verify the cursor got hidden
2767+ wait(3000);
2768+ tryCompare(cursor, "opacity", 0);
2769+ }
2742 }
2770 }
2743}
2771}