on xenial help sign in
Merge trunk
commitbde717cb340be46bc13db6ee10dc10a7d82e747c authorJosh Arenson <joshua.arenson@canonical.com> dateWed 22 Feb 2017, 08:41 (10 years ago) parent19a9ecd879cd78
160 files changed+2527−920
CMakeLists.txt+2−1 debian/changelog+56 debian/control+3−3 plugins/Greeter/Unity/Launcher/CMakeLists.txt−1 plugins/Ubuntu/Gestures/TouchGestureArea.cpp−5 plugins/Unity/Launcher/CMakeLists.txt−1 plugins/Utils/CMakeLists.txt+1 plugins/Utils/appdrawerproxymodel.cpp+2−2 plugins/Utils/expressionfiltermodel.cpp+49 plugins/Utils/expressionfiltermodel.h+42 plugins/Utils/plugin.cpp+2 plugins/WindowManager/TopLevelWindowModel.cpp+36−28 plugins/WindowManager/TopLevelWindowModel.h+2 plugins/WindowManager/Window.h−1 po/aa.po+5−5 po/am.po+9−6 po/ar.po+5−5 po/ast.po+9−6 po/az.po+5−5 po/be.po+5−5 po/bg.po+5−5 po/bn.po+5−5 po/br.po+9−6 po/bs.po+5−5 po/ca.po+9−6 po/ca@valencia.po+5−5 po/ce.po+5−5 po/ckb.po+5−5 po/co.po+9−6 po/cs.po+5−5 po/cy.po+5−5 po/da.po+5−5 po/de.po+9−6 po/el.po+9−6 po/en_AU.po+9−6 po/en_GB.po+26−23 po/eo.po+5−5 po/es.po+9−6 po/et.po+5−5 po/eu.po+5−5 po/fa.po+9−6 po/fi.po+9−6 po/fo.po+5−5 po/fr.po+21−16 po/ga.po+5−5 po/gd.po+10−7 po/gl.po+9−6 po/gv.po+5−5 po/he.po+5−5 po/hi.po+5−5 po/hr.po+9−6 po/hu.po+9−6 po/hy.po+5−5 po/ia.po+9−6 po/id.po+5−5 po/is.po+5−5 po/it.po+18−15 po/ja.po+5−5 po/km.po+5−5 po/kn.po+5−5 po/ko.po+5−5 po/ku.po+5−5 po/ky.po+5−5 po/lo.po+5−5 po/lt.po+5−5 po/lv.po+5−5 po/ml.po+5−5 po/mr.po+5−5 po/ms.po+9−6 po/my.po+5−5 po/nb.po+9−6 po/ne.po+5−5 po/nl.po+9−6 po/nn.po+5−5 po/oc.po+10−7 po/or.po+5−5 po/pa.po+5−5 po/pl.po+9−6 po/pt.po+9−6 po/pt_BR.po+5−5 po/ro.po+5−5 po/ru.po+8−8 po/shn.po+5−5 po/si.po+5−5 po/sk.po+9−6 po/sl.po+9−6 po/sq.po+5−5 po/sr.po+9−6 po/sv.po+9−6 po/sw.po+5−5 po/ta.po+5−5 po/te.po+5−5 po/th.po+5−5 po/tr.po+9−6 po/ug.po+5−5 po/uk.po+9−6 po/unity8.pot+3−3 po/ur.po+5−5 po/uz.po+5−5 po/vi.po+5−5 po/wo.po+5−5 po/xh.po+5−5 po/zh_CN.po+9−6 po/zh_HK.po+5−5 po/zh_TW.po+5−5 qml/ApplicationMenus/ApplicationMenusLimits.qml+24 qml/ApplicationMenus/MenuBar.qml+279−129 qml/ApplicationMenus/MenuItem.qml+8−12 qml/ApplicationMenus/MenuNavigator.qml+23 qml/ApplicationMenus/MenuPopup.qml+116−25 qml/ApplicationMenus/qmldir+1 qml/Components/EdgeBarrier.qml+1 qml/Components/EdgeBarrierController.qml+1 qml/Components/WindowControlButtons.qml+2 qml/Launcher/Drawer.qml+8−1 qml/Launcher/Launcher.qml+3−2 qml/Launcher/LauncherPanel.qml+3 qml/Panel/Panel.qml+4−2 qml/Shell.qml+31−2 qml/Stage/ChildWindow.qml+159 qml/Stage/ChildWindowRepeater.qml+28 qml/Stage/ChildWindowTree.qml+127 qml/Stage/DecoratedWindow.qml+1−2 qml/Stage/MoveHandler.qml+23−18 qml/Stage/Stage.qml+113−65 qml/Stage/WindowControlsOverlay.qml+21−24 qml/Stage/WindowDecoration.qml+1 qml/Stage/WindowResizeArea.qml+3−2 qml/Tutorial/TutorialLeftLong.qml+1−1 tests/mocks/Unity/Application/ApplicationInfo.cpp+9−1 tests/mocks/Unity/Application/ApplicationInfo.h+3 tests/mocks/Unity/Application/ApplicationManager.cpp+9 tests/mocks/Unity/Application/MirSurface.cpp+43 tests/mocks/Unity/Application/MirSurface.h+11 tests/mocks/Unity/Application/MirSurfaceItem.cpp+19−4 tests/mocks/Unity/Application/MirSurfaceListModel.h−1 tests/mocks/Unity/Application/SurfaceManager.cpp+19−13 tests/mocks/Unity/Application/SurfaceManager.h+3−1 tests/mocks/Unity/Application/VirtualKeyboard.cpp+5−4 tests/mocks/Unity/Application/resources/Kate.qml+49 tests/mocks/Unity/Application/resources/KateDialog.qml+48 tests/mocks/Unity/Application/resources/KateMenu.qml+41 tests/mocks/Unity/Application/resources/surfaces.qrc+3 tests/mocks/Unity/CMakeLists.txt+6 tests/mocks/Unity/Launcher/CMakeLists.txt−2 tests/mocks/Utils/CMakeLists.txt+1 tests/mocks/Utils/plugin.cpp+2 tests/plugins/Greeter/Unity/Launcher/CMakeLists.txt−2 tests/plugins/Unity/Launcher/CMakeLists.txt−1 tests/qmltests/ApplicationMenus/tst_MenuBar.qml+85−9 tests/qmltests/ApplicationMenus/tst_MenuPopup.qml+14 tests/qmltests/Launcher/tst_Launcher.qml+13 tests/qmltests/Stage/ApplicationCheckBox.qml+1−1 tests/qmltests/Stage/tst_DesktopStage.qml+193−10 tests/qmltests/Stage/tst_PhoneStage.qml+4−5 tests/qmltests/Stage/tst_WindowResizeArea.qml+10 tests/qmltests/Tutorial/tst_Tutorial.qml+2−2 tests/qmltests/tst_OrientedShell.qml+2−1 tests/qmltests/tst_Shell.qml+132−1 tests/utils/modules/Unity/Test/UnityTestCase.qml−9
CMakeLists.txt+2−1
@@ -70,10 +70,11 @@ find_package(Qt5DBus 5.6 REQUIRED)
7070find_package(Qt5Concurrent 5.6 REQUIRED)
7171find_package(Qt5Sql 5.6 REQUIRED)
7272
73−pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=25)
73+pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=26)
7474pkg_check_modules(GEONAMES REQUIRED geonames>=0.2)
7575pkg_check_modules(GIO REQUIRED gio-2.0>=2.32)
7676pkg_check_modules(GLIB REQUIRED glib-2.0>=2.32)
77+pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=11)
7778pkg_check_modules(QMENUMODEL REQUIRED qmenumodel)
7879pkg_check_modules(GD3 REQUIRED gnome-desktop-3.0)
7980pkg_check_modules(UAL REQUIRED ubuntu-app-launch-2)
debian/changelog+56
@@ -1,3 +1,59 @@
1+unity8 (8.15+17.04.20170216.1-0ubuntu1) zesty; urgency=medium
2+
3+ [ Albert Astals Cid ]
4+ * Make menus items close the menu when clicking on them (LP: #1657082,
5+ #1657399)
6+ * Clicking on an open menu closes it + test
7+ * Make the menus and submenus do not go outside the screen when
8+ popping out
9+ * Auto open submenus on hover (LP: #1657085)
10+ * Make the double click on a menu not be maximize the window below
11+ (LP: #1657079)
12+ * Make the MenuBar InverseMouseArea eat hover events when there's a
13+ popup open (LP: #1657763)
14+ * Make double click on the window decoration maximize (LP: #1657758)
15+ * Eat hover events when the launcher quicklist is open (LP: #1640776)
16+ * Remove TODO now that we require Qt > 5.5
17+ * Serialize two make targets that want to cp to the same target file
18+ (LP: #1660576)
19+ * Remove variable that is always false (LP: #1585910)
20+
21+ [ Daniel d'Andrada ]
22+ * Consolidate launcher API checks
23+
24+ [ Lukáš Tinkl ]
25+ * Fixes for activating minimized windows and restoring fullscreen ones
26+ (LP: #1656808, #1658937, #1658938)
27+
28+ [ Michael Zanetti ]
29+ * move right edge push area up some levels so it can be used on top of
30+ the indicators
31+ * fix minimizing/restoring transitions (LP: #1658936)
32+ * fix some glitches with spread positioning
33+ * fix jumpy animation when closing an item from the spread
34+ * Show the wallpaper while the focused app is moving in staged mode
35+ (LP: #1648251)
36+ * Update the tutorial to mention the app drawer instead of the dash on
37+ long left edge swipe (LP: #1658932)
38+ * prevent hiding the launcher when the mouse hover event is eaten by
39+ the EdgePushArea (LP: #1657045)
40+ * properly invalidate the whole model (LP: #1658190)
41+ * stabilize OrientedShell test (LP: #1658994)
42+
43+ [ Nick Dedekind ]
44+ * Added overflow support to application menus.
45+ * Updated menu colors
46+
47+ -- Michał Sawicz <michal.sawicz@canonical.com> Thu, 16 Feb 2017 13:49:18 +0000
48+
49+unity8 (8.15+17.04.20170206-0ubuntu1) zesty; urgency=medium
50+
51+ [ Daniel d'Andrada ]
52+ * Initial support for child windows (menus, dialogs, tooltips) (LP:
53+ #1543467, #1591384, #1656727)
54+
55+ -- Albert Astals Cid <albert.astals@canonical.com> Mon, 06 Feb 2017 09:12:23 +0000
56+
157unity8 (8.15+17.04.20170131.1-0ubuntu1) zesty; urgency=medium
258
359 [ Rodney Dawes ]
debian/control+3−3
@@ -38,7 +38,7 @@ Build-Depends: cmake,
3838 libubuntugestures5-private-dev (>= 1.3.2030),
3939 libudev-dev,
4040 libudm-common-dev,
41− libunity-api-dev (>= 8.1),
41+ libunity-api-dev (>= 8.2),
4242 libusermetricsoutput1-dev,
4343# Need those X11 libs touch emulation from mouse events in manual QML tests on a X11 desktop
4444 libx11-dev[!arm64 !armhf],
@@ -162,7 +162,7 @@ Depends: qml-module-qtquick-layouts,
162162 qttranslations5-l10n,
163163 ubuntu-thumbnailer-impl-0,
164164 ubuntu-wallpapers,
165− unity-application-impl-23,
165+ unity-application-impl-26,
166166 unity-notifications-impl-3,
167167 unity-plugin-scopes | unity-scopes-impl,
168168 unity-scopes-impl-12,
@@ -212,7 +212,7 @@ Depends: dbus-test-runner,
212212 ${misc:Depends},
213213 ${shlibs:Depends},
214214Provides: unity-application-impl,
215− unity-application-impl-23,
215+ unity-application-impl-26,
216216 unity8-fake-env,
217217Replaces: unity8-autopilot (<< 8.02+15.04.20150422-0ubuntu1),
218218 unity8-fake-env,
plugins/Greeter/Unity/Launcher/CMakeLists.txt−1
@@ -1,4 +1,3 @@
1−pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=11)
21pkg_check_modules(GSETTINGS_QT REQUIRED gsettings-qt)
32
43add_definitions(-DSM_BUSNAME=systemBus)
plugins/Ubuntu/Gestures/TouchGestureArea.cpp−5
@@ -735,7 +735,6 @@ void TouchGestureArea::resyncCachedTouchPoints()
735735 bool added = false;
736736 bool ended = false;
737737 bool moved = false;
738− bool wantsDrag = false;
739738
740739 // list of deletes
741740 QMutableHashIterator<int, GestureTouchPoint*> removeIter(m_cachedTouchPoints);
@@ -765,10 +764,6 @@ void TouchGestureArea::resyncCachedTouchPoints()
765764 }
766765 }
767766
768− if (wantsDrag && !dragging()) {
769− setDragging(true);
770− }
771−
772767 if (ended) {
773768 if (m_cachedTouchPoints.isEmpty()) {
774769 if (!dragging()) Q_EMIT clicked();
plugins/Unity/Launcher/CMakeLists.txt−1
@@ -1,4 +1,3 @@
1−pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=11)
21pkg_check_modules(GSETTINGS_QT REQUIRED gsettings-qt)
32
43add_definitions(-DSM_BUSNAME=systemBus)
plugins/Utils/CMakeLists.txt+1
@@ -35,6 +35,7 @@ set(QMLPLUGIN_SRC
3535 globalfunctions.cpp
3636 URLDispatcher.cpp
3737 tabfocusfence.cpp
38+ expressionfiltermodel.cpp
3839 plugin.cpp
3940 )
4041
plugins/Utils/appdrawerproxymodel.cpp+2−2
@@ -43,8 +43,8 @@ void AppDrawerProxyModel::setSource(QAbstractItemModel *source)
4343 m_source = source;
4444 setSourceModel(m_source);
4545 setSortRole(m_sortBy == SortByAToZ ? AppDrawerModelInterface::RoleName : AppDrawerModelInterface::RoleUsage);
46− connect(m_source, &QAbstractItemModel::rowsRemoved, this, &AppDrawerProxyModel::invalidateFilter);
47− connect(m_source, &QAbstractItemModel::rowsInserted, this, &AppDrawerProxyModel::invalidateFilter);
46+ connect(m_source, &QAbstractItemModel::rowsRemoved, this, &AppDrawerProxyModel::invalidate);
47+ connect(m_source, &QAbstractItemModel::rowsInserted, this, &AppDrawerProxyModel::invalidate);
4848 Q_EMIT sourceChanged();
4949 }
5050}
plugins/Utils/expressionfiltermodel.cppnew file+49
@@ -0,0 +1,49 @@
1+/*
2+ * Copyright (C) 2017 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "expressionfiltermodel.h"
18+
19+ExpressionFilterModel::ExpressionFilterModel(QObject *parent)
20+ : UnitySortFilterProxyModelQML(parent)
21+{
22+}
23+
24+QJSValue ExpressionFilterModel::matchExpression() const
25+{
26+ return m_matchExpression;
27+}
28+
29+void ExpressionFilterModel::setMatchExpression(const QJSValue &value)
30+{
31+ m_matchExpression = value;
32+ invalidateFilter();
33+}
34+
35+bool
36+ExpressionFilterModel::filterAcceptsRow(int sourceRow,
37+ const QModelIndex &sourceParent) const
38+{
39+ if (m_matchExpression.isCallable()) {
40+ QJSValueList args;
41+ args << sourceRow;
42+ QJSValue ret = m_matchExpression.call(args);
43+ if (ret.isBool()) {
44+ return ret.toBool();
45+ }
46+ }
47+
48+ return UnitySortFilterProxyModelQML::filterAcceptsRow(sourceRow, sourceParent);
49+}
plugins/Utils/expressionfiltermodel.hnew file+42
@@ -0,0 +1,42 @@
1+/*
2+ * Copyright (C) 2017 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef EXPRESSIONFILTERMODEL_H
18+#define EXPRESSIONFILTERMODEL_H
19+
20+#include "unitysortfilterproxymodelqml.h"
21+#include <QJSValue>
22+
23+class ExpressionFilterModel : public UnitySortFilterProxyModelQML
24+{
25+ Q_OBJECT
26+ Q_PROPERTY(QJSValue matchExpression READ matchExpression WRITE setMatchExpression NOTIFY matchExpressionChanged)
27+public:
28+ explicit ExpressionFilterModel(QObject *parent = 0);
29+
30+ bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
31+
32+ QJSValue matchExpression() const;
33+ void setMatchExpression(const QJSValue& value);
34+
35+Q_SIGNALS:
36+ void matchExpressionChanged();
37+
38+private:
39+ mutable QJSValue m_matchExpression;
40+};
41+
42+#endif // EXPRESSIONFILTERMODEL_H
plugins/Utils/plugin.cpp+2
@@ -41,6 +41,7 @@
4141#include "URLDispatcher.h"
4242#include "appdrawerproxymodel.h"
4343#include "tabfocusfence.h"
44+#include "expressionfiltermodel.h"
4445
4546static QObject *createWindowStateStorage(QQmlEngine *engine, QJSEngine *scriptEngine)
4647{
@@ -86,4 +87,5 @@ void UtilsPlugin::registerTypes(const char *uri)
8687 qmlRegisterType<URLDispatcher>(uri, 0, 1, "URLDispatcher");
8788 qmlRegisterType<AppDrawerProxyModel>(uri, 0, 1, "AppDrawerProxyModel");
8889 qmlRegisterType<TabFocusFenceItem>(uri, 0, 1, "TabFocusFence");
90+ qmlRegisterType<ExpressionFilterModel>(uri, 0, 1, "ExpressionFilterModel");
8991}
plugins/WindowManager/TopLevelWindowModel.cpp+36−28
@@ -176,18 +176,13 @@ void TopLevelWindowModel::prependSurfaceHelper(unityapi::MirSurfaceInterface *su
176176 // No point in signaling anything if we're resetting the whole model
177177 }
178178
179− int id = generateId();
180− Window *window = new Window(id, this);
181− if (surface) {
182− window->setSurface(surface);
183− }
179+ Window *window = createWindow(surface);
180+
184181 m_windowModel.prepend(ModelEntry(window, application));
185182 if (surface) {
186183 connectSurface(surface);
187184 }
188185
189− connectWindow(window);
190−
191186 if (m_modelState == InsertingState) {
192187 endInsertRows();
193188 Q_EMIT countChanged();
@@ -322,34 +317,47 @@ void TopLevelWindowModel::onSurfaceDestroyed(unityapi::MirSurfaceInterface *surf
322317 }
323318}
324319
320+Window *TopLevelWindowModel::createWindow(unityapi::MirSurfaceInterface *surface)
321+{
322+ int id = generateId();
323+ Window *qmlWindow = new Window(id, this);
324+ connectWindow(qmlWindow);
325+ if (surface) {
326+ qmlWindow->setSurface(surface);
327+ }
328+ return qmlWindow;
329+}
330+
325331void TopLevelWindowModel::onSurfaceCreated(unityapi::MirSurfaceInterface *surface)
326332{
327333 DEBUG_MSG << "(" << surface << ")";
328− if (surface->type() == Mir::InputMethodType) {
329− int id = generateId();
330− Window *qmlWindow = new Window(id, this);
331− connectWindow(qmlWindow);
332− qmlWindow->setSurface(surface);
333− setInputMethodWindow(qmlWindow);
334+
335+ if (surface->parentSurface()) {
336+ // Wrap it in a Window so that we keep focusedWindow() up to date.
337+ Window *window = createWindow(surface);
338+ connect(surface, &QObject::destroyed, window, [=](){
339+ window->setSurface(nullptr);
340+ window->deleteLater();
341+ });
334342 } else {
335− auto application = m_applicationManager->findApplicationWithSurface(surface);
336− if (application) {
337− prependSurface(surface, application);
343+ if (surface->type() == Mir::InputMethodType) {
344+ setInputMethodWindow(createWindow(surface));
338345 } else {
339− // Must be a prompt session. No need to do add it as a prompt surface is not top-level.
340− // It will show up in the ApplicationInfoInterface::promptSurfaceList of some application.
341− // Still wrap it in a Window though, so that we keep focusedWindow() up to date.
342− int id = generateId();
343− Window *promptWindow = new Window(id, this);
344− connectWindow(promptWindow);
345− promptWindow->setSurface(surface);
346− connect(surface, &QObject::destroyed, promptWindow, [=](){
347− promptWindow->setSurface(nullptr);
348− promptWindow->deleteLater();
349− });
346+ auto *application = m_applicationManager->findApplicationWithSurface(surface);
347+ if (application) {
348+ prependSurface(surface, application);
349+ } else {
350+ // Must be a prompt session. No need to do add it as a prompt surface is not top-level.
351+ // It will show up in the ApplicationInfoInterface::promptSurfaceList of some application.
352+ // Still wrap it in a Window though, so that we keep focusedWindow() up to date.
353+ Window *promptWindow = createWindow(surface);
354+ connect(surface, &QObject::destroyed, promptWindow, [=](){
355+ promptWindow->setSurface(nullptr);
356+ promptWindow->deleteLater();
357+ });
358+ }
350359 }
351360 }
352− // TODO: handle surfaces that are neither top-level windows nor input method. eg: child dialogs, popups, menus
353361}
354362
355363void TopLevelWindowModel::removeAt(int index)
plugins/WindowManager/TopLevelWindowModel.h+2
@@ -220,6 +220,8 @@ private:
220220
221221 void activateTopMostWindowWithoutId(int forbiddenId);
222222
223+ Window *createWindow(unity::shell::application::MirSurfaceInterface *surface);
224+
223225 struct ModelEntry {
224226 ModelEntry() {}
225227 ModelEntry(Window *window,
plugins/WindowManager/Window.h−1
@@ -32,7 +32,6 @@ namespace unity {
3232 }
3333}
3434
35−
3635Q_DECLARE_LOGGING_CATEGORY(UNITY_WINDOW)
3736
3837/**
po/aa.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2016-02-12 10:18+0000\n"
1212"Last-Translator: Charif AYFARAH <ayfarah@ymail.com>\n"
1313"Language-Team: Afar <aa@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:54+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -521,7 +521,7 @@ msgstr ""
521521msgid "Search…"
522522msgstr ""
523523
524−#: qml/Launcher/Drawer.qml:123
524+#: qml/Launcher/Drawer.qml:127
525525msgctxt "Apps sorted alphabetically"
526526msgid "A-Z"
527527msgstr ""
@@ -622,7 +622,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
622622msgstr ""
623623
624624#: qml/Tutorial/TutorialLeftLong.qml:49
625−msgid "Long swipe from the left edge to open the Today scope"
625+msgid "Long swipe from the left edge to open the Application Drawer"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeft.qml:47
po/am.po+9−6
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2017-01-26 15:04+0000\n"
1212"Last-Translator: samson <Unknown>\n"
1313"Language-Team: Amharic <am@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:54+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -523,7 +523,7 @@ msgstr "የ ዴስክቶፕ አይነት ይምረጡ"
523523msgid "Search…"
524524msgstr "መፈለጊያ..."
525525
526−#: qml/Launcher/Drawer.qml:123
526+#: qml/Launcher/Drawer.qml:127
527527msgctxt "Apps sorted alphabetically"
528528msgid "A-Z"
529529msgstr "A-Z"
@@ -624,8 +624,8 @@ msgid "Drag using 3 fingers any application from one window to the other"
624624msgstr "መጎተቻ 3 ጣቶች በ መጠቀም ማንኛውንም መተግበሪያ ከ አንድ መስኮት ወደ ሌላ"
625625
626626#: qml/Tutorial/TutorialLeftLong.qml:49
627−msgid "Long swipe from the left edge to open the Today scope"
628−msgstr "በ ረጅሙ ከ ግራ ጠርዝ በኩል ይጥረጉ የ ዛሬን ክልል ለ መክፈት"
627+msgid "Long swipe from the left edge to open the Application Drawer"
628+msgstr "በረጅሙ ይጥረጉ ከ ግራ ጠርዝ በኩል መተግበሪያ ለ መክፈት ከ መሳቢያ ውስጥ"
629629
630630#: qml/Tutorial/TutorialLeft.qml:47
631631msgid "Short swipe from the left edge to open the launcher"
@@ -1351,6 +1351,9 @@ msgstr "በጣም ደካማ የ መግቢያ ቃል"
13511351#~ msgid "Short or long swipe from the right edge to view your open apps"
13521352#~ msgstr "በ አጭሩ ወይንም በ ረጅሙ ይጥረጉ ከ ቀኝ ጠረዝ በኩል የ ተከፈቱ መተግበሪያዎችን ለማየት"
13531353
1354+#~ msgid "Long swipe from the left edge to open the Today scope"
1355+#~ msgstr "በ ረጅሙ ከ ግራ ጠርዝ በኩል ይጥረጉ የ ዛሬን ክልል ለ መክፈት"
1356+
13541357#~ msgid "Swipe from the left edge to open the launcher"
13551358#~ msgstr "ከ ግራ ጠርዝ በኩል ይጥረጉ ማስጀመሪያውን ለ መክፈት"
13561359
po/ar.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2017-01-14 05:20+0000\n"
1212"Last-Translator: Ibrahim Saed <ibraheem5000@gmail.com>\n"
1313"Language-Team: Arabic <ar@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= "
1818"3 && n % 100 <= 10 ? 3 : n % 100 >= 11 && n % 100 <= 99 ? 4 : 5;\n"
19−"X-Launchpad-Export-Date: 2017-02-04 05:54+0000\n"
20−"X-Generator: Launchpad (build 18322)\n"
19+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
20+"X-Generator: Launchpad (build 18326)\n"
2121
2222#: plugins/LightDM/Greeter.cpp:188
2323msgid "Password: "
@@ -530,7 +530,7 @@ msgstr ""
530530msgid "Search…"
531531msgstr ""
532532
533−#: qml/Launcher/Drawer.qml:123
533+#: qml/Launcher/Drawer.qml:127
534534msgctxt "Apps sorted alphabetically"
535535msgid "A-Z"
536536msgstr ""
@@ -643,7 +643,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
643643msgstr ""
644644
645645#: qml/Tutorial/TutorialLeftLong.qml:49
646−msgid "Long swipe from the left edge to open the Today scope"
646+msgid "Long swipe from the left edge to open the Application Drawer"
647647msgstr ""
648648
649649#: qml/Tutorial/TutorialLeft.qml:47
po/ast.po+9−6
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2016-12-16 02:13+0000\n"
1212"Last-Translator: enolp <enolp@softastur.org>\n"
1313"Language-Team: Asturian <ast@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:54+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -526,7 +526,7 @@ msgstr "Esbillar entornu d'escritoriu"
526526msgid "Search…"
527527msgstr "Guetar..."
528528
529−#: qml/Launcher/Drawer.qml:123
529+#: qml/Launcher/Drawer.qml:127
530530msgctxt "Apps sorted alphabetically"
531531msgid "A-Z"
532532msgstr "A-Z"
@@ -627,8 +627,8 @@ msgid "Drag using 3 fingers any application from one window to the other"
627627msgstr "Abasnar cualquier aplicación d'una ventana a otra usando 3 deos"
628628
629629#: qml/Tutorial/TutorialLeftLong.qml:49
630−msgid "Long swipe from the left edge to open the Today scope"
631−msgstr "Eslizamientu llargu dende'l berbesu izquierdu pa ver el scope Güei"
630+msgid "Long swipe from the left edge to open the Application Drawer"
631+msgstr ""
632632
633633#: qml/Tutorial/TutorialLeft.qml:47
634634msgid "Short swipe from the left edge to open the launcher"
@@ -1377,5 +1377,8 @@ msgstr "Contraseña feble enforma"
13771377#~ msgid "Swipe up to create a message"
13781378#~ msgstr "Eslizar pa crear un mensaxe"
13791379
1380+#~ msgid "Long swipe from the left edge to open the Today scope"
1381+#~ msgstr "Eslizamientu llargu dende'l berbesu izquierdu pa ver el scope Güei"
1382+
13801383#~ msgid "Takes a screenshot of a window."
13811384#~ msgstr "Saca una imaxe d'una ventana."
po/az.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2014-09-03 16:39+0000\n"
1212"Last-Translator: Nicat Məmmədov <n1c4t97@gmail.com>\n"
1313"Language-Team: Azerbaijani <az@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:54+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -521,7 +521,7 @@ msgstr ""
521521msgid "Search…"
522522msgstr ""
523523
524−#: qml/Launcher/Drawer.qml:123
524+#: qml/Launcher/Drawer.qml:127
525525msgctxt "Apps sorted alphabetically"
526526msgid "A-Z"
527527msgstr ""
@@ -622,7 +622,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
622622msgstr ""
623623
624624#: qml/Tutorial/TutorialLeftLong.qml:49
625−msgid "Long swipe from the left edge to open the Today scope"
625+msgid "Long swipe from the left edge to open the Application Drawer"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeft.qml:47
po/be.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2015-12-13 13:12+0000\n"
1212"Last-Translator: Mikhail_SaTuRn <mikhail_saturn@tut.by>\n"
1313"Language-Team: Belarusian <be@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
19−"X-Launchpad-Export-Date: 2017-02-04 05:54+0000\n"
20−"X-Generator: Launchpad (build 18322)\n"
19+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
20+"X-Generator: Launchpad (build 18326)\n"
2121
2222#: plugins/LightDM/Greeter.cpp:188
2323msgid "Password: "
@@ -528,7 +528,7 @@ msgstr ""
528528msgid "Search…"
529529msgstr ""
530530
531−#: qml/Launcher/Drawer.qml:123
531+#: qml/Launcher/Drawer.qml:127
532532msgctxt "Apps sorted alphabetically"
533533msgid "A-Z"
534534msgstr ""
@@ -632,7 +632,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
632632msgstr ""
633633
634634#: qml/Tutorial/TutorialLeftLong.qml:49
635−msgid "Long swipe from the left edge to open the Today scope"
635+msgid "Long swipe from the left edge to open the Application Drawer"
636636msgstr ""
637637
638638#: qml/Tutorial/TutorialLeft.qml:47
po/bg.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2015-04-12 14:43+0000\n"
1212"Last-Translator: George Karavasilev <kokoto-java@ubuntu.com>\n"
1313"Language-Team: Bulgarian <bg@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:54+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -523,7 +523,7 @@ msgstr ""
523523msgid "Search…"
524524msgstr ""
525525
526−#: qml/Launcher/Drawer.qml:123
526+#: qml/Launcher/Drawer.qml:127
527527msgctxt "Apps sorted alphabetically"
528528msgid "A-Z"
529529msgstr ""
@@ -624,7 +624,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
624624msgstr ""
625625
626626#: qml/Tutorial/TutorialLeftLong.qml:49
627−msgid "Long swipe from the left edge to open the Today scope"
627+msgid "Long swipe from the left edge to open the Application Drawer"
628628msgstr ""
629629
630630#: qml/Tutorial/TutorialLeft.qml:47
po/bn.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2015-11-27 19:38+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Bengali <bn@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:54+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -523,7 +523,7 @@ msgstr ""
523523msgid "Search…"
524524msgstr ""
525525
526−#: qml/Launcher/Drawer.qml:123
526+#: qml/Launcher/Drawer.qml:127
527527msgctxt "Apps sorted alphabetically"
528528msgid "A-Z"
529529msgstr ""
@@ -624,7 +624,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
624624msgstr ""
625625
626626#: qml/Tutorial/TutorialLeftLong.qml:49
627−msgid "Long swipe from the left edge to open the Today scope"
627+msgid "Long swipe from the left edge to open the Application Drawer"
628628msgstr ""
629629
630630#: qml/Tutorial/TutorialLeft.qml:47
po/br.po+9−6
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2016-08-29 11:37+0000\n"
1212"Last-Translator: Fohanno Thierry <thierry.fohanno@ofis-bzh.org>\n"
1313"Language-Team: Breton <br@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:54+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -532,7 +532,7 @@ msgstr "Diuzañ endro ar burev"
532532msgid "Search…"
533533msgstr ""
534534
535−#: qml/Launcher/Drawer.qml:123
535+#: qml/Launcher/Drawer.qml:127
536536msgctxt "Apps sorted alphabetically"
537537msgid "A-Z"
538538msgstr ""
@@ -633,9 +633,8 @@ msgid "Drag using 3 fingers any application from one window to the other"
633633msgstr "Riklit forzh peseurt arload gant tri biz eus an eil prenestr d'egile"
634634
635635#: qml/Tutorial/TutorialLeftLong.qml:49
636−msgid "Long swipe from the left edge to open the Today scope"
636+msgid "Long swipe from the left edge to open the Application Drawer"
637637msgstr ""
638−"Rikladenn hir adalek ar bord kleiz evit digeriñ ar c'heflusker enklask Hiziv"
639638
640639#: qml/Tutorial/TutorialLeft.qml:47
641640msgid "Short swipe from the left edge to open the launcher"
@@ -1360,3 +1359,7 @@ msgstr "Ger-tremen diasur-kenañ"
13601359
13611360#~ msgid "Takes a screenshot of a window."
13621361#~ msgstr "Tapout ur skeudenn eus ur prenestr"
1362+
1363+#~ msgid "Long swipe from the left edge to open the Today scope"
1364+#~ msgstr ""
1365+#~ "Rikladenn hir adalek ar bord kleiz evit digeriñ ar c'heflusker enklask Hiziv"
po/bs.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2015-12-01 20:06+0000\n"
1212"Last-Translator: Kenan Gutić <Unknown>\n"
1313"Language-Team: Bosnian <bs@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2017-02-04 05:54+0000\n"
20−"X-Generator: Launchpad (build 18322)\n"
19+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
20+"X-Generator: Launchpad (build 18326)\n"
2121
2222#: plugins/LightDM/Greeter.cpp:188
2323msgid "Password: "
@@ -527,7 +527,7 @@ msgstr ""
527527msgid "Search…"
528528msgstr ""
529529
530−#: qml/Launcher/Drawer.qml:123
530+#: qml/Launcher/Drawer.qml:127
531531msgctxt "Apps sorted alphabetically"
532532msgid "A-Z"
533533msgstr ""
@@ -631,7 +631,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
631631msgstr ""
632632
633633#: qml/Tutorial/TutorialLeftLong.qml:49
634−msgid "Long swipe from the left edge to open the Today scope"
634+msgid "Long swipe from the left edge to open the Application Drawer"
635635msgstr ""
636636
637637#: qml/Tutorial/TutorialLeft.qml:47
po/ca.po+9−6
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2016-11-11 06:30+0000\n"
1212"Last-Translator: Walter Garcia-Fontes <walter.garcia@upf.edu>\n"
1313"Language-Team: Catalan <ca@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:54+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -531,7 +531,7 @@ msgstr "Seleccioneu l'entorn d'escriptori"
531531msgid "Search…"
532532msgstr ""
533533
534−#: qml/Launcher/Drawer.qml:123
534+#: qml/Launcher/Drawer.qml:127
535535msgctxt "Apps sorted alphabetically"
536536msgid "A-Z"
537537msgstr ""
@@ -633,9 +633,8 @@ msgstr ""
633633"Arrossegueu usant 3 dits qualsevol aplicació d'una finestra a una altra"
634634
635635#: qml/Tutorial/TutorialLeftLong.qml:49
636−msgid "Long swipe from the left edge to open the Today scope"
636+msgid "Long swipe from the left edge to open the Application Drawer"
637637msgstr ""
638−"Feu una lliscada llarga des de la vora esquerra per obrir l'àmbit Avui"
639638
640639#: qml/Tutorial/TutorialLeft.qml:47
641640msgid "Short swipe from the left edge to open the launcher"
@@ -1398,6 +1397,10 @@ msgstr "La contrasenya és molt dèbil"
13981397#~ msgid "Swipe up to manage the app"
13991398#~ msgstr "Llisqueu cap amunt per gestionar l'aplicació"
14001399
1400+#~ msgid "Long swipe from the left edge to open the Today scope"
1401+#~ msgstr ""
1402+#~ "Feu una lliscada llarga des de la vora esquerra per obrir l'àmbit Avui"
1403+
14011404#~ msgid "Swipe up to add a contact"
14021405#~ msgstr "Llisqueu per afegir un contacte"
14031406
po/ca@valencia.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2015-02-22 15:22+0000\n"
1212"Last-Translator: David Planella <david.planella@gmail.com>\n"
1313"Language-Team: Catalan <ca@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:56+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:06+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -527,7 +527,7 @@ msgstr ""
527527msgid "Search…"
528528msgstr ""
529529
530−#: qml/Launcher/Drawer.qml:123
530+#: qml/Launcher/Drawer.qml:127
531531msgctxt "Apps sorted alphabetically"
532532msgid "A-Z"
533533msgstr ""
@@ -628,7 +628,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
628628msgstr ""
629629
630630#: qml/Tutorial/TutorialLeftLong.qml:49
631−msgid "Long swipe from the left edge to open the Today scope"
631+msgid "Long swipe from the left edge to open the Application Drawer"
632632msgstr ""
633633
634634#: qml/Tutorial/TutorialLeft.qml:47
po/ce.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2015-02-15 04:01+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Chechen <ce@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -521,7 +521,7 @@ msgstr ""
521521msgid "Search…"
522522msgstr ""
523523
524−#: qml/Launcher/Drawer.qml:123
524+#: qml/Launcher/Drawer.qml:127
525525msgctxt "Apps sorted alphabetically"
526526msgid "A-Z"
527527msgstr ""
@@ -622,7 +622,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
622622msgstr ""
623623
624624#: qml/Tutorial/TutorialLeftLong.qml:49
625−msgid "Long swipe from the left edge to open the Today scope"
625+msgid "Long swipe from the left edge to open the Application Drawer"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeft.qml:47
po/ckb.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2014-01-21 11:05+0000\n"
1212"Last-Translator: Aras <aras.noori@gmail.com>\n"
1313"Language-Team: Kurdish (Sorani) <ckb@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:56+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:06+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -521,7 +521,7 @@ msgstr ""
521521msgid "Search…"
522522msgstr ""
523523
524−#: qml/Launcher/Drawer.qml:123
524+#: qml/Launcher/Drawer.qml:127
525525msgctxt "Apps sorted alphabetically"
526526msgid "A-Z"
527527msgstr ""
@@ -622,7 +622,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
622622msgstr ""
623623
624624#: qml/Tutorial/TutorialLeftLong.qml:49
625−msgid "Long swipe from the left edge to open the Today scope"
625+msgid "Long swipe from the left edge to open the Application Drawer"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeft.qml:47
po/co.po+9−6
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2016-05-24 10:40+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Corsican <co@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -531,7 +531,7 @@ msgstr ""
531531msgid "Search…"
532532msgstr ""
533533
534−#: qml/Launcher/Drawer.qml:123
534+#: qml/Launcher/Drawer.qml:127
535535msgctxt "Apps sorted alphabetically"
536536msgid "A-Z"
537537msgstr ""
@@ -633,8 +633,8 @@ msgstr ""
633633"Trascinà cù 3 dite qualichissia applicazione da una finestra à un'antra"
634634
635635#: qml/Tutorial/TutorialLeftLong.qml:49
636−msgid "Long swipe from the left edge to open the Today scope"
637−msgstr "Scorre longu da mancina versu diritta per aprì u pannellu Oghje"
636+msgid "Long swipe from the left edge to open the Application Drawer"
637+msgstr ""
638638
639639#: qml/Tutorial/TutorialLeft.qml:47
640640msgid "Short swipe from the left edge to open the launcher"
@@ -1019,6 +1019,9 @@ msgstr "Parolla d'ordine moltu debule"
10191019#~ msgid "Swipe up to create a message"
10201020#~ msgstr "Scorre versu l'altu per creà un messaggiu"
10211021
1022+#~ msgid "Long swipe from the left edge to open the Today scope"
1023+#~ msgstr "Scorre longu da mancina versu diritta per aprì u pannellu Oghje"
1024+
10221025#~ msgid "Short or long swipe from the right edge to view your open apps"
10231026#~ msgstr ""
10241027#~ "Scorre cortu o longu da diritta versu mancina per vede e applicazioni aperte"
po/cs.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2015-07-07 10:44+0000\n"
1212"Last-Translator: Vojtěch Daněk <vdanek@outlook.com>\n"
1313"Language-Team: Czech <cs@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020"Language: cs\n"
2121
2222#: plugins/LightDM/Greeter.cpp:188
@@ -527,7 +527,7 @@ msgstr ""
527527msgid "Search…"
528528msgstr ""
529529
530−#: qml/Launcher/Drawer.qml:123
530+#: qml/Launcher/Drawer.qml:127
531531msgctxt "Apps sorted alphabetically"
532532msgid "A-Z"
533533msgstr ""
@@ -631,7 +631,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
631631msgstr ""
632632
633633#: qml/Tutorial/TutorialLeftLong.qml:49
634−msgid "Long swipe from the left edge to open the Today scope"
634+msgid "Long swipe from the left edge to open the Application Drawer"
635635msgstr ""
636636
637637#: qml/Tutorial/TutorialLeft.qml:47
po/cy.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2015-07-31 13:21+0000\n"
1212"Last-Translator: Owen Llywelyn <owen.llywelyn@gmail.com>\n"
1313"Language-Team: Welsh <cy@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=4; plural=n==1 ? 0 : n==2 ? 1 : (n != 8 && n != 11) ? "
1818"2 : 3;\n"
19−"X-Launchpad-Export-Date: 2017-02-04 05:56+0000\n"
20−"X-Generator: Launchpad (build 18322)\n"
19+"X-Launchpad-Export-Date: 2017-02-22 06:06+0000\n"
20+"X-Generator: Launchpad (build 18326)\n"
2121
2222#: plugins/LightDM/Greeter.cpp:188
2323msgid "Password: "
@@ -528,7 +528,7 @@ msgstr ""
528528msgid "Search…"
529529msgstr ""
530530
531−#: qml/Launcher/Drawer.qml:123
531+#: qml/Launcher/Drawer.qml:127
532532msgctxt "Apps sorted alphabetically"
533533msgid "A-Z"
534534msgstr ""
@@ -635,7 +635,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
635635msgstr ""
636636
637637#: qml/Tutorial/TutorialLeftLong.qml:49
638−msgid "Long swipe from the left edge to open the Today scope"
638+msgid "Long swipe from the left edge to open the Application Drawer"
639639msgstr ""
640640
641641#: qml/Tutorial/TutorialLeft.qml:47
po/da.po+5−5
@@ -8,7 +8,7 @@ msgid ""
88msgstr ""
99"Project-Id-Version: unity8\n"
1010"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
11−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
11+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1212"PO-Revision-Date: 2015-07-06 12:05+0000\n"
1313"Last-Translator: Folmer Fredslund <Unknown>\n"
1414"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Type: text/plain; charset=UTF-8\n"
1717"Content-Transfer-Encoding: 8bit\n"
1818"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
20−"X-Generator: Launchpad (build 18322)\n"
19+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
20+"X-Generator: Launchpad (build 18326)\n"
2121
2222#: plugins/LightDM/Greeter.cpp:188
2323msgid "Password: "
@@ -528,7 +528,7 @@ msgstr ""
528528msgid "Search…"
529529msgstr ""
530530
531−#: qml/Launcher/Drawer.qml:123
531+#: qml/Launcher/Drawer.qml:127
532532msgctxt "Apps sorted alphabetically"
533533msgid "A-Z"
534534msgstr ""
@@ -629,7 +629,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
629629msgstr ""
630630
631631#: qml/Tutorial/TutorialLeftLong.qml:49
632−msgid "Long swipe from the left edge to open the Today scope"
632+msgid "Long swipe from the left edge to open the Application Drawer"
633633msgstr ""
634634
635635#: qml/Tutorial/TutorialLeft.qml:47
po/de.po+9−6
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2017-01-18 22:45+0000\n"
1212"Last-Translator: Torsten Franz <Unknown>\n"
1313"Language-Team: German <de@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -531,7 +531,7 @@ msgstr "Arbeitsumgebung auswählen"
531531msgid "Search…"
532532msgstr "Suchen …"
533533
534−#: qml/Launcher/Drawer.qml:123
534+#: qml/Launcher/Drawer.qml:127
535535msgctxt "Apps sorted alphabetically"
536536msgid "A-Z"
537537msgstr "A-Z"
@@ -632,9 +632,8 @@ msgid "Drag using 3 fingers any application from one window to the other"
632632msgstr "Eine Anwendung mit 3 Fingern von einem Fenster zum anderen ziehen"
633633
634634#: qml/Tutorial/TutorialLeftLong.qml:49
635−msgid "Long swipe from the left edge to open the Today scope"
635+msgid "Long swipe from the left edge to open the Application Drawer"
636636msgstr ""
637−"Langgezogene Wischgeste von der linken Kante, um den Heute-Scope zu öffnen"
638637
639638#: qml/Tutorial/TutorialLeft.qml:47
640639msgid "Short swipe from the left edge to open the launcher"
@@ -1369,6 +1368,10 @@ msgstr "Sehr schwaches Passwort"
13691368#~ msgid "Swipe up to add a contact"
13701369#~ msgstr "Aufwärts wischen, um einen Kontakt hinzuzufügen"
13711370
1371+#~ msgid "Long swipe from the left edge to open the Today scope"
1372+#~ msgstr ""
1373+#~ "Langgezogene Wischgeste von der linken Kante, um den Heute-Scope zu öffnen"
1374+
13721375#~ msgid "Swipe from the left edge to open the launcher"
13731376#~ msgstr "Von der linken Kante wischen, um den Starter zu öffnen"
13741377
po/el.po+9−6
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2016-04-25 16:24+0000\n"
1212"Last-Translator: Aggelos Arnaoutis <angelosarn@hotmail.com>\n"
1313"Language-Team: Greek <el@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -531,7 +531,7 @@ msgstr "Επιλέξτε περιβάλλον εργασίας"
531531msgid "Search…"
532532msgstr ""
533533
534−#: qml/Launcher/Drawer.qml:123
534+#: qml/Launcher/Drawer.qml:127
535535msgctxt "Apps sorted alphabetically"
536536msgid "A-Z"
537537msgstr ""
@@ -634,9 +634,8 @@ msgstr ""
634634"άλλο"
635635
636636#: qml/Tutorial/TutorialLeftLong.qml:49
637−msgid "Long swipe from the left edge to open the Today scope"
637+msgid "Long swipe from the left edge to open the Application Drawer"
638638msgstr ""
639−"Παρατεταμμένο σύρσιμο από την αριστερή άκρη εμφανίζει το scope \"Σήμερα\""
640639
641640#: qml/Tutorial/TutorialLeft.qml:47
642641msgid "Short swipe from the left edge to open the launcher"
@@ -1364,3 +1363,7 @@ msgstr "Πολύ αδύμανος κωδικός"
13641363#~ msgstr ""
13651364#~ "Εάν το συνθηματικό που θα εισάγετε είναι μη έγκυρο, το τηλέφωνο σας θα κάνει "
13661365#~ "επαναφορά των εργοστασιακών ρυθμίσεων και όλα τα δεδομένα σας θα διαγραφούν."
1366+
1367+#~ msgid "Long swipe from the left edge to open the Today scope"
1368+#~ msgstr ""
1369+#~ "Παρατεταμμένο σύρσιμο από την αριστερή άκρη εμφανίζει το scope \"Σήμερα\""
po/en_AU.po+9−6
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2016-03-27 10:09+0000\n"
1212"Last-Translator: Jared Norris <jarednorris@ubuntu.com>\n"
1313"Language-Team: English (Australia) <en_AU@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:56+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:06+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -525,7 +525,7 @@ msgstr ""
525525msgid "Search…"
526526msgstr ""
527527
528−#: qml/Launcher/Drawer.qml:123
528+#: qml/Launcher/Drawer.qml:127
529529msgctxt "Apps sorted alphabetically"
530530msgid "A-Z"
531531msgstr ""
@@ -626,8 +626,8 @@ msgid "Drag using 3 fingers any application from one window to the other"
626626msgstr "Drag using 3 fingers any application from one window to the other"
627627
628628#: qml/Tutorial/TutorialLeftLong.qml:49
629−msgid "Long swipe from the left edge to open the Today scope"
630−msgstr "Long swipe from the left edge to open the Today scope"
629+msgid "Long swipe from the left edge to open the Application Drawer"
630+msgstr ""
631631
632632#: qml/Tutorial/TutorialLeft.qml:47
633633msgid "Short swipe from the left edge to open the launcher"
@@ -1364,3 +1364,6 @@ msgstr "Very weak password"
13641364
13651365#~ msgid "Swipe up to create a message"
13661366#~ msgstr "Swipe up to create a message"
1367+
1368+#~ msgid "Long swipe from the left edge to open the Today scope"
1369+#~ msgstr "Long swipe from the left edge to open the Today scope"
po/en_GB.po+26−23
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2016-07-05 00:37+0000\n"
1212"Last-Translator: Andi Chandler <Unknown>\n"
1313"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:56+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:06+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -24,15 +24,15 @@ msgstr "Password: "
2424
2525#: plugins/LightDM/Greeter.cpp:203
2626msgid "Username"
27−msgstr ""
27+msgstr "Username"
2828
2929#: plugins/LightDM/Greeter.cpp:242
3030msgid "Failed to authenticate"
31−msgstr ""
31+msgstr "Failed to authenticate"
3232
3333#: plugins/LightDM/Greeter.cpp:244
3434msgid "Invalid password, please try again"
35−msgstr ""
35+msgstr "Invalid password, please try again"
3636
3737#: plugins/LightDM/Greeter.cpp:254
3838msgid "Log In"
@@ -44,11 +44,11 @@ msgstr "Retry"
4444
4545#: plugins/LightDM/UsersModel.cpp:152
4646msgid "Login"
47−msgstr ""
47+msgstr "Login"
4848
4949#: plugins/LightDM/UsersModel.cpp:160
5050msgid "Guest Session"
51−msgstr ""
51+msgstr "Guest Session"
5252
5353#: plugins/Unity/Launcher/launcheritem.cpp:50
5454#: plugins/Unity/Launcher/launcheritem.cpp:122
@@ -151,7 +151,7 @@ msgstr "Alt + PrtScr"
151151
152152#: qml/Components/KeyboardShortcutsOverlay.qml:80
153153msgid "Takes a screenshot of the current window."
154−msgstr ""
154+msgstr "Takes a screenshot of the current window."
155155
156156#: qml/Components/KeyboardShortcutsOverlay.qml:88
157157msgid "Super + Space"
@@ -207,11 +207,11 @@ msgstr "Same as clicking on a launcher icon."
207207
208208#: qml/Components/KeyboardShortcutsOverlay.qml:177
209209msgid "Super + A"
210−msgstr ""
210+msgstr "Super + A"
211211
212212#: qml/Components/KeyboardShortcutsOverlay.qml:182
213213msgid "Opens the Application Drawer."
214−msgstr ""
214+msgstr "Opens the Application Drawer."
215215
216216#: qml/Components/KeyboardShortcutsOverlay.qml:194
217217msgid "Scopes"
@@ -359,19 +359,19 @@ msgstr ""
359359
360360#: qml/Components/VirtualTouchPad.qml:327
361361msgid "Tap left button to click."
362−msgstr ""
362+msgstr "Tap left button to click."
363363
364364#: qml/Components/VirtualTouchPad.qml:339
365365msgid "Tap right button to right click."
366−msgstr ""
366+msgstr "Tap right button to right click."
367367
368368#: qml/Components/VirtualTouchPad.qml:351
369369msgid "Swipe with two fingers to scroll."
370−msgstr ""
370+msgstr "Swipe with two fingers to scroll."
371371
372372#: qml/Components/VirtualTouchPad.qml:396
373373msgid "Find more settings in the system settings."
374−msgstr ""
374+msgstr "Find more settings in the system settings."
375375
376376#: qml/Dash/DashPageHeader.qml:361
377377msgctxt "Button: Open the Ubuntu Store"
@@ -499,11 +499,11 @@ msgstr "Try again"
499499
500500#: qml/Greeter/Greeter.qml:562
501501msgid "Enter passphrase to unlock"
502−msgstr ""
502+msgstr "Enter passphrase to unlock"
503503
504504#: qml/Greeter/Greeter.qml:563
505505msgid "Enter passcode to unlock"
506−msgstr ""
506+msgstr "Enter passcode to unlock"
507507
508508#: qml/Greeter/NarrowView.qml:242
509509msgid "Emergency"
@@ -523,16 +523,16 @@ msgstr "Select desktop environment"
523523
524524#: qml/Launcher/Drawer.qml:92
525525msgid "Search…"
526−msgstr ""
526+msgstr "Search…"
527527
528−#: qml/Launcher/Drawer.qml:123
528+#: qml/Launcher/Drawer.qml:127
529529msgctxt "Apps sorted alphabetically"
530530msgid "A-Z"
531−msgstr ""
531+msgstr "A-Z"
532532
533533#: qml/Launcher/MoreAppsHeader.qml:39
534534msgid "More apps in the store"
535−msgstr ""
535+msgstr "More apps in the store"
536536
537537#: qml/Notifications/NotificationMenuItemFactory.qml:124
538538msgid "Show password"
@@ -626,8 +626,8 @@ msgid "Drag using 3 fingers any application from one window to the other"
626626msgstr "Drag using 3 fingers any application from one window to the other"
627627
628628#: qml/Tutorial/TutorialLeftLong.qml:49
629−msgid "Long swipe from the left edge to open the Today scope"
630−msgstr "Long swipe from the left edge to open the Today scope"
629+msgid "Long swipe from the left edge to open the Application Drawer"
630+msgstr ""
631631
632632#: qml/Tutorial/TutorialLeft.qml:47
633633msgid "Short swipe from the left edge to open the launcher"
@@ -1367,6 +1367,9 @@ msgstr "Very weak password"
13671367#~ msgid "Short or long swipe from the right edge to view your open apps"
13681368#~ msgstr "Short or long swipe from the right edge to view your open apps"
13691369
1370+#~ msgid "Long swipe from the left edge to open the Today scope"
1371+#~ msgstr "Long swipe from the left edge to open the Today scope"
1372+
13701373#~ msgid "Swipe from the left edge to open the launcher"
13711374#~ msgstr "Swipe from the left edge to open the launcher"
13721375
po/eo.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2015-06-06 23:37+0000\n"
1212"Last-Translator: Eliovir <Unknown>\n"
1313"Language-Team: Esperanto <eo@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -521,7 +521,7 @@ msgstr ""
521521msgid "Search…"
522522msgstr ""
523523
524−#: qml/Launcher/Drawer.qml:123
524+#: qml/Launcher/Drawer.qml:127
525525msgctxt "Apps sorted alphabetically"
526526msgid "A-Z"
527527msgstr ""
@@ -622,7 +622,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
622622msgstr ""
623623
624624#: qml/Tutorial/TutorialLeftLong.qml:49
625−msgid "Long swipe from the left edge to open the Today scope"
625+msgid "Long swipe from the left edge to open the Application Drawer"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeft.qml:47
po/es.po+9−6
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2016-03-25 12:02+0000\n"
1212"Last-Translator: Adolfo Jayme <fitoschido@gmail.com>\n"
1313"Language-Team: Spanish <es@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:56+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -530,7 +530,7 @@ msgstr "Seleccionar entorno de escritorio"
530530msgid "Search…"
531531msgstr ""
532532
533−#: qml/Launcher/Drawer.qml:123
533+#: qml/Launcher/Drawer.qml:127
534534msgctxt "Apps sorted alphabetically"
535535msgid "A-Z"
536536msgstr ""
@@ -632,8 +632,8 @@ msgstr ""
632632"Arrastrar con tres dedos cualquier aplicación desde una ventana a la otra"
633633
634634#: qml/Tutorial/TutorialLeftLong.qml:49
635−msgid "Long swipe from the left edge to open the Today scope"
636−msgstr "Deslice largo desde el borde izquierdo para ver el scope Hoy"
635+msgid "Long swipe from the left edge to open the Application Drawer"
636+msgstr ""
637637
638638#: qml/Tutorial/TutorialLeft.qml:47
639639msgid "Short swipe from the left edge to open the launcher"
@@ -1387,5 +1387,8 @@ msgstr "Contraseña muy débil"
13871387#~ msgid "Short or long swipe from the right edge to view your open apps"
13881388#~ msgstr "Deslice desde el borde derecho para ver las aplis abiertas"
13891389
1390+#~ msgid "Long swipe from the left edge to open the Today scope"
1391+#~ msgstr "Deslice largo desde el borde izquierdo para ver el scope Hoy"
1392+
13901393#~ msgid "Takes a screenshot of a window."
13911394#~ msgstr "Captura una ventana."
po/et.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2016-12-28 06:29+0000\n"
1212"Last-Translator: Karlis <Unknown>\n"
1313"Language-Team: Estonian <et@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -521,7 +521,7 @@ msgstr ""
521521msgid "Search…"
522522msgstr ""
523523
524−#: qml/Launcher/Drawer.qml:123
524+#: qml/Launcher/Drawer.qml:127
525525msgctxt "Apps sorted alphabetically"
526526msgid "A-Z"
527527msgstr ""
@@ -622,7 +622,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
622622msgstr ""
623623
624624#: qml/Tutorial/TutorialLeftLong.qml:49
625−msgid "Long swipe from the left edge to open the Today scope"
625+msgid "Long swipe from the left edge to open the Application Drawer"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeft.qml:47
po/eu.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2015-07-13 23:29+0000\n"
1212"Last-Translator: Ibai Oihanguren Sala <Unknown>\n"
1313"Language-Team: Basque <eu@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:54+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -524,7 +524,7 @@ msgstr ""
524524msgid "Search…"
525525msgstr ""
526526
527−#: qml/Launcher/Drawer.qml:123
527+#: qml/Launcher/Drawer.qml:127
528528msgctxt "Apps sorted alphabetically"
529529msgid "A-Z"
530530msgstr ""
@@ -625,7 +625,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
625625msgstr ""
626626
627627#: qml/Tutorial/TutorialLeftLong.qml:49
628−msgid "Long swipe from the left edge to open the Today scope"
628+msgid "Long swipe from the left edge to open the Application Drawer"
629629msgstr ""
630630
631631#: qml/Tutorial/TutorialLeft.qml:47
po/fa.po+9−6
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2016-10-18 07:03+0000\n"
1212"Last-Translator: Danial Behzadi <dani.behzi@gmail.com>\n"
1313"Language-Team: Persian <fa@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -526,7 +526,7 @@ msgstr "گزینش محیط میزکار"
526526msgid "Search…"
527527msgstr ""
528528
529−#: qml/Launcher/Drawer.qml:123
529+#: qml/Launcher/Drawer.qml:127
530530msgctxt "Apps sorted alphabetically"
531531msgid "A-Z"
532532msgstr ""
@@ -624,8 +624,8 @@ msgid "Drag using 3 fingers any application from one window to the other"
624624msgstr "هر پنجره‌ای را با کشیدن سه‌انگشت از پنجره‌ای به ینجرهٔ دیگر ببرید"
625625
626626#: qml/Tutorial/TutorialLeftLong.qml:49
627−msgid "Long swipe from the left edge to open the Today scope"
628−msgstr "برای گشودن حوزهٔ امروز، از لبهٔ چپ طولانی بکشید"
627+msgid "Long swipe from the left edge to open the Application Drawer"
628+msgstr ""
629629
630630#: qml/Tutorial/TutorialLeft.qml:47
631631msgid "Short swipe from the left edge to open the launcher"
@@ -1374,5 +1374,8 @@ msgstr "گذرواژهٔ خیلی ضعیف"
13741374#~ msgid "Swipe up to create a message"
13751375#~ msgstr "برای ایجاد پیام، به بالا بکشید"
13761376
1377+#~ msgid "Long swipe from the left edge to open the Today scope"
1378+#~ msgstr "برای گشودن حوزهٔ امروز، از لبهٔ چپ طولانی بکشید"
1379+
13771380#~ msgid "Takes a screenshot of a window."
13781381#~ msgstr "نماگرفت از یک پنجره"
po/fi.po+9−6
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2015-07-04 18:32+0000\n"
1212"Last-Translator: Jiri Grönroos <Unknown>\n"
1313"Language-Team: Finnish <fi@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -529,7 +529,7 @@ msgstr "Valitse työpöytäympäristö"
529529msgid "Search…"
530530msgstr ""
531531
532−#: qml/Launcher/Drawer.qml:123
532+#: qml/Launcher/Drawer.qml:127
533533msgctxt "Apps sorted alphabetically"
534534msgid "A-Z"
535535msgstr ""
@@ -630,8 +630,8 @@ msgid "Drag using 3 fingers any application from one window to the other"
630630msgstr "Vedä kolmea sormea käyttäen mikä tahansa sovellus ikkunasta toiseen"
631631
632632#: qml/Tutorial/TutorialLeftLong.qml:49
633−msgid "Long swipe from the left edge to open the Today scope"
634−msgstr "Tee pitkä veto vasemmasta reunasta avataksesi Tänään-näkymän"
633+msgid "Long swipe from the left edge to open the Application Drawer"
634+msgstr ""
635635
636636#: qml/Tutorial/TutorialLeft.qml:47
637637msgid "Short swipe from the left edge to open the launcher"
@@ -1364,6 +1364,9 @@ msgstr "Erittäin heikko salasana"
13641364#~ msgid "Swipe up to add a contact"
13651365#~ msgstr "Vedä ylös lisätäksesi yhteystiedon"
13661366
1367+#~ msgid "Long swipe from the left edge to open the Today scope"
1368+#~ msgstr "Tee pitkä veto vasemmasta reunasta avataksesi Tänään-näkymän"
1369+
13671370#~ msgid "Swipe from the top right edge to open the notification bar"
13681371#~ msgstr "Vedä oikeasta yläreunasta avataksesi ilmoituspalkin"
13691372
po/fo.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2014-01-14 20:08+0000\n"
1212"Last-Translator: Jógvan Olsen <jo@jebster.net>\n"
1313"Language-Team: Faroese <fo@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -525,7 +525,7 @@ msgstr ""
525525msgid "Search…"
526526msgstr ""
527527
528−#: qml/Launcher/Drawer.qml:123
528+#: qml/Launcher/Drawer.qml:127
529529msgctxt "Apps sorted alphabetically"
530530msgid "A-Z"
531531msgstr ""
@@ -626,7 +626,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeftLong.qml:49
629−msgid "Long swipe from the left edge to open the Today scope"
629+msgid "Long swipe from the left edge to open the Application Drawer"
630630msgstr ""
631631
632632#: qml/Tutorial/TutorialLeft.qml:47
po/fr.po+21−16
@@ -7,16 +7,16 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
11−"PO-Revision-Date: 2016-12-17 14:32+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
11+"PO-Revision-Date: 2017-02-07 18:31+0000\n"
1212"Last-Translator: Anne017 <anneonyme017@openmailbox.org>\n"
1313"Language-Team: French <fr@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -24,15 +24,15 @@ msgstr "Mot de passe : "
2424
2525#: plugins/LightDM/Greeter.cpp:203
2626msgid "Username"
27−msgstr ""
27+msgstr "Nom d’utilisateur"
2828
2929#: plugins/LightDM/Greeter.cpp:242
3030msgid "Failed to authenticate"
31−msgstr ""
31+msgstr "Échec de l'authentification"
3232
3333#: plugins/LightDM/Greeter.cpp:244
3434msgid "Invalid password, please try again"
35−msgstr ""
35+msgstr "Mot de passe non valide, veuillez réessayer"
3636
3737#: plugins/LightDM/Greeter.cpp:254
3838msgid "Log In"
@@ -44,11 +44,11 @@ msgstr "Réessayer"
4444
4545#: plugins/LightDM/UsersModel.cpp:152
4646msgid "Login"
47−msgstr ""
47+msgstr "Se connecter"
4848
4949#: plugins/LightDM/UsersModel.cpp:160
5050msgid "Guest Session"
51−msgstr ""
51+msgstr "Session d'invité"
5252
5353#: plugins/Unity/Launcher/launcheritem.cpp:50
5454#: plugins/Unity/Launcher/launcheritem.cpp:122
@@ -151,7 +151,7 @@ msgstr "Alt + Impécr"
151151
152152#: qml/Components/KeyboardShortcutsOverlay.qml:80
153153msgid "Takes a screenshot of the current window."
154−msgstr ""
154+msgstr "Prend une capture d'écran de la fenêtre actuelle."
155155
156156#: qml/Components/KeyboardShortcutsOverlay.qml:88
157157msgid "Super + Space"
@@ -507,11 +507,11 @@ msgstr "Réessayer"
507507
508508#: qml/Greeter/Greeter.qml:562
509509msgid "Enter passphrase to unlock"
510−msgstr ""
510+msgstr "Saisir la phrase de passe pour déverrouiller"
511511
512512#: qml/Greeter/Greeter.qml:563
513513msgid "Enter passcode to unlock"
514−msgstr ""
514+msgstr "Saisissez votre mot de passe pour déverrouiller"
515515
516516#: qml/Greeter/NarrowView.qml:242
517517msgid "Emergency"
@@ -533,7 +533,7 @@ msgstr "Sélectionner l'environnement de bureau"
533533msgid "Search…"
534534msgstr "Rechercher..."
535535
536−#: qml/Launcher/Drawer.qml:123
536+#: qml/Launcher/Drawer.qml:127
537537msgctxt "Apps sorted alphabetically"
538538msgid "A-Z"
539539msgstr "A-Z"
@@ -636,10 +636,10 @@ msgstr ""
636636"l'autre"
637637
638638#: qml/Tutorial/TutorialLeftLong.qml:49
639−msgid "Long swipe from the left edge to open the Today scope"
639+msgid "Long swipe from the left edge to open the Application Drawer"
640640msgstr ""
641−"Faites glisser à partir du bord gauche jusqu'au bord droit pour ouvrir le "
642−"moteur de recherche Aujourd'hui"
641+"Faites un glissement long à partir du bord gauche pour ouvrir le tiroir des "
642+"applications"
643643
644644#: qml/Tutorial/TutorialLeft.qml:47
645645msgid "Short swipe from the left edge to open the launcher"
@@ -1416,5 +1416,10 @@ msgstr "Mot de passe très faible"
14161416#~ msgid "Swipe up for favorite calculations"
14171417#~ msgstr "Faites glisser vers le haut pour afficher les calculs favoris"
14181418
1419+#~ msgid "Long swipe from the left edge to open the Today scope"
1420+#~ msgstr ""
1421+#~ "Faites glisser à partir du bord gauche jusqu'au bord droit pour ouvrir le "
1422+#~ "moteur de recherche Aujourd'hui"
1423+
14191424#~ msgid "Takes a screenshot of a window."
14201425#~ msgstr "Prends une capture d'écran d'une fenêtre."
po/ga.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2016-01-25 11:33+0000\n"
1212"Last-Translator: Joshua Kiley <Unknown>\n"
1313"Language-Team: Irish <ga@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -522,7 +522,7 @@ msgstr ""
522522msgid "Search…"
523523msgstr ""
524524
525−#: qml/Launcher/Drawer.qml:123
525+#: qml/Launcher/Drawer.qml:127
526526msgctxt "Apps sorted alphabetically"
527527msgid "A-Z"
528528msgstr ""
@@ -626,7 +626,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeftLong.qml:49
629−msgid "Long swipe from the left edge to open the Today scope"
629+msgid "Long swipe from the left edge to open the Application Drawer"
630630msgstr ""
631631
632632#: qml/Tutorial/TutorialLeft.qml:47
po/gd.po+10−7
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2016-04-08 18:34+0000\n"
1212"Last-Translator: Akerbeltz <fios@akerbeltz.org>\n"
1313"Language-Team: Fòram na Gàidhlig\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : "
1818"(n > 2 && n < 20) ? 2 : 3;\n"
19−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
20−"X-Generator: Launchpad (build 18322)\n"
19+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
20+"X-Generator: Launchpad (build 18326)\n"
2121"Language: gd\n"
2222
2323#: plugins/LightDM/Greeter.cpp:188
@@ -536,7 +536,7 @@ msgstr "Tagh àrainneachd an deasga"
536536msgid "Search…"
537537msgstr ""
538538
539−#: qml/Launcher/Drawer.qml:123
539+#: qml/Launcher/Drawer.qml:127
540540msgctxt "Apps sorted alphabetically"
541541msgid "A-Z"
542542msgstr ""
@@ -645,10 +645,8 @@ msgstr ""
645645"eile"
646646
647647#: qml/Tutorial/TutorialLeftLong.qml:49
648−msgid "Long swipe from the left edge to open the Today scope"
648+msgid "Long swipe from the left edge to open the Application Drawer"
649649msgstr ""
650−"Dèan grad-shlaighdeadh a-steach on oir chlì gus breath an latha an-diugh "
651−"fhosgladh"
652650
653651#: qml/Tutorial/TutorialLeft.qml:47
654652msgid "Short swipe from the left edge to open the launcher"
@@ -1410,6 +1408,11 @@ msgstr "Facal-faire glè lag"
14101408#~ msgid "Swipe up to add a contact"
14111409#~ msgstr "Dèan grad-shlaighdeadh suas airson neach-aithne a chur ris"
14121410
1411+#~ msgid "Long swipe from the left edge to open the Today scope"
1412+#~ msgstr ""
1413+#~ "Dèan grad-shlaighdeadh a-steach on oir chlì gus breath an latha an-diugh "
1414+#~ "fhosgladh"
1415+
14131416#~ msgid "Swipe from the top right edge to open the notification bar"
14141417#~ msgstr ""
14151418#~ "Dèan grad-shlaighdeadh a-nuas on oir dheas a dh’fhosgladh bàr nam brathan"
po/gl.po+9−6
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2017-02-02 07:25+0000\n"
1212"Last-Translator: Marcos Lans <Unknown>\n"
1313"Language-Team: Galician <gl@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -525,7 +525,7 @@ msgstr "Seleccione o ambiente de escritorio"
525525msgid "Search…"
526526msgstr "Buscar..."
527527
528−#: qml/Launcher/Drawer.qml:123
528+#: qml/Launcher/Drawer.qml:127
529529msgctxt "Apps sorted alphabetically"
530530msgid "A-Z"
531531msgstr "A-Z"
@@ -626,8 +626,8 @@ msgid "Drag using 3 fingers any application from one window to the other"
626626msgstr "Arrastre con 3 dedos calquera aplicativo dunha xanela á outra"
627627
628628#: qml/Tutorial/TutorialLeftLong.qml:49
629−msgid "Long swipe from the left edge to open the Today scope"
630−msgstr "Esvare longo desde o bordo esquerdo para abrir o ámbito Hoxe"
629+msgid "Long swipe from the left edge to open the Application Drawer"
630+msgstr ""
631631
632632#: qml/Tutorial/TutorialLeft.qml:47
633633msgid "Short swipe from the left edge to open the launcher"
@@ -1376,6 +1376,9 @@ msgstr "O contrasinal é moi feble"
13761376#~ msgid "Short or long swipe from the right edge to view your open apps"
13771377#~ msgstr "Esvare desde o bordo dereito para ver os aplicativos abertos"
13781378
1379+#~ msgid "Long swipe from the left edge to open the Today scope"
1380+#~ msgstr "Esvare longo desde o bordo esquerdo para abrir o ámbito Hoxe"
1381+
13791382#~ msgid "Swipe from the left edge to open the launcher"
13801383#~ msgstr "Esvare desde o bordo esquerdo para abrir o Iniciador"
13811384
po/gv.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2015-04-02 14:24+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Manx <gv@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : (n == 2 ? 1 : 2);\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -528,7 +528,7 @@ msgstr ""
528528msgid "Search…"
529529msgstr ""
530530
531−#: qml/Launcher/Drawer.qml:123
531+#: qml/Launcher/Drawer.qml:127
532532msgctxt "Apps sorted alphabetically"
533533msgid "A-Z"
534534msgstr ""
@@ -629,7 +629,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
629629msgstr ""
630630
631631#: qml/Tutorial/TutorialLeftLong.qml:49
632−msgid "Long swipe from the left edge to open the Today scope"
632+msgid "Long swipe from the left edge to open the Application Drawer"
633633msgstr ""
634634
635635#: qml/Tutorial/TutorialLeft.qml:47
po/he.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2015-07-12 08:47+0000\n"
1212"Last-Translator: Yaron <sh.yaron@gmail.com>\n"
1313"Language-Team: Hebrew <he@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -521,7 +521,7 @@ msgstr ""
521521msgid "Search…"
522522msgstr ""
523523
524−#: qml/Launcher/Drawer.qml:123
524+#: qml/Launcher/Drawer.qml:127
525525msgctxt "Apps sorted alphabetically"
526526msgid "A-Z"
527527msgstr ""
@@ -622,7 +622,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
622622msgstr ""
623623
624624#: qml/Tutorial/TutorialLeftLong.qml:49
625−msgid "Long swipe from the left edge to open the Today scope"
625+msgid "Long swipe from the left edge to open the Application Drawer"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeft.qml:47
po/hi.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2014-01-15 01:49+0000\n"
1212"Last-Translator: Siddhanathan Shanmugam <Unknown>\n"
1313"Language-Team: Hindi <hi@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -521,7 +521,7 @@ msgstr ""
521521msgid "Search…"
522522msgstr ""
523523
524−#: qml/Launcher/Drawer.qml:123
524+#: qml/Launcher/Drawer.qml:127
525525msgctxt "Apps sorted alphabetically"
526526msgid "A-Z"
527527msgstr ""
@@ -622,7 +622,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
622622msgstr ""
623623
624624#: qml/Tutorial/TutorialLeftLong.qml:49
625−msgid "Long swipe from the left edge to open the Today scope"
625+msgid "Long swipe from the left edge to open the Application Drawer"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeft.qml:47
po/hr.po+9−6
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2016-05-04 17:52+0000\n"
1212"Last-Translator: gogo <trebelnik2@gmail.com>\n"
1313"Language-Team: Croatian <hr@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
20−"X-Generator: Launchpad (build 18322)\n"
19+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
20+"X-Generator: Launchpad (build 18326)\n"
2121
2222#: plugins/LightDM/Greeter.cpp:188
2323msgid "Password: "
@@ -529,7 +529,7 @@ msgstr "Odaberi okruženje radne površine"
529529msgid "Search…"
530530msgstr ""
531531
532−#: qml/Launcher/Drawer.qml:123
532+#: qml/Launcher/Drawer.qml:127
533533msgctxt "Apps sorted alphabetically"
534534msgid "A-Z"
535535msgstr ""
@@ -634,8 +634,8 @@ msgstr ""
634634"Povucite pomoću 3 prsta bilo koju aplikaciju iz jednog prozora u drugi"
635635
636636#: qml/Tutorial/TutorialLeftLong.qml:49
637−msgid "Long swipe from the left edge to open the Today scope"
638−msgstr "Dulje povucite od lijevog ruba za otvaranje današnjeg djelokruga"
637+msgid "Long swipe from the left edge to open the Application Drawer"
638+msgstr ""
639639
640640#: qml/Tutorial/TutorialLeft.qml:47
641641msgid "Short swipe from the left edge to open the launcher"
@@ -1341,6 +1341,9 @@ msgstr "Vrlo slaba lozinka"
13411341#~ msgid "Swipe up to add a contact"
13421342#~ msgstr "Povucite prema gore za dodavanje kontakta"
13431343
1344+#~ msgid "Long swipe from the left edge to open the Today scope"
1345+#~ msgstr "Dulje povucite od lijevog ruba za otvaranje današnjeg djelokruga"
1346+
13441347#~ msgid "Please re-enter"
13451348#~ msgstr "Ponovno upišite"
13461349
po/hu.po+9−6
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2016-08-17 10:53+0000\n"
1212"Last-Translator: Richard Somlói <ricsipontaz@gmail.com>\n"
1313"Language-Team: Hungarian <hu@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -527,7 +527,7 @@ msgstr "Asztali-környezet kiválasztása"
527527msgid "Search…"
528528msgstr ""
529529
530−#: qml/Launcher/Drawer.qml:123
530+#: qml/Launcher/Drawer.qml:127
531531msgctxt "Apps sorted alphabetically"
532532msgid "A-Z"
533533msgstr ""
@@ -629,8 +629,8 @@ msgstr ""
629629"Az alkalmazások 3 ujjal megragadva húzhatóak egyik ablakból a másikba"
630630
631631#: qml/Tutorial/TutorialLeftLong.qml:49
632−msgid "Long swipe from the left edge to open the Today scope"
633−msgstr "Hosszan csúsztasson balról a Ma lencse eléréséhez"
632+msgid "Long swipe from the left edge to open the Application Drawer"
633+msgstr ""
634634
635635#: qml/Tutorial/TutorialLeft.qml:47
636636msgid "Short swipe from the left edge to open the launcher"
@@ -1382,6 +1382,9 @@ msgstr "Nagyon gyenge jelszó"
13821382#~ msgstr ""
13831383#~ "Csúsztasson röviden vagy hosszan jobbról a nyitott alkalmazások eléréshez"
13841384
1385+#~ msgid "Long swipe from the left edge to open the Today scope"
1386+#~ msgstr "Hosszan csúsztasson balról a Ma lencse eléréséhez"
1387+
13851388#~ msgid "Swipe from the left edge to open the launcher"
13861389#~ msgstr "Csúsztasson balról az indító eléréshez"
13871390
po/hy.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2014-10-28 06:34+0000\n"
1212"Last-Translator: Vahan Harutyunyan <Unknown>\n"
1313"Language-Team: Armenian <hy@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:54+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -525,7 +525,7 @@ msgstr ""
525525msgid "Search…"
526526msgstr ""
527527
528−#: qml/Launcher/Drawer.qml:123
528+#: qml/Launcher/Drawer.qml:127
529529msgctxt "Apps sorted alphabetically"
530530msgid "A-Z"
531531msgstr ""
@@ -626,7 +626,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeftLong.qml:49
629−msgid "Long swipe from the left edge to open the Today scope"
629+msgid "Long swipe from the left edge to open the Application Drawer"
630630msgstr ""
631631
632632#: qml/Tutorial/TutorialLeft.qml:47
po/ia.po+9−6
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2015-08-25 19:31+0000\n"
1212"Last-Translator: karm <melo@carmu.com>\n"
1313"Language-Team: Interlingua <ia@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -527,7 +527,7 @@ msgstr "Seliger le ambiente del scriptorio"
527527msgid "Search…"
528528msgstr ""
529529
530−#: qml/Launcher/Drawer.qml:123
530+#: qml/Launcher/Drawer.qml:127
531531msgctxt "Apps sorted alphabetically"
532532msgid "A-Z"
533533msgstr ""
@@ -628,8 +628,8 @@ msgid "Drag using 3 fingers any application from one window to the other"
628628msgstr "Tirar per 3 digitos qualcunque application ab un fenestra al altere"
629629
630630#: qml/Tutorial/TutorialLeftLong.qml:49
631−msgid "Long swipe from the left edge to open the Today scope"
632−msgstr "Striar ab le bordo sinistre pro aperir le campo Hodie"
631+msgid "Long swipe from the left edge to open the Application Drawer"
632+msgstr ""
633633
634634#: qml/Tutorial/TutorialLeft.qml:47
635635msgid "Short swipe from the left edge to open the launcher"
@@ -1367,6 +1367,9 @@ msgstr "Contrasigno troppo debile"
13671367#~ msgid "Swipe up to add a contact"
13681368#~ msgstr "Striar in alto pro adder un contacto"
13691369
1370+#~ msgid "Long swipe from the left edge to open the Today scope"
1371+#~ msgstr "Striar ab le bordo sinistre pro aperir le campo Hodie"
1372+
13701373#~ msgid "Swipe from the top right edge to open the notification bar"
13711374#~ msgstr "Stria ab le bordo alte dextre pro aperir le barra del notificationes"
13721375
po/id.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2013-06-26 22:35+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Indonesian <id@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -524,7 +524,7 @@ msgstr ""
524524msgid "Search…"
525525msgstr ""
526526
527−#: qml/Launcher/Drawer.qml:123
527+#: qml/Launcher/Drawer.qml:127
528528msgctxt "Apps sorted alphabetically"
529529msgid "A-Z"
530530msgstr ""
@@ -625,7 +625,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
625625msgstr ""
626626
627627#: qml/Tutorial/TutorialLeftLong.qml:49
628−msgid "Long swipe from the left edge to open the Today scope"
628+msgid "Long swipe from the left edge to open the Application Drawer"
629629msgstr ""
630630
631631#: qml/Tutorial/TutorialLeft.qml:47
po/is.po+5−5
@@ -9,7 +9,7 @@ msgid ""
99msgstr ""
1010"Project-Id-Version: po_unity8-is\n"
1111"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
12−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
12+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1313"PO-Revision-Date: 2014-11-13 09:32+0000\n"
1414"Last-Translator: Sveinn í Felli <sv1@fellsnet.is>\n"
1515"Language-Team: Icelandic <translation-team-is@lists.sourceforge.net>\n"
@@ -17,8 +17,8 @@ msgstr ""
1717"Content-Type: text/plain; charset=UTF-8\n"
1818"Content-Transfer-Encoding: 8bit\n"
1919"Plural-Forms: nplurals=2; plural=n != 1;\n"
20−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
21−"X-Generator: Launchpad (build 18322)\n"
20+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
21+"X-Generator: Launchpad (build 18326)\n"
2222"Language: is\n"
2323
2424#: plugins/LightDM/Greeter.cpp:188
@@ -530,7 +530,7 @@ msgstr ""
530530msgid "Search…"
531531msgstr ""
532532
533−#: qml/Launcher/Drawer.qml:123
533+#: qml/Launcher/Drawer.qml:127
534534msgctxt "Apps sorted alphabetically"
535535msgid "A-Z"
536536msgstr ""
@@ -631,7 +631,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
631631msgstr ""
632632
633633#: qml/Tutorial/TutorialLeftLong.qml:49
634−msgid "Long swipe from the left edge to open the Today scope"
634+msgid "Long swipe from the left edge to open the Application Drawer"
635635msgstr ""
636636
637637#: qml/Tutorial/TutorialLeft.qml:47
po/it.po+18−15
@@ -7,16 +7,16 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
11−"PO-Revision-Date: 2016-09-11 10:40+0000\n"
12−"Last-Translator: Claudio Arseni <claudio.arseni@gmail.com>\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
11+"PO-Revision-Date: 2017-02-14 10:03+0000\n"
12+"Last-Translator: Milo Casagrande <milo.casagrande@gmail.com>\n"
1313"Language-Team: Italian <it@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -24,15 +24,15 @@ msgstr "Password: "
2424
2525#: plugins/LightDM/Greeter.cpp:203
2626msgid "Username"
27−msgstr ""
27+msgstr "Nome utente"
2828
2929#: plugins/LightDM/Greeter.cpp:242
3030msgid "Failed to authenticate"
31−msgstr ""
31+msgstr "Autenticazione non riuscita"
3232
3333#: plugins/LightDM/Greeter.cpp:244
3434msgid "Invalid password, please try again"
35−msgstr ""
35+msgstr "Password non valida, riprovare"
3636
3737#: plugins/LightDM/Greeter.cpp:254
3838msgid "Log In"
@@ -44,11 +44,11 @@ msgstr "Riprova"
4444
4545#: plugins/LightDM/UsersModel.cpp:152
4646msgid "Login"
47−msgstr ""
47+msgstr "Accesso"
4848
4949#: plugins/LightDM/UsersModel.cpp:160
5050msgid "Guest Session"
51−msgstr ""
51+msgstr "Sessione ospite"
5252
5353#: plugins/Unity/Launcher/launcheritem.cpp:50
5454#: plugins/Unity/Launcher/launcheritem.cpp:122
@@ -151,7 +151,7 @@ msgstr "Alt + Stamp"
151151
152152#: qml/Components/KeyboardShortcutsOverlay.qml:80
153153msgid "Takes a screenshot of the current window."
154−msgstr ""
154+msgstr "Cattura una schermata della finestra corrente"
155155
156156#: qml/Components/KeyboardShortcutsOverlay.qml:88
157157msgid "Super + Space"
@@ -207,7 +207,7 @@ msgstr "Come fare clic su un'icona del Launcher"
207207
208208#: qml/Components/KeyboardShortcutsOverlay.qml:177
209209msgid "Super + A"
210−msgstr ""
210+msgstr "Super + A"
211211
212212#: qml/Components/KeyboardShortcutsOverlay.qml:182
213213msgid "Opens the Application Drawer."
@@ -531,7 +531,7 @@ msgstr ""
531531msgid "Search…"
532532msgstr ""
533533
534−#: qml/Launcher/Drawer.qml:123
534+#: qml/Launcher/Drawer.qml:127
535535msgctxt "Apps sorted alphabetically"
536536msgid "A-Z"
537537msgstr ""
@@ -633,8 +633,8 @@ msgstr ""
633633"Trascinare con 3 dita qualsiasi applicazione da una finestra all'altra"
634634
635635#: qml/Tutorial/TutorialLeftLong.qml:49
636−msgid "Long swipe from the left edge to open the Today scope"
637−msgstr "Scorrere lentamente dal bordo sinistro per aprire la scope Oggi"
636+msgid "Long swipe from the left edge to open the Application Drawer"
637+msgstr ""
638638
639639#: qml/Tutorial/TutorialLeft.qml:47
640640msgid "Short swipe from the left edge to open the launcher"
@@ -1390,6 +1390,9 @@ msgstr "Password molto fragile"
13901390#~ msgid "Swipe up to add a contact"
13911391#~ msgstr "Scorrere verso l'alto per aggiungere un contatto"
13921392
1393+#~ msgid "Long swipe from the left edge to open the Today scope"
1394+#~ msgstr "Scorrere lentamente dal bordo sinistro per aprire la scope Oggi"
1395+
13931396#~ msgid "Hover your mouse on the right edge to view your open apps"
13941397#~ msgstr ""
13951398#~ "Posizionare il mouse sul bordo destro per vedere le applicazioni aperte"
po/ja.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2015-10-05 10:05+0000\n"
1212"Last-Translator: Kentaro Kazuhama <Unknown>\n"
1313"Language-Team: Japanese <ja@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -520,7 +520,7 @@ msgstr ""
520520msgid "Search…"
521521msgstr ""
522522
523−#: qml/Launcher/Drawer.qml:123
523+#: qml/Launcher/Drawer.qml:127
524524msgctxt "Apps sorted alphabetically"
525525msgid "A-Z"
526526msgstr ""
@@ -621,7 +621,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
621621msgstr ""
622622
623623#: qml/Tutorial/TutorialLeftLong.qml:49
624−msgid "Long swipe from the left edge to open the Today scope"
624+msgid "Long swipe from the left edge to open the Application Drawer"
625625msgstr ""
626626
627627#: qml/Tutorial/TutorialLeft.qml:47
po/km.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2014-08-20 02:48+0000\n"
1212"Last-Translator: Sophea Sok <sksophea@gmail.com>\n"
1313"Language-Team: Khmer <km@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -523,7 +523,7 @@ msgstr ""
523523msgid "Search…"
524524msgstr ""
525525
526−#: qml/Launcher/Drawer.qml:123
526+#: qml/Launcher/Drawer.qml:127
527527msgctxt "Apps sorted alphabetically"
528528msgid "A-Z"
529529msgstr ""
@@ -621,7 +621,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
621621msgstr ""
622622
623623#: qml/Tutorial/TutorialLeftLong.qml:49
624−msgid "Long swipe from the left edge to open the Today scope"
624+msgid "Long swipe from the left edge to open the Application Drawer"
625625msgstr ""
626626
627627#: qml/Tutorial/TutorialLeft.qml:47
po/kn.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2013-06-27 05:43+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Kannada <kn@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -521,7 +521,7 @@ msgstr ""
521521msgid "Search…"
522522msgstr ""
523523
524−#: qml/Launcher/Drawer.qml:123
524+#: qml/Launcher/Drawer.qml:127
525525msgctxt "Apps sorted alphabetically"
526526msgid "A-Z"
527527msgstr ""
@@ -622,7 +622,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
622622msgstr ""
623623
624624#: qml/Tutorial/TutorialLeftLong.qml:49
625−msgid "Long swipe from the left edge to open the Today scope"
625+msgid "Long swipe from the left edge to open the Application Drawer"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeft.qml:47
po/ko.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2014-08-19 13:02+0000\n"
1212"Last-Translator: MinSik CHO <Unknown>\n"
1313"Language-Team: Korean <ko@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -520,7 +520,7 @@ msgstr ""
520520msgid "Search…"
521521msgstr ""
522522
523−#: qml/Launcher/Drawer.qml:123
523+#: qml/Launcher/Drawer.qml:127
524524msgctxt "Apps sorted alphabetically"
525525msgid "A-Z"
526526msgstr ""
@@ -618,7 +618,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
618618msgstr ""
619619
620620#: qml/Tutorial/TutorialLeftLong.qml:49
621−msgid "Long swipe from the left edge to open the Today scope"
621+msgid "Long swipe from the left edge to open the Application Drawer"
622622msgstr ""
623623
624624#: qml/Tutorial/TutorialLeft.qml:47
po/ku.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2014-09-10 13:14+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Kurdish <ku@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -523,7 +523,7 @@ msgstr ""
523523msgid "Search…"
524524msgstr ""
525525
526−#: qml/Launcher/Drawer.qml:123
526+#: qml/Launcher/Drawer.qml:127
527527msgctxt "Apps sorted alphabetically"
528528msgid "A-Z"
529529msgstr ""
@@ -624,7 +624,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
624624msgstr ""
625625
626626#: qml/Tutorial/TutorialLeftLong.qml:49
627−msgid "Long swipe from the left edge to open the Today scope"
627+msgid "Long swipe from the left edge to open the Application Drawer"
628628msgstr ""
629629
630630#: qml/Tutorial/TutorialLeft.qml:47
po/ky.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2013-06-27 06:17+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Kirghiz <ky@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -521,7 +521,7 @@ msgstr ""
521521msgid "Search…"
522522msgstr ""
523523
524−#: qml/Launcher/Drawer.qml:123
524+#: qml/Launcher/Drawer.qml:127
525525msgctxt "Apps sorted alphabetically"
526526msgid "A-Z"
527527msgstr ""
@@ -622,7 +622,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
622622msgstr ""
623623
624624#: qml/Tutorial/TutorialLeftLong.qml:49
625−msgid "Long swipe from the left edge to open the Today scope"
625+msgid "Long swipe from the left edge to open the Application Drawer"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeft.qml:47
po/lo.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2013-10-02 10:00+0000\n"
1212"Last-Translator: Anousak <anousak@gmail.com>\n"
1313"Language-Team: Lao <lo@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -521,7 +521,7 @@ msgstr ""
521521msgid "Search…"
522522msgstr ""
523523
524−#: qml/Launcher/Drawer.qml:123
524+#: qml/Launcher/Drawer.qml:127
525525msgctxt "Apps sorted alphabetically"
526526msgid "A-Z"
527527msgstr ""
@@ -622,7 +622,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
622622msgstr ""
623623
624624#: qml/Tutorial/TutorialLeftLong.qml:49
625−msgid "Long swipe from the left edge to open the Today scope"
625+msgid "Long swipe from the left edge to open the Application Drawer"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeft.qml:47
po/lt.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2014-05-19 17:15+0000\n"
1212"Last-Translator: Mantas Kriaučiūnas <mantas@akl.lt>\n"
1313"Language-Team: Lithuanian <lt@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"(n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
20−"X-Generator: Launchpad (build 18322)\n"
19+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
20+"X-Generator: Launchpad (build 18326)\n"
2121
2222#: plugins/LightDM/Greeter.cpp:188
2323msgid "Password: "
@@ -522,7 +522,7 @@ msgstr ""
522522msgid "Search…"
523523msgstr ""
524524
525−#: qml/Launcher/Drawer.qml:123
525+#: qml/Launcher/Drawer.qml:127
526526msgctxt "Apps sorted alphabetically"
527527msgid "A-Z"
528528msgstr ""
@@ -623,7 +623,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
623623msgstr ""
624624
625625#: qml/Tutorial/TutorialLeftLong.qml:49
626−msgid "Long swipe from the left edge to open the Today scope"
626+msgid "Long swipe from the left edge to open the Application Drawer"
627627msgstr ""
628628
629629#: qml/Tutorial/TutorialLeft.qml:47
po/lv.po+5−5
@@ -8,7 +8,7 @@ msgid ""
88msgstr ""
99"Project-Id-Version: unity\n"
1010"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
11−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
11+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1212"PO-Revision-Date: 2015-11-22 19:13+0000\n"
1313"Last-Translator: Klavs Anson <anson.klavs@gmail.com>\n"
1414"Language-Team: Latvian <lata-l10n@googlegroups.com>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Type: text/plain; charset=UTF-8\n"
1717"Content-Transfer-Encoding: 8bit\n"
1818"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
20−"X-Generator: Launchpad (build 18322)\n"
19+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
20+"X-Generator: Launchpad (build 18326)\n"
2121"Language: lv\n"
2222
2323#: plugins/LightDM/Greeter.cpp:188
@@ -526,7 +526,7 @@ msgstr ""
526526msgid "Search…"
527527msgstr ""
528528
529−#: qml/Launcher/Drawer.qml:123
529+#: qml/Launcher/Drawer.qml:127
530530msgctxt "Apps sorted alphabetically"
531531msgid "A-Z"
532532msgstr ""
@@ -630,7 +630,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
630630msgstr ""
631631
632632#: qml/Tutorial/TutorialLeftLong.qml:49
633−msgid "Long swipe from the left edge to open the Today scope"
633+msgid "Long swipe from the left edge to open the Application Drawer"
634634msgstr ""
635635
636636#: qml/Tutorial/TutorialLeft.qml:47
po/ml.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2013-11-23 11:44+0000\n"
1212"Last-Translator: ST Alfas <Unknown>\n"
1313"Language-Team: Malayalam <ml@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -521,7 +521,7 @@ msgstr ""
521521msgid "Search…"
522522msgstr ""
523523
524−#: qml/Launcher/Drawer.qml:123
524+#: qml/Launcher/Drawer.qml:127
525525msgctxt "Apps sorted alphabetically"
526526msgid "A-Z"
527527msgstr ""
@@ -622,7 +622,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
622622msgstr ""
623623
624624#: qml/Tutorial/TutorialLeftLong.qml:49
625−msgid "Long swipe from the left edge to open the Today scope"
625+msgid "Long swipe from the left edge to open the Application Drawer"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeft.qml:47
po/mr.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2014-01-14 19:54+0000\n"
1212"Last-Translator: Rohan Deshmukh <Unknown>\n"
1313"Language-Team: Marathi <mr@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -521,7 +521,7 @@ msgstr ""
521521msgid "Search…"
522522msgstr ""
523523
524−#: qml/Launcher/Drawer.qml:123
524+#: qml/Launcher/Drawer.qml:127
525525msgctxt "Apps sorted alphabetically"
526526msgid "A-Z"
527527msgstr ""
@@ -622,7 +622,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
622622msgstr ""
623623
624624#: qml/Tutorial/TutorialLeftLong.qml:49
625−msgid "Long swipe from the left edge to open the Today scope"
625+msgid "Long swipe from the left edge to open the Application Drawer"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeft.qml:47
po/ms.po+9−6
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2016-12-20 14:02+0000\n"
1212"Last-Translator: abuyop <Unknown>\n"
1313"Language-Team: Malay <ms@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -525,7 +525,7 @@ msgstr "Pilih persekitaran desktop"
525525msgid "Search…"
526526msgstr "Gelintar..."
527527
528−#: qml/Launcher/Drawer.qml:123
528+#: qml/Launcher/Drawer.qml:127
529529msgctxt "Apps sorted alphabetically"
530530msgid "A-Z"
531531msgstr "A-Z"
@@ -628,8 +628,8 @@ msgstr ""
628628"tetingkap yang lain"
629629
630630#: qml/Tutorial/TutorialLeftLong.qml:49
631−msgid "Long swipe from the left edge to open the Today scope"
632−msgstr "Leret panjang dari pinggir kiri untuk membuka skop Hari Ini"
631+msgid "Long swipe from the left edge to open the Application Drawer"
632+msgstr ""
633633
634634#: qml/Tutorial/TutorialLeft.qml:47
635635msgid "Short swipe from the left edge to open the launcher"
@@ -1383,6 +1383,9 @@ msgstr "Kata laluan sangat lemah"
13831383#~ msgid "Swipe up to create a message"
13841384#~ msgstr "Leret ke atas untuk cipta satu mesej"
13851385
1386+#~ msgid "Long swipe from the left edge to open the Today scope"
1387+#~ msgstr "Leret panjang dari pinggir kiri untuk membuka skop Hari Ini"
1388+
13861389#~ msgid "Hover your mouse on the right edge to view your open apps"
13871390#~ msgstr ""
13881391#~ "Letak penuding tetikus anda dipinggir kanan untuk melihat apl anda yang "
po/my.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2013-12-12 11:12+0000\n"
1212"Last-Translator: Pyae Sone <Unknown>\n"
1313"Language-Team: Burmese <my@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:54+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -521,7 +521,7 @@ msgstr ""
521521msgid "Search…"
522522msgstr ""
523523
524−#: qml/Launcher/Drawer.qml:123
524+#: qml/Launcher/Drawer.qml:127
525525msgctxt "Apps sorted alphabetically"
526526msgid "A-Z"
527527msgstr ""
@@ -622,7 +622,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
622622msgstr ""
623623
624624#: qml/Tutorial/TutorialLeftLong.qml:49
625−msgid "Long swipe from the left edge to open the Today scope"
625+msgid "Long swipe from the left edge to open the Application Drawer"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeft.qml:47
po/nb.po+9−6
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2017-01-27 07:01+0000\n"
1212"Last-Translator: Åka Sikrom <Unknown>\n"
1313"Language-Team: Norwegian Bokmal <nb@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -529,7 +529,7 @@ msgstr "Velg skrivebordsmiljø"
529529msgid "Search…"
530530msgstr "Søk …"
531531
532−#: qml/Launcher/Drawer.qml:123
532+#: qml/Launcher/Drawer.qml:127
533533msgctxt "Apps sorted alphabetically"
534534msgid "A-Z"
535535msgstr "A-Å"
@@ -630,8 +630,8 @@ msgid "Drag using 3 fingers any application from one window to the other"
630630msgstr "Dra et program fra et vindu til et annet med 3 fingre"
631631
632632#: qml/Tutorial/TutorialLeftLong.qml:49
633−msgid "Long swipe from the left edge to open the Today scope"
634−msgstr "Dra langt fra venstre kant for å åpne virkefeltet «I dag»"
633+msgid "Long swipe from the left edge to open the Application Drawer"
634+msgstr ""
635635
636636#: qml/Tutorial/TutorialLeft.qml:47
637637msgid "Short swipe from the left edge to open the launcher"
@@ -1372,5 +1372,8 @@ msgstr "Veldig svakt passord"
13721372#~ msgid "Swipe up to create a message"
13731373#~ msgstr "Dra opp for å lage en melding"
13741374
1375+#~ msgid "Long swipe from the left edge to open the Today scope"
1376+#~ msgstr "Dra langt fra venstre kant for å åpne virkefeltet «I dag»"
1377+
13751378#~ msgid "Takes a screenshot of a window."
13761379#~ msgstr "Tar bilde av et vindu."
po/ne.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2015-12-06 15:11+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Nepali <ne@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -521,7 +521,7 @@ msgstr ""
521521msgid "Search…"
522522msgstr ""
523523
524−#: qml/Launcher/Drawer.qml:123
524+#: qml/Launcher/Drawer.qml:127
525525msgctxt "Apps sorted alphabetically"
526526msgid "A-Z"
527527msgstr ""
@@ -622,7 +622,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
622622msgstr ""
623623
624624#: qml/Tutorial/TutorialLeftLong.qml:49
625−msgid "Long swipe from the left edge to open the Today scope"
625+msgid "Long swipe from the left edge to open the Application Drawer"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeft.qml:47
po/nl.po+9−6
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2016-11-01 08:29+0000\n"
1212"Last-Translator: Hannie Dumoleyn <Unknown>\n"
1313"Language-Team: Dutch <nl@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -532,7 +532,7 @@ msgstr "Bureaubladomgeving selecteren"
532532msgid "Search…"
533533msgstr ""
534534
535−#: qml/Launcher/Drawer.qml:123
535+#: qml/Launcher/Drawer.qml:127
536536msgctxt "Apps sorted alphabetically"
537537msgid "A-Z"
538538msgstr ""
@@ -634,8 +634,8 @@ msgstr ""
634634"Een toepassing met 3 vingers slepen van het ene venster naar het andere"
635635
636636#: qml/Tutorial/TutorialLeftLong.qml:49
637−msgid "Long swipe from the left edge to open the Today scope"
638−msgstr "Lang vanaf de linkerkant vegen om de Vandaag-scope te openen"
637+msgid "Long swipe from the left edge to open the Application Drawer"
638+msgstr ""
639639
640640#: qml/Tutorial/TutorialLeft.qml:47
641641msgid "Short swipe from the left edge to open the launcher"
@@ -1385,5 +1385,8 @@ msgstr "Zeer zwak wachtwoord"
13851385#~ msgid "Swipe up to manage the app"
13861386#~ msgstr "Omhoog vegen om de app te beheren"
13871387
1388+#~ msgid "Long swipe from the left edge to open the Today scope"
1389+#~ msgstr "Lang vanaf de linkerkant vegen om de Vandaag-scope te openen"
1390+
13881391#~ msgid "Takes a screenshot of a window."
13891392#~ msgstr "Maakt een schermafdruk van een venster."
po/nn.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2015-05-12 11:32+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Norwegian Nynorsk <nn@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -521,7 +521,7 @@ msgstr ""
521521msgid "Search…"
522522msgstr ""
523523
524−#: qml/Launcher/Drawer.qml:123
524+#: qml/Launcher/Drawer.qml:127
525525msgctxt "Apps sorted alphabetically"
526526msgid "A-Z"
527527msgstr ""
@@ -622,7 +622,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
622622msgstr ""
623623
624624#: qml/Tutorial/TutorialLeftLong.qml:49
625−msgid "Long swipe from the left edge to open the Today scope"
625+msgid "Long swipe from the left edge to open the Application Drawer"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeft.qml:47
po/oc.po+10−7
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2016-10-27 13:43+0000\n"
1212"Last-Translator: Cédric VALMARY (Tot en òc) <cvalmary@yahoo.fr>\n"
1313"Language-Team: Occitan (post 1500) <oc@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -532,7 +532,7 @@ msgstr "Seleccionar l'environament de burèu"
532532msgid "Search…"
533533msgstr ""
534534
535−#: qml/Launcher/Drawer.qml:123
535+#: qml/Launcher/Drawer.qml:127
536536msgctxt "Apps sorted alphabetically"
537537msgid "A-Z"
538538msgstr ""
@@ -634,10 +634,8 @@ msgstr ""
634634"Fasètz lisar amb 3 dets quina aplicacion que siá d'una fenèstra a l'autra"
635635
636636#: qml/Tutorial/TutorialLeftLong.qml:49
637−msgid "Long swipe from the left edge to open the Today scope"
637+msgid "Long swipe from the left edge to open the Application Drawer"
638638msgstr ""
639−"Fasètz lisar a partir del bòrd esquèrre fins al bòrd dreit per dobrir lo "
640−"motor de recèrca Uèi"
641639
642640#: qml/Tutorial/TutorialLeft.qml:47
643641msgid "Short swipe from the left edge to open the launcher"
@@ -1270,3 +1268,8 @@ msgstr "Senhal fòrça feble"
12701268
12711269#~ msgid "Takes a screenshot of a window."
12721270#~ msgstr "Prend una captura d'ecran d'una fenèstra."
1271+
1272+#~ msgid "Long swipe from the left edge to open the Today scope"
1273+#~ msgstr ""
1274+#~ "Fasètz lisar a partir del bòrd esquèrre fins al bòrd dreit per dobrir lo "
1275+#~ "motor de recèrca Uèi"
po/or.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2015-03-21 05:28+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Oriya <or@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n!=1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -521,7 +521,7 @@ msgstr ""
521521msgid "Search…"
522522msgstr ""
523523
524−#: qml/Launcher/Drawer.qml:123
524+#: qml/Launcher/Drawer.qml:127
525525msgctxt "Apps sorted alphabetically"
526526msgid "A-Z"
527527msgstr ""
@@ -622,7 +622,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
622622msgstr ""
623623
624624#: qml/Tutorial/TutorialLeftLong.qml:49
625−msgid "Long swipe from the left edge to open the Today scope"
625+msgid "Long swipe from the left edge to open the Application Drawer"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeft.qml:47
po/pa.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2015-04-24 04:29+0000\n"
1212"Last-Translator: Gursharnjit_Singh <ubuntuser13@gmail.com>\n"
1313"Language-Team: Punjabi <pa@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -523,7 +523,7 @@ msgstr ""
523523msgid "Search…"
524524msgstr ""
525525
526−#: qml/Launcher/Drawer.qml:123
526+#: qml/Launcher/Drawer.qml:127
527527msgctxt "Apps sorted alphabetically"
528528msgid "A-Z"
529529msgstr ""
@@ -624,7 +624,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
624624msgstr ""
625625
626626#: qml/Tutorial/TutorialLeftLong.qml:49
627−msgid "Long swipe from the left edge to open the Today scope"
627+msgid "Long swipe from the left edge to open the Application Drawer"
628628msgstr ""
629629
630630#: qml/Tutorial/TutorialLeft.qml:47
po/pl.po+9−6
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2016-11-01 15:06+0000\n"
1212"Last-Translator: Krzysztof Tataradziński <Unknown>\n"
1313"Language-Team: Polish <pl@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
1818"|| n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
20−"X-Generator: Launchpad (build 18322)\n"
19+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
20+"X-Generator: Launchpad (build 18326)\n"
2121
2222#: plugins/LightDM/Greeter.cpp:188
2323msgid "Password: "
@@ -526,7 +526,7 @@ msgstr "Wybierz środowisko graficzne"
526526msgid "Search…"
527527msgstr ""
528528
529−#: qml/Launcher/Drawer.qml:123
529+#: qml/Launcher/Drawer.qml:127
530530msgctxt "Apps sorted alphabetically"
531531msgid "A-Z"
532532msgstr ""
@@ -631,8 +631,8 @@ msgstr ""
631631"Przeciągnij 3 palcami jakąkolwiek aplikację z jednego okna do drugiego"
632632
633633#: qml/Tutorial/TutorialLeftLong.qml:49
634−msgid "Long swipe from the left edge to open the Today scope"
635−msgstr "Długie przeciągnięcie od lewej krawędzi otwiera aplikacje soczewek"
634+msgid "Long swipe from the left edge to open the Application Drawer"
635+msgstr ""
636636
637637#: qml/Tutorial/TutorialLeft.qml:47
638638msgid "Short swipe from the left edge to open the launcher"
@@ -1361,6 +1361,9 @@ msgstr "Bardzo słabe hasło"
13611361#~ msgid "Swipe up to add a contact"
13621362#~ msgstr "Przeciągnij w górę, by dodać kontakt"
13631363
1364+#~ msgid "Long swipe from the left edge to open the Today scope"
1365+#~ msgstr "Długie przeciągnięcie od lewej krawędzi otwiera aplikacje soczewek"
1366+
13641367#~ msgid "Swipe from the top right edge to open the notification bar"
13651368#~ msgstr "Przeciągnij z prawego, górnego rogu, by otworzyć menu powiadomień"
13661369
po/pt.po+9−6
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2016-06-20 11:37+0000\n"
1212"Last-Translator: Ivo Xavier <ivoxavier.8@gmail.com>\n"
1313"Language-Team: Portuguese <pt@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -530,7 +530,7 @@ msgstr "Selecione o ambiente de trabalho"
530530msgid "Search…"
531531msgstr ""
532532
533−#: qml/Launcher/Drawer.qml:123
533+#: qml/Launcher/Drawer.qml:127
534534msgctxt "Apps sorted alphabetically"
535535msgid "A-Z"
536536msgstr ""
@@ -631,8 +631,8 @@ msgid "Drag using 3 fingers any application from one window to the other"
631631msgstr "Arraste qualquer app usando três dedos de uma janela para outra"
632632
633633#: qml/Tutorial/TutorialLeftLong.qml:49
634−msgid "Long swipe from the left edge to open the Today scope"
635−msgstr "Deslize longo da margem esquerda para abrir a scope Hoje"
634+msgid "Long swipe from the left edge to open the Application Drawer"
635+msgstr ""
636636
637637#: qml/Tutorial/TutorialLeft.qml:47
638638msgid "Short swipe from the left edge to open the launcher"
@@ -1352,6 +1352,9 @@ msgstr "Palavra-passe muito fraca"
13521352#~ msgid "Swipe up to add a contact"
13531353#~ msgstr "Deslize para adicionar um contacto"
13541354
1355+#~ msgid "Long swipe from the left edge to open the Today scope"
1356+#~ msgstr "Deslize longo da margem esquerda para abrir a scope Hoje"
1357+
13551358#~ msgid "Swipe from the left edge to open the launcher"
13561359#~ msgstr "Deslize da margem esquerda para abrir o Launcher"
13571360
po/pt_BR.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2015-08-05 04:40+0000\n"
1212"Last-Translator: Julio Alexander Sieg <julio.sieg@gmail.com>\n"
1313"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:56+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:06+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -525,7 +525,7 @@ msgstr ""
525525msgid "Search…"
526526msgstr ""
527527
528−#: qml/Launcher/Drawer.qml:123
528+#: qml/Launcher/Drawer.qml:127
529529msgctxt "Apps sorted alphabetically"
530530msgid "A-Z"
531531msgstr ""
@@ -626,7 +626,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeftLong.qml:49
629−msgid "Long swipe from the left edge to open the Today scope"
629+msgid "Long swipe from the left edge to open the Application Drawer"
630630msgstr ""
631631
632632#: qml/Tutorial/TutorialLeft.qml:47
po/ro.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2015-07-06 17:47+0000\n"
1212"Last-Translator: Meriuță Cornel <meriutacornel@neacornel.eu>\n"
1313"Language-Team: Romanian <ro@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 "
1818"== 0) && (n != 0))) ? 2: 1));\n"
19−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
20−"X-Generator: Launchpad (build 18322)\n"
19+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
20+"X-Generator: Launchpad (build 18326)\n"
2121
2222#: plugins/LightDM/Greeter.cpp:188
2323msgid "Password: "
@@ -528,7 +528,7 @@ msgstr ""
528528msgid "Search…"
529529msgstr ""
530530
531−#: qml/Launcher/Drawer.qml:123
531+#: qml/Launcher/Drawer.qml:127
532532msgctxt "Apps sorted alphabetically"
533533msgid "A-Z"
534534msgstr ""
@@ -632,7 +632,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
632632msgstr ""
633633
634634#: qml/Tutorial/TutorialLeftLong.qml:49
635−msgid "Long swipe from the left edge to open the Today scope"
635+msgid "Long swipe from the left edge to open the Application Drawer"
636636msgstr ""
637637
638638#: qml/Tutorial/TutorialLeft.qml:47
po/ru.po+8−8
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2015-07-06 05:33+0000\n"
1212"Last-Translator: ☠Jay ZDLin☠ <Unknown>\n"
1313"Language-Team: Russian <ru@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
20−"X-Generator: Launchpad (build 18322)\n"
19+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
20+"X-Generator: Launchpad (build 18326)\n"
2121
2222#: plugins/LightDM/Greeter.cpp:188
2323msgid "Password: "
@@ -49,7 +49,7 @@ msgstr ""
4949
5050#: plugins/LightDM/UsersModel.cpp:160
5151msgid "Guest Session"
52−msgstr ""
52+msgstr "Гостевой сеанс"
5353
5454#: plugins/Unity/Launcher/launcheritem.cpp:50
5555#: plugins/Unity/Launcher/launcheritem.cpp:122
@@ -150,7 +150,7 @@ msgstr "Alt + PrtScr"
150150
151151#: qml/Components/KeyboardShortcutsOverlay.qml:80
152152msgid "Takes a screenshot of the current window."
153−msgstr ""
153+msgstr "Сделать снимок текущего окна."
154154
155155#: qml/Components/KeyboardShortcutsOverlay.qml:88
156156msgid "Super + Space"
@@ -254,7 +254,7 @@ msgstr "Переместить фокус."
254254
255255#: qml/Components/KeyboardShortcutsOverlay.qml:272
256256msgid "Windows"
257−msgstr ""
257+msgstr "Окна"
258258
259259#: qml/Components/KeyboardShortcutsOverlay.qml:279
260260msgid "Ctrl + Super + D"
@@ -529,7 +529,7 @@ msgstr ""
529529msgid "Search…"
530530msgstr ""
531531
532−#: qml/Launcher/Drawer.qml:123
532+#: qml/Launcher/Drawer.qml:127
533533msgctxt "Apps sorted alphabetically"
534534msgid "A-Z"
535535msgstr ""
@@ -633,7 +633,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
633633msgstr "Передвигайте любое приложение с помощью трёх пальцев"
634634
635635#: qml/Tutorial/TutorialLeftLong.qml:49
636−msgid "Long swipe from the left edge to open the Today scope"
636+msgid "Long swipe from the left edge to open the Application Drawer"
637637msgstr ""
638638
639639#: qml/Tutorial/TutorialLeft.qml:47
po/shn.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2015-11-10 12:09+0000\n"
1212"Last-Translator: Rockworld <sumoisrock@gmail.com>\n"
1313"Language-Team: Shan <shn@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=(n == 1) ? 0 : 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -521,7 +521,7 @@ msgstr ""
521521msgid "Search…"
522522msgstr ""
523523
524−#: qml/Launcher/Drawer.qml:123
524+#: qml/Launcher/Drawer.qml:127
525525msgctxt "Apps sorted alphabetically"
526526msgid "A-Z"
527527msgstr ""
@@ -622,7 +622,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
622622msgstr ""
623623
624624#: qml/Tutorial/TutorialLeftLong.qml:49
625−msgid "Long swipe from the left edge to open the Today scope"
625+msgid "Long swipe from the left edge to open the Application Drawer"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeft.qml:47
po/si.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2013-06-26 22:36+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Sinhalese <si@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -523,7 +523,7 @@ msgstr ""
523523msgid "Search…"
524524msgstr ""
525525
526−#: qml/Launcher/Drawer.qml:123
526+#: qml/Launcher/Drawer.qml:127
527527msgctxt "Apps sorted alphabetically"
528528msgid "A-Z"
529529msgstr ""
@@ -624,7 +624,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
624624msgstr ""
625625
626626#: qml/Tutorial/TutorialLeftLong.qml:49
627−msgid "Long swipe from the left edge to open the Today scope"
627+msgid "Long swipe from the left edge to open the Application Drawer"
628628msgstr ""
629629
630630#: qml/Tutorial/TutorialLeft.qml:47
po/sk.po+9−6
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2016-09-28 04:43+0000\n"
1212"Last-Translator: P_E_T_O <Unknown>\n"
1313"Language-Team: Slovak <sk@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020"Language: sk\n"
2121
2222#: plugins/LightDM/Greeter.cpp:188
@@ -532,7 +532,7 @@ msgstr "Vybrať pracovné prostredie"
532532msgid "Search…"
533533msgstr ""
534534
535−#: qml/Launcher/Drawer.qml:123
535+#: qml/Launcher/Drawer.qml:127
536536msgctxt "Apps sorted alphabetically"
537537msgid "A-Z"
538538msgstr ""
@@ -637,8 +637,8 @@ msgstr ""
637637"Potiahnite pomocou 3 prstov ľubovoľnú aplikáciu z jedného okna do druhého"
638638
639639#: qml/Tutorial/TutorialLeftLong.qml:49
640−msgid "Long swipe from the left edge to open the Today scope"
641−msgstr "Dlhé potiahnutie od ľavého okraja pre otvorenie scope Dnes"
640+msgid "Long swipe from the left edge to open the Application Drawer"
641+msgstr ""
642642
643643#: qml/Tutorial/TutorialLeft.qml:47
644644msgid "Short swipe from the left edge to open the launcher"
@@ -1275,6 +1275,9 @@ msgstr "Heslo je veľmi slabé"
12751275#~ "Krátke alebo dlhé potiahnutie od pravého okraja pre zobrazenie otvorených "
12761276#~ "aplikácií"
12771277
1278+#~ msgid "Long swipe from the left edge to open the Today scope"
1279+#~ msgstr "Dlhé potiahnutie od ľavého okraja pre otvorenie scope Dnes"
1280+
12781281#~ msgid "Log out"
12791282#~ msgstr "Odhlásiť sa"
12801283
po/sl.po+9−6
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2016-01-31 18:34+0000\n"
1212"Last-Translator: Bernard Banko <Unknown>\n"
1313"Language-Team: Slovenian <sl@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || "
1818"n%100==4 ? 3 : 0);\n"
19−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
20−"X-Generator: Launchpad (build 18322)\n"
19+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
20+"X-Generator: Launchpad (build 18326)\n"
2121
2222#: plugins/LightDM/Greeter.cpp:188
2323msgid "Password: "
@@ -530,7 +530,7 @@ msgstr "Izberite namizno okolje"
530530msgid "Search…"
531531msgstr ""
532532
533−#: qml/Launcher/Drawer.qml:123
533+#: qml/Launcher/Drawer.qml:127
534534msgctxt "Apps sorted alphabetically"
535535msgid "A-Z"
536536msgstr ""
@@ -637,8 +637,8 @@ msgid "Drag using 3 fingers any application from one window to the other"
637637msgstr "S tremi prsti povlecite program iz enega v drugo okno"
638638
639639#: qml/Tutorial/TutorialLeftLong.qml:49
640−msgid "Long swipe from the left edge to open the Today scope"
641−msgstr "Nadolgo potegnite levi rob za odpiranje vira Danes"
640+msgid "Long swipe from the left edge to open the Application Drawer"
641+msgstr ""
642642
643643#: qml/Tutorial/TutorialLeft.qml:47
644644msgid "Short swipe from the left edge to open the launcher"
@@ -1368,6 +1368,9 @@ msgstr "Zelo šibko geslo"
13681368#~ msgid "Swipe up to add a contact"
13691369#~ msgstr "Za dodajanje stika potegnite navzgor"
13701370
1371+#~ msgid "Long swipe from the left edge to open the Today scope"
1372+#~ msgstr "Nadolgo potegnite levi rob za odpiranje vira Danes"
1373+
13711374#~ msgid "Swipe from the top right edge to open the notification bar"
13721375#~ msgstr "Za odpiranje obvestilne plošče potegnite desni del zgornjega roba"
13731376
po/sq.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2016-04-21 06:03+0000\n"
1212"Last-Translator: Indrit Bashkimi <indrit.bashkimi@gmail.com>\n"
1313"Language-Team: sq\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:54+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:04+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020"Language: sq\n"
2121
2222#: plugins/LightDM/Greeter.cpp:188
@@ -522,7 +522,7 @@ msgstr ""
522522msgid "Search…"
523523msgstr ""
524524
525−#: qml/Launcher/Drawer.qml:123
525+#: qml/Launcher/Drawer.qml:127
526526msgctxt "Apps sorted alphabetically"
527527msgid "A-Z"
528528msgstr ""
@@ -623,7 +623,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
623623msgstr ""
624624
625625#: qml/Tutorial/TutorialLeftLong.qml:49
626−msgid "Long swipe from the left edge to open the Today scope"
626+msgid "Long swipe from the left edge to open the Application Drawer"
627627msgstr ""
628628
629629#: qml/Tutorial/TutorialLeft.qml:47
po/sr.po+9−6
@@ -8,7 +8,7 @@ msgid ""
88msgstr ""
99"Project-Id-Version: unity\n"
1010"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
11−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
11+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1212"PO-Revision-Date: 2016-08-22 20:43+0000\n"
1313"Last-Translator: Bojan Bogdanović <Unknown>\n"
1414"Language-Team: српски <xfce4@xfce4.org>\n"
@@ -17,8 +17,8 @@ msgstr ""
1717"Content-Transfer-Encoding: 8bit\n"
1818"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1919"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
20−"X-Launchpad-Export-Date: 2017-02-04 05:55+0000\n"
21−"X-Generator: Launchpad (build 18322)\n"
20+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
21+"X-Generator: Launchpad (build 18326)\n"
2222"Language: sr\n"
2323
2424#: plugins/LightDM/Greeter.cpp:188
@@ -529,7 +529,7 @@ msgstr ""
529529msgid "Search…"
530530msgstr ""
531531
532−#: qml/Launcher/Drawer.qml:123
532+#: qml/Launcher/Drawer.qml:127
533533msgctxt "Apps sorted alphabetically"
534534msgid "A-Z"
535535msgstr ""
@@ -634,8 +634,8 @@ msgstr ""
634634"Превуците користећи 3 прста било који програм са једног у други прозор"
635635
636636#: qml/Tutorial/TutorialLeftLong.qml:49
637−msgid "Long swipe from the left edge to open the Today scope"
638−msgstr "Дуго превлачење са леве ивице да отворите опсег Данас"
637+msgid "Long swipe from the left edge to open the Application Drawer"
638+msgstr ""
639639
640640#: qml/Tutorial/TutorialLeft.qml:47
641641msgid "Short swipe from the left edge to open the launcher"
@@ -1376,6 +1376,9 @@ msgstr "Веома слаба лозинка"
13761376#~ msgstr ""
13771377#~ "Каратко или дуго превлачење са десне ивице да видите ваше отворене програме"
13781378
1379+#~ msgid "Long swipe from the left edge to open the Today scope"
1380+#~ msgstr "Дуго превлачење са леве ивице да отворите опсег Данас"
1381+
13791382#~ msgid "Swipe from the left edge to open the launcher"
13801383#~ msgstr "Превуците са леве ивице да отворите покретач"
13811384
po/sv.po+9−6
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2016-06-19 19:31+0000\n"
1212"Last-Translator: Josef Andersson <Unknown>\n"
1313"Language-Team: Swedish\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:56+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020"Language: sv\n"
2121
2222#: plugins/LightDM/Greeter.cpp:188
@@ -527,7 +527,7 @@ msgstr "Välj skrivbordsmiljö"
527527msgid "Search…"
528528msgstr ""
529529
530−#: qml/Launcher/Drawer.qml:123
530+#: qml/Launcher/Drawer.qml:127
531531msgctxt "Apps sorted alphabetically"
532532msgid "A-Z"
533533msgstr ""
@@ -628,8 +628,8 @@ msgid "Drag using 3 fingers any application from one window to the other"
628628msgstr "Dra ett program från ett fönster till det andra med tre fingrar"
629629
630630#: qml/Tutorial/TutorialLeftLong.qml:49
631−msgid "Long swipe from the left edge to open the Today scope"
632−msgstr "Gör ett lång svep från vänstra kanten för öppna vyn Idag"
631+msgid "Long swipe from the left edge to open the Application Drawer"
632+msgstr ""
633633
634634#: qml/Tutorial/TutorialLeft.qml:47
635635msgid "Short swipe from the left edge to open the launcher"
@@ -1378,5 +1378,8 @@ msgstr "Väldigt svagt lösenord"
13781378#~ msgid "Swipe up to create a message"
13791379#~ msgstr "Svep uppåt för att skapa ett meddelande"
13801380
1381+#~ msgid "Long swipe from the left edge to open the Today scope"
1382+#~ msgstr "Gör ett lång svep från vänstra kanten för öppna vyn Idag"
1383+
13811384#~ msgid "Takes a screenshot of a window."
13821385#~ msgstr "Tar en skärmbild av ett fönster."
po/sw.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2015-07-17 20:02+0000\n"
1212"Last-Translator: Valentine <mwangi_valentino@yahoo.com>\n"
1313"Language-Team: Swahili <sw@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:56+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -523,7 +523,7 @@ msgstr ""
523523msgid "Search…"
524524msgstr ""
525525
526−#: qml/Launcher/Drawer.qml:123
526+#: qml/Launcher/Drawer.qml:127
527527msgctxt "Apps sorted alphabetically"
528528msgid "A-Z"
529529msgstr ""
@@ -624,7 +624,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
624624msgstr ""
625625
626626#: qml/Tutorial/TutorialLeftLong.qml:49
627−msgid "Long swipe from the left edge to open the Today scope"
627+msgid "Long swipe from the left edge to open the Application Drawer"
628628msgstr ""
629629
630630#: qml/Tutorial/TutorialLeft.qml:47
po/ta.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2013-10-24 11:36+0000\n"
1212"Last-Translator: Arun Kumar - அருண் குமார் <thangam.arunx@gmail.com>\n"
1313"Language-Team: Ubuntu Tamil Team/Free Tamil Computing/Thamizha\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:56+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020"Language: ta\n"
2121
2222#: plugins/LightDM/Greeter.cpp:188
@@ -522,7 +522,7 @@ msgstr ""
522522msgid "Search…"
523523msgstr ""
524524
525−#: qml/Launcher/Drawer.qml:123
525+#: qml/Launcher/Drawer.qml:127
526526msgctxt "Apps sorted alphabetically"
527527msgid "A-Z"
528528msgstr ""
@@ -623,7 +623,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
623623msgstr ""
624624
625625#: qml/Tutorial/TutorialLeftLong.qml:49
626−msgid "Long swipe from the left edge to open the Today scope"
626+msgid "Long swipe from the left edge to open the Application Drawer"
627627msgstr ""
628628
629629#: qml/Tutorial/TutorialLeft.qml:47
po/te.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2014-07-19 10:04+0000\n"
1212"Last-Translator: Praveen Illa <mail2ipn@gmail.com>\n"
1313"Language-Team: Telugu <te@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:56+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -521,7 +521,7 @@ msgstr ""
521521msgid "Search…"
522522msgstr ""
523523
524−#: qml/Launcher/Drawer.qml:123
524+#: qml/Launcher/Drawer.qml:127
525525msgctxt "Apps sorted alphabetically"
526526msgid "A-Z"
527527msgstr ""
@@ -622,7 +622,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
622622msgstr ""
623623
624624#: qml/Tutorial/TutorialLeftLong.qml:49
625−msgid "Long swipe from the left edge to open the Today scope"
625+msgid "Long swipe from the left edge to open the Application Drawer"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeft.qml:47
po/th.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2014-10-02 04:55+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Thai <th@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:56+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -521,7 +521,7 @@ msgstr ""
521521msgid "Search…"
522522msgstr ""
523523
524−#: qml/Launcher/Drawer.qml:123
524+#: qml/Launcher/Drawer.qml:127
525525msgctxt "Apps sorted alphabetically"
526526msgid "A-Z"
527527msgstr ""
@@ -622,7 +622,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
622622msgstr ""
623623
624624#: qml/Tutorial/TutorialLeftLong.qml:49
625−msgid "Long swipe from the left edge to open the Today scope"
625+msgid "Long swipe from the left edge to open the Application Drawer"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeft.qml:47
po/tr.po+9−6
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2015-03-22 15:56+0000\n"
1212"Last-Translator: Arda Ünlü <aarda.uunlu@gmail.com>\n"
1313"Language-Team: Turkish <tr@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:56+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:05+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -525,7 +525,7 @@ msgstr "Masaüstü ortamını seçin"
525525msgid "Search…"
526526msgstr ""
527527
528−#: qml/Launcher/Drawer.qml:123
528+#: qml/Launcher/Drawer.qml:127
529529msgctxt "Apps sorted alphabetically"
530530msgid "A-Z"
531531msgstr ""
@@ -628,8 +628,8 @@ msgstr ""
628628"sürükleyin"
629629
630630#: qml/Tutorial/TutorialLeftLong.qml:49
631−msgid "Long swipe from the left edge to open the Today scope"
632−msgstr "Bugün kapsamını açmak için sol kenardan uzun kaydırın"
631+msgid "Long swipe from the left edge to open the Application Drawer"
632+msgstr ""
633633
634634#: qml/Tutorial/TutorialLeft.qml:47
635635msgid "Short swipe from the left edge to open the launcher"
@@ -1344,3 +1344,6 @@ msgstr "Çok zayıf şifre"
13441344
13451345#~ msgid "Takes a screenshot of a window."
13461346#~ msgstr "Bir pencerenin ekran görüntüsünü alır."
1347+
1348+#~ msgid "Long swipe from the left edge to open the Today scope"
1349+#~ msgstr "Bugün kapsamını açmak için sol kenardan uzun kaydırın"
po/ug.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2016-07-03 13:56+0000\n"
1212"Last-Translator: Eltikin <eltikinuyghur@hotmail.com>\n"
1313"Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:56+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:06+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -522,7 +522,7 @@ msgstr ""
522522msgid "Search…"
523523msgstr ""
524524
525−#: qml/Launcher/Drawer.qml:123
525+#: qml/Launcher/Drawer.qml:127
526526msgctxt "Apps sorted alphabetically"
527527msgid "A-Z"
528528msgstr ""
@@ -620,7 +620,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
620620msgstr ""
621621
622622#: qml/Tutorial/TutorialLeftLong.qml:49
623−msgid "Long swipe from the left edge to open the Today scope"
623+msgid "Long swipe from the left edge to open the Application Drawer"
624624msgstr ""
625625
626626#: qml/Tutorial/TutorialLeft.qml:47
po/uk.po+9−6
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2017-01-17 10:58+0000\n"
1212"Last-Translator: Yuri Chornoivan <yurchor@gmail.com>\n"
1313"Language-Team: Ukrainian <uk@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2017-02-04 05:56+0000\n"
20−"X-Generator: Launchpad (build 18322)\n"
19+"X-Launchpad-Export-Date: 2017-02-22 06:06+0000\n"
20+"X-Generator: Launchpad (build 18326)\n"
2121
2222#: plugins/LightDM/Greeter.cpp:188
2323msgid "Password: "
@@ -533,7 +533,7 @@ msgstr "Виберіть стільничне середовище"
533533msgid "Search…"
534534msgstr "Пошук…"
535535
536−#: qml/Launcher/Drawer.qml:123
536+#: qml/Launcher/Drawer.qml:127
537537msgctxt "Apps sorted alphabetically"
538538msgid "A-Z"
539539msgstr "А-Я"
@@ -637,8 +637,8 @@ msgid "Drag using 3 fingers any application from one window to the other"
637637msgstr "Пересувайте будь-який додаток за допомогою трьох пальців"
638638
639639#: qml/Tutorial/TutorialLeftLong.qml:49
640−msgid "Long swipe from the left edge to open the Today scope"
641−msgstr "Довге проведення від лівого краю відкриває область «Сьогодні»"
640+msgid "Long swipe from the left edge to open the Application Drawer"
641+msgstr ""
642642
643643#: qml/Tutorial/TutorialLeft.qml:47
644644msgid "Short swipe from the left edge to open the launcher"
@@ -1403,5 +1403,8 @@ msgstr "Дуже слабкий пароль"
14031403#~ msgid "Swipe up for favorite calculations"
14041404#~ msgstr "Проведіть вгору, щоб побачити список вибраних обчислень"
14051405
1406+#~ msgid "Long swipe from the left edge to open the Today scope"
1407+#~ msgstr "Довге проведення від лівого краю відкриває область «Сьогодні»"
1408+
14061409#~ msgid "Takes a screenshot of a window."
14071410#~ msgstr "Зробити знімок вікна."
po/unity8.pot+3−3
@@ -8,7 +8,7 @@ msgid ""
88msgstr ""
99"Project-Id-Version: unity8\n"
1010"Report-Msgid-Bugs-To: \n"
11−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
11+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1212"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1313"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1414"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -521,7 +521,7 @@ msgstr ""
521521msgid "Search…"
522522msgstr ""
523523
524−#: qml/Launcher/Drawer.qml:123
524+#: qml/Launcher/Drawer.qml:127
525525msgctxt "Apps sorted alphabetically"
526526msgid "A-Z"
527527msgstr ""
@@ -622,7 +622,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
622622msgstr ""
623623
624624#: qml/Tutorial/TutorialLeftLong.qml:49
625−msgid "Long swipe from the left edge to open the Today scope"
625+msgid "Long swipe from the left edge to open the Application Drawer"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeft.qml:47
po/ur.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2015-05-05 03:12+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Urdu <ur@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:56+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:06+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -521,7 +521,7 @@ msgstr ""
521521msgid "Search…"
522522msgstr ""
523523
524−#: qml/Launcher/Drawer.qml:123
524+#: qml/Launcher/Drawer.qml:127
525525msgctxt "Apps sorted alphabetically"
526526msgid "A-Z"
527527msgstr ""
@@ -622,7 +622,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
622622msgstr ""
623623
624624#: qml/Tutorial/TutorialLeftLong.qml:49
625−msgid "Long swipe from the left edge to open the Today scope"
625+msgid "Long swipe from the left edge to open the Application Drawer"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeft.qml:47
po/uz.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2015-07-04 16:03+0000\n"
1212"Last-Translator: Learner <muzaffar.habibullayev@yandex.ru>\n"
1313"Language-Team: Uzbek <uz@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:56+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:06+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -521,7 +521,7 @@ msgstr ""
521521msgid "Search…"
522522msgstr ""
523523
524−#: qml/Launcher/Drawer.qml:123
524+#: qml/Launcher/Drawer.qml:127
525525msgctxt "Apps sorted alphabetically"
526526msgid "A-Z"
527527msgstr ""
@@ -622,7 +622,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
622622msgstr ""
623623
624624#: qml/Tutorial/TutorialLeftLong.qml:49
625−msgid "Long swipe from the left edge to open the Today scope"
625+msgid "Long swipe from the left edge to open the Application Drawer"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeft.qml:47
po/vi.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2014-01-15 01:19+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Vietnamese <vi@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:56+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:06+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -521,7 +521,7 @@ msgstr ""
521521msgid "Search…"
522522msgstr ""
523523
524−#: qml/Launcher/Drawer.qml:123
524+#: qml/Launcher/Drawer.qml:127
525525msgctxt "Apps sorted alphabetically"
526526msgid "A-Z"
527527msgstr ""
@@ -622,7 +622,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
622622msgstr ""
623623
624624#: qml/Tutorial/TutorialLeftLong.qml:49
625−msgid "Long swipe from the left edge to open the Today scope"
625+msgid "Long swipe from the left edge to open the Application Drawer"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeft.qml:47
po/wo.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2015-10-29 11:16+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Wolof <wo@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:56+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:06+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -521,7 +521,7 @@ msgstr ""
521521msgid "Search…"
522522msgstr ""
523523
524−#: qml/Launcher/Drawer.qml:123
524+#: qml/Launcher/Drawer.qml:127
525525msgctxt "Apps sorted alphabetically"
526526msgid "A-Z"
527527msgstr ""
@@ -622,7 +622,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
622622msgstr ""
623623
624624#: qml/Tutorial/TutorialLeftLong.qml:49
625−msgid "Long swipe from the left edge to open the Today scope"
625+msgid "Long swipe from the left edge to open the Application Drawer"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeft.qml:47
po/xh.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2013-09-28 13:20+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Xhosa <xh@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:56+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:06+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -521,7 +521,7 @@ msgstr ""
521521msgid "Search…"
522522msgstr ""
523523
524−#: qml/Launcher/Drawer.qml:123
524+#: qml/Launcher/Drawer.qml:127
525525msgctxt "Apps sorted alphabetically"
526526msgid "A-Z"
527527msgstr ""
@@ -622,7 +622,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
622622msgstr ""
623623
624624#: qml/Tutorial/TutorialLeftLong.qml:49
625−msgid "Long swipe from the left edge to open the Today scope"
625+msgid "Long swipe from the left edge to open the Application Drawer"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeft.qml:47
po/zh_CN.po+9−6
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2016-04-13 06:27+0000\n"
1212"Last-Translator: YunQiang Su <wzssyqa@gmail.com>\n"
1313"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:56+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:06+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -522,7 +522,7 @@ msgstr ""
522522msgid "Search…"
523523msgstr ""
524524
525−#: qml/Launcher/Drawer.qml:123
525+#: qml/Launcher/Drawer.qml:127
526526msgctxt "Apps sorted alphabetically"
527527msgid "A-Z"
528528msgstr ""
@@ -620,8 +620,8 @@ msgid "Drag using 3 fingers any application from one window to the other"
620620msgstr "使用三指将任何应用从一个窗口拖拽至另一个"
621621
622622#: qml/Tutorial/TutorialLeftLong.qml:49
623−msgid "Long swipe from the left edge to open the Today scope"
624−msgstr "从左侧边缘长距离滑动打开“今日”分类"
623+msgid "Long swipe from the left edge to open the Application Drawer"
624+msgstr ""
625625
626626#: qml/Tutorial/TutorialLeft.qml:47
627627msgid "Short swipe from the left edge to open the launcher"
@@ -1325,5 +1325,8 @@ msgstr "密码强度:非常弱"
13251325#~ msgid "Short or long swipe from the right edge to view your open apps"
13261326#~ msgstr "从右侧边缘短距离或长距离滑动查看打开的应用"
13271327
1328+#~ msgid "Long swipe from the left edge to open the Today scope"
1329+#~ msgstr "从左侧边缘长距离滑动打开“今日”分类"
1330+
13281331#~ msgid "Takes a screenshot of a window."
13291332#~ msgstr "给窗口截图。"
po/zh_HK.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2014-08-10 11:45+0000\n"
1212"Last-Translator: Daniel Cheung <daniel.2345@hotmail.com>\n"
1313"Language-Team: Chinese (Hong Kong) <zh_HK@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:56+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:06+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020
2121#: plugins/LightDM/Greeter.cpp:188
2222msgid "Password: "
@@ -521,7 +521,7 @@ msgstr ""
521521msgid "Search…"
522522msgstr ""
523523
524−#: qml/Launcher/Drawer.qml:123
524+#: qml/Launcher/Drawer.qml:127
525525msgctxt "Apps sorted alphabetically"
526526msgid "A-Z"
527527msgstr ""
@@ -622,7 +622,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
622622msgstr ""
623623
624624#: qml/Tutorial/TutorialLeftLong.qml:49
625−msgid "Long swipe from the left edge to open the Today scope"
625+msgid "Long swipe from the left edge to open the Application Drawer"
626626msgstr ""
627627
628628#: qml/Tutorial/TutorialLeft.qml:47
po/zh_TW.po+5−5
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2017-01-31 14:40+0000\n"
10+"POT-Creation-Date: 2017-02-16 13:49+0000\n"
1111"PO-Revision-Date: 2016-02-24 04:40+0000\n"
1212"Last-Translator: Po-Hsu Lin <po-hsu.lin@canonical.com>\n"
1313"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2017-02-04 05:56+0000\n"
19−"X-Generator: Launchpad (build 18322)\n"
18+"X-Launchpad-Export-Date: 2017-02-22 06:06+0000\n"
19+"X-Generator: Launchpad (build 18326)\n"
2020"Language: zh_TW\n"
2121
2222#: plugins/LightDM/Greeter.cpp:188
@@ -521,7 +521,7 @@ msgstr ""
521521msgid "Search…"
522522msgstr ""
523523
524−#: qml/Launcher/Drawer.qml:123
524+#: qml/Launcher/Drawer.qml:127
525525msgctxt "Apps sorted alphabetically"
526526msgid "A-Z"
527527msgstr ""
@@ -619,7 +619,7 @@ msgid "Drag using 3 fingers any application from one window to the other"
619619msgstr ""
620620
621621#: qml/Tutorial/TutorialLeftLong.qml:49
622−msgid "Long swipe from the left edge to open the Today scope"
622+msgid "Long swipe from the left edge to open the Application Drawer"
623623msgstr ""
624624
625625#: qml/Tutorial/TutorialLeft.qml:47
qml/ApplicationMenus/ApplicationMenusLimits.qmlnew file+24
@@ -0,0 +1,24 @@
1+/*
2+ * Copyright (C) 2017 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+pragma Singleton
18+import QtQuick 2.4
19+import QtQuick.Window 2.2
20+
21+QtObject {
22+ property real screenWidth: Screen.width
23+ property real screenHeight: Screen.height
24+}
qml/ApplicationMenus/MenuBar.qml+279−129
@@ -24,12 +24,13 @@ Item {
2424 id: root
2525 objectName: "menuBar"
2626
27+ // set from outside
2728 property alias unityMenuModel: rowRepeater.model
28−
29− readonly property bool valid: rowRepeater.count > 0
30−
3129 property bool enableKeyFilter: false
30+ property real overflowWidth: width
3231
32+ // read from outside
33+ readonly property bool valid: rowRepeater.count > 0
3334 readonly property bool showRequested: d.longAltPressed || d.currentItem != null
3435
3536 implicitWidth: row.width
@@ -75,189 +76,334 @@ Item {
7576 acceptedButtons: Qt.LeftButton | Qt.MiddleButton | Qt.RightButton
7677 anchors.fill: parent
7778 enabled: d.currentItem != null
79+ hoverEnabled: enabled && d.currentItem && d.currentItem.__popup != null
7880 onPressed: d.dismissAll()
7981 }
8082
81− Item {
82− id: clippingItem
83−
84− height: root.height
85− width: root.width
86− clip: true
87−
88− Row {
89− id: row
90− spacing: units.gu(2)
91− height: parent.height
83+ Row {
84+ id: row
85+ spacing: units.gu(2)
86+ height: parent.height
9287
93− ActionContext {
94− id: menuBarContext
95− objectName: "barContext"
96− active: !d.currentItem && enableKeyFilter
97− }
98−
99− Repeater {
100− id: rowRepeater
101−
102− Item {
103− id: visualItem
104− objectName: root.objectName + "-item" + __ownIndex
105−
106− readonly property int __ownIndex: index
107− property Item __popup: null;
108− property bool popupVisible: __popup && __popup.visible
88+ ActionContext {
89+ id: menuBarContext
90+ objectName: "barContext"
91+ active: !d.currentItem && enableKeyFilter
92+ }
10993
110− implicitWidth: column.implicitWidth
111− implicitHeight: row.height
112− enabled: model.sensitive
94+ Connections {
95+ target: root.unityMenuModel
96+ onModelReset: d.firstInvisibleIndex = undefined
97+ }
11398
114− function show() {
115− if (!__popup) {
116− __popup = menuComponent.createObject(root, { objectName: visualItem.objectName + "-menu" });
117− // force the current item to be the newly popped up menu
118− } else {
119− __popup.show();
120− }
121− d.currentItem = visualItem;
99+ Repeater {
100+ id: rowRepeater
101+
102+ onItemAdded: d.recalcFirstInvisibleIndexAdded(index, item)
103+ onCountChanged: d.recalcFirstInvisibleIndex()
104+
105+ Item {
106+ id: visualItem
107+ objectName: root.objectName + "-item" + __ownIndex
108+
109+ readonly property int __ownIndex: index
110+ property Item __popup: null;
111+ readonly property bool popupVisible: __popup && __popup.visible
112+ readonly property bool shouldDisplay: x + width + ((__ownIndex < rowRepeater.count-1) ? units.gu(2) : 0) <
113+ root.overflowWidth - ((__ownIndex < rowRepeater.count-1) ? overflowButton.width : 0)
114+
115+ implicitWidth: column.implicitWidth
116+ implicitHeight: row.height
117+ enabled: model.sensitive && shouldDisplay
118+ opacity: shouldDisplay ? 1 : 0
119+
120+ function show() {
121+ if (!__popup) {
122+ __popup = menuComponent.createObject(root, { objectName: visualItem.objectName + "-menu" });
123+ __popup.childActivated.connect(dismiss);
124+ // force the current item to be the newly popped up menu
125+ } else {
126+ __popup.show();
122127 }
123− function hide() {
124− if (__popup) {
125− __popup.hide();
128+ d.currentItem = visualItem;
129+ }
130+ function hide() {
131+ if (__popup) {
132+ __popup.hide();
126133
127− if (d.currentItem === visualItem) {
128− d.currentItem = null;
129− }
134+ if (d.currentItem === visualItem) {
135+ d.currentItem = null;
130136 }
131137 }
132− function dismiss() {
133− if (__popup) {
134− __popup.destroy();
135− __popup = null;
138+ }
139+ function dismiss() {
140+ if (__popup) {
141+ __popup.destroy();
142+ __popup = null;
136143
137− if (d.currentItem === visualItem) {
138− d.currentItem = null;
139− }
144+ if (d.currentItem === visualItem) {
145+ d.currentItem = null;
140146 }
141147 }
148+ }
142149
143− Connections {
144− target: d
145− onDismissAll: visualItem.dismiss()
150+ onVisibleChanged: {
151+ if (!visible && __popup) dismiss();
152+ }
153+
154+ onShouldDisplayChanged: {
155+ if ((!shouldDisplay && d.firstInvisibleIndex == undefined) || __ownIndex <= d.firstInvisibleIndex) {
156+ d.recalcFirstInvisibleIndex();
146157 }
158+ }
147159
148− Component {
149− id: menuComponent
150− MenuPopup {
151− x: visualItem.x - units.gu(1)
152− anchors.top: parent.bottom
153− unityMenuModel: root.unityMenuModel.submenu(visualItem.__ownIndex)
160+ Connections {
161+ target: d
162+ onDismissAll: visualItem.dismiss()
163+ }
154164
155− Component.onCompleted: reset();
156− }
165+ Component {
166+ id: menuComponent
167+ MenuPopup {
168+ desiredX: visualItem.x - units.gu(1)
169+ desiredY: parent.height
170+ unityMenuModel: root.unityMenuModel.submenu(visualItem.__ownIndex)
171+
172+ Component.onCompleted: reset();
157173 }
174+ }
158175
159− RowLayout {
160− id: column
161− spacing: units.gu(1)
162− anchors {
163− centerIn: parent
164− }
176+ RowLayout {
177+ id: column
178+ spacing: units.gu(1)
179+ anchors {
180+ centerIn: parent
181+ }
165182
166− Icon {
167− Layout.preferredWidth: units.gu(2)
168− Layout.preferredHeight: units.gu(2)
169− Layout.alignment: Qt.AlignVCenter
183+ Icon {
184+ Layout.preferredWidth: units.gu(2)
185+ Layout.preferredHeight: units.gu(2)
186+ Layout.alignment: Qt.AlignVCenter
170187
171− visible: model.icon || false
172− source: model.icon || ""
173− }
188+ visible: model.icon || false
189+ source: model.icon || ""
190+ }
174191
175− ActionItem {
176− id: actionItem
177− width: _title.width
178− height: _title.height
192+ ActionItem {
193+ id: actionItem
194+ width: _title.width
195+ height: _title.height
179196
180− action: Action {
181− // FIXME - SDK Action:text modifies menu text with html underline for mnemonic
182− text: model.label.replace("_", "&").replace("<u>", "&").replace("</u>", "")
197+ action: Action {
198+ enabled: visualItem.enabled
199+ // FIXME - SDK Action:text modifies menu text with html underline for mnemonic
200+ text: model.label.replace("_", "&").replace("<u>", "&").replace("</u>", "")
183201
184− onTriggered: {
185− visualItem.show();
186− }
202+ onTriggered: {
203+ visualItem.show();
187204 }
205+ }
188206
189− Label {
190− id: _title
191− text: actionItem.text
192− horizontalAlignment: Text.AlignLeft
193− color: enabled ? "white" : "#5d5d5d"
194− }
207+ Label {
208+ id: _title
209+ text: actionItem.text
210+ horizontalAlignment: Text.AlignLeft
211+ color: enabled ? theme.palette.normal.backgroundText : theme.palette.disabled.backgroundText
195212 }
196213 }
197− } // Item ( delegate )
198− } // Repeater
199− } // Row
214+ }
215+ } // Item ( delegate )
216+ } // Repeater
217+ } // Row
218+
219+ MouseArea {
220+ anchors.fill: row
221+ hoverEnabled: d.currentItem
222+
223+ onEntered: {
224+ if (d.currentItem) {
225+ updateCurrentItemFromPosition(Qt.point(mouseX, mouseY))
226+ }
227+ }
228+ onPositionChanged: {
229+ if (d.currentItem) {
230+ updateCurrentItemFromPosition(Qt.point(mouse.x, mouse.y))
231+ }
232+ }
233+ onClicked: {
234+ var prevItem = d.currentItem;
235+ updateCurrentItemFromPosition(Qt.point(mouse.x, mouse.y))
236+ if (prevItem && d.currentItem == prevItem) {
237+ prevItem.hide();
238+ }
239+ }
240+
241+ function updateCurrentItemFromPosition(point) {
242+ var pos = mapToItem(row, point.x, point.y);
243+
244+ if (!d.hoveredItem || !d.currentItem || !d.hoveredItem.contains(Qt.point(pos.x - d.currentItem.x, pos.y - d.currentItem.y))) {
245+ d.hoveredItem = row.childAt(pos.x, pos.y);
246+ if (!d.hoveredItem || !d.hoveredItem.enabled)
247+ return;
248+ if (d.currentItem != d.hoveredItem) {
249+ d.currentItem = d.hoveredItem;
250+ }
251+ }
252+ }
253+ }
254+
255+ MouseArea {
256+ id: overflowButton
257+ objectName: "overflow"
258+
259+ hoverEnabled: d.currentItem
260+ onEntered: d.currentItem = this
261+ onPositionChanged: d.currentItem = this
262+ onClicked: d.currentItem = this
200263
201− MouseArea {
202− anchors.fill: parent
203− hoverEnabled: d.currentItem
264+ property Item __popup: null;
265+ readonly property bool popupVisible: __popup && __popup.visible
266+ readonly property Item firstInvisibleItem: d.firstInvisibleIndex !== undefined ? rowRepeater.itemAt(d.firstInvisibleIndex) : null
204267
205− onEntered: {
206− if (d.currentItem) {
207− updateCurrentItemFromPosition(Qt.point(mouseX, mouseY))
268+ visible: d.firstInvisibleIndex != undefined
269+ x: firstInvisibleItem ? firstInvisibleItem.x : 0
270+
271+ height: parent.height
272+ width: units.gu(4)
273+
274+ onVisibleChanged: {
275+ if (!visible && __popup) dismiss();
276+ }
277+
278+ Icon {
279+ id: icon
280+ width: units.gu(2)
281+ height: units.gu(2)
282+ anchors.centerIn: parent
283+ color: theme.palette.normal.backgroundText
284+ name: "toolkit_chevron-down_2gu"
285+ }
286+
287+ function show() {
288+ if (!__popup) {
289+ __popup = overflowComponent.createObject(root, { objectName: overflowButton.objectName + "-menu" });
290+ __popup.childActivated.connect(dismiss);
291+ // force the current item to be the newly popped up menu
292+ } else {
293+ __popup.show();
294+ }
295+ d.currentItem = overflowButton;
296+ }
297+ function hide() {
298+ if (__popup) {
299+ __popup.hide();
300+
301+ if (d.currentItem === overflowButton) {
302+ d.currentItem = null;
208303 }
209304 }
210− onPositionChanged: {
211− if (d.currentItem) {
212− updateCurrentItemFromPosition(Qt.point(mouse.x, mouse.y))
305+ }
306+ function dismiss() {
307+ if (__popup) {
308+ __popup.destroy();
309+ __popup = null;
310+
311+ if (d.currentItem === overflowButton) {
312+ d.currentItem = null;
213313 }
214314 }
215− onClicked: updateCurrentItemFromPosition(Qt.point(mouse.x, mouse.y))
315+ }
216316
217− function updateCurrentItemFromPosition(point) {
218− var pos = mapToItem(row, point.x, point.y);
317+ Connections {
318+ target: d
319+ onDismissAll: overflowButton.dismiss()
320+ }
321+
322+ Component {
323+ id: overflowComponent
324+ MenuPopup {
325+ id: overflowPopup
326+ desiredX: overflowButton.x - units.gu(1)
327+ desiredY: parent.height
328+ unityMenuModel: overflowModel
329+
330+ ExpressionFilterModel {
331+ id: overflowModel
332+ sourceModel: root.unityMenuModel
333+ matchExpression: function(index) {
334+ if (d.firstInvisibleIndex === undefined) return false;
335+ return index >= d.firstInvisibleIndex;
336+ }
219337
220− if (!d.hoveredItem || !d.currentItem || !d.hoveredItem.contains(Qt.point(pos.x - d.currentItem.x, pos.y - d.currentItem.y))) {
221− d.hoveredItem = row.childAt(pos.x, pos.y);
222− if (!d.hoveredItem || !d.hoveredItem.enabled)
223− return false;
224− if (d.currentItem != d.hoveredItem) {
225− d.currentItem = d.hoveredItem;
338+ function submenu(index) {
339+ return sourceModel.submenu(mapRowToSource(index));
226340 }
341+ function activate(index) {
342+ return sourceModel.activate(mapRowToSource(index));
343+ }
344+ }
345+
346+ Connections {
347+ target: d
348+ onFirstInvisibleIndexChanged: overflowModel.invalidate()
227349 }
228− return true;
229350 }
230351 }
352+ }
231353
232− Rectangle {
233− id: underline
234− anchors {
235− bottom: row.bottom
236− }
237− x: d.currentItem ? row.x + d.currentItem.x - units.gu(1) : 0
238− width: d.currentItem ? d.currentItem.width + units.gu(2) : 0
239− height: units.dp(4)
240− color: UbuntuColors.orange
241− visible: d.currentItem
354+ Rectangle {
355+ id: underline
356+ anchors {
357+ bottom: row.bottom
242358 }
359+ x: d.currentItem ? row.x + d.currentItem.x - units.gu(1) : 0
360+ width: d.currentItem ? d.currentItem.width + units.gu(2) : 0
361+ height: units.dp(4)
362+ color: UbuntuColors.orange
363+ visible: d.currentItem
243364 }
244365
245366 MenuNavigator {
246367 id: d
247368 objectName: "d"
248369 itemView: rowRepeater
370+ hasOverflow: overflowButton.visible
249371
250372 property Item currentItem: null
251373 property Item hoveredItem: null
252374 property Item prevCurrentItem: null
253−
254− readonly property int currentIndex: currentItem ? currentItem.__ownIndex : -1
255−
256375 property bool altPressed: false
257376 property bool longAltPressed: false
377+ property var firstInvisibleIndex: undefined
378+
379+ readonly property int currentIndex: currentItem && currentItem.hasOwnProperty("__ownIndex") ? currentItem.__ownIndex : -1
258380
259381 signal dismissAll()
260382
383+ function recalcFirstInvisibleIndexAdded(index, item) {
384+ if (firstInvisibleIndex === undefined) {
385+ if (!item.shouldDisplay) {
386+ firstInvisibleIndex = index;
387+ }
388+ } else if (index <= firstInvisibleIndex) {
389+ if (!item.shouldDisplay) {
390+ firstInvisibleIndex = index;
391+ } else {
392+ firstInvisibleIndex++;
393+ }
394+ }
395+ }
396+
397+ function recalcFirstInvisibleIndex() {
398+ for (var i = 0; i < rowRepeater.count; i++) {
399+ if (!rowRepeater.itemAt(i).shouldDisplay) {
400+ firstInvisibleIndex = i;
401+ return;
402+ }
403+ }
404+ firstInvisibleIndex = undefined;
405+ }
406+
261407 onSelect: {
262408 var delegate = rowRepeater.itemAt(index);
263409 if (delegate) {
@@ -265,6 +411,10 @@ Item {
265411 }
266412 }
267413
414+ onOverflow: {
415+ d.currentItem = overflowButton;
416+ }
417+
268418 onCurrentItemChanged: {
269419 if (prevCurrentItem && prevCurrentItem != currentItem) {
270420 if (currentItem) {
qml/ApplicationMenus/MenuItem.qml+8−12
@@ -46,6 +46,8 @@ ActionItem {
4646 enabled: menuData ? menuData.sensitive : false
4747
4848 action: Action {
49+ enabled: root.enabled
50+
4951 // FIXME - SDK Action:text modifies menu text with html underline for mnemonic
5052 text: menuData.label.replace("_", "&").replace("<u>", "&").replace("</u>", "")
5153 checkable: menuData.isCheck || menuData.isRadio
@@ -111,6 +113,7 @@ ActionItem {
111113 elide: Text.ElideNone
112114 wrapMode: Text.NoWrap
113115 clip: true
116+ color: enabled ? theme.palette.normal.overlayText : theme.palette.disabled.overlayText
114117 Layout.fillWidth: true
115118
116119 text: root.text ? root.text : ""
@@ -121,8 +124,8 @@ ActionItem {
121124 elide: Text.ElideNone
122125 wrapMode: Text.NoWrap
123126 clip: true
124− color: enabled ? theme.palette.normal.backgroundSecondaryText :
125− theme.palette.disabled.backgroundSecondaryText
127+ color: enabled ? theme.palette.normal.overlaySecondaryText :
128+ theme.palette.disabled.overlaySecondaryText
126129
127130 visible: menuData.shortcut != undefined && !root.hasSubmenu && QuickUtils.keyboardAttached
128131 text: menuData.shortcut ? menuData.shortcut : ""
@@ -133,18 +136,11 @@ ActionItem {
133136 id: chevronIcon
134137 width: units.gu(2)
135138 height: units.gu(2)
136− color: enabled ? theme.palette.normal.backgroundSecondaryText :
137− theme.palette.disabled.backgroundSecondaryText
139+ color: enabled ? theme.palette.normal.overlayText :
140+ theme.palette.disabled.overlayText
138141
139142 visible: root.hasSubmenu
140− name: "chevron"
141− }
142− }
143−
144− MouseArea {
145− anchors.fill: parent
146− onClicked: {
147− root.trigger(action && action.checkable ? !action.checked : undefined);
143+ name: "toolkit_chevron-ltr_2gu"
148144 }
149145 }
150146}
qml/ApplicationMenus/MenuNavigator.qml+23
@@ -18,8 +18,10 @@ import QtQuick 2.4
1818
1919QtObject {
2020 property Item itemView: null
21+ property bool hasOverflow: false
2122
2223 signal select(int index)
24+ signal overflow()
2325
2426 function selectNext(currentIndex) {
2527 var menu;
@@ -32,6 +34,11 @@ QtObject {
3234 break;
3335 }
3436 newIndex++;
37+
38+ if (hasOverflow && newIndex === itemView.count) {
39+ overflow()
40+ break;
41+ }
3542 }
3643 } else if (currentIndex !== -1 && itemView.count > 1) {
3744 var startIndex = (currentIndex + 1) % itemView.count;
@@ -42,6 +49,12 @@ QtObject {
4249 select(newIndex);
4350 break;
4451 }
52+
53+ if (hasOverflow && newIndex + 1 === itemView.count) {
54+ overflow()
55+ break;
56+ }
57+
4558 newIndex = (newIndex + 1) % itemView.count;
4659 } while (newIndex !== startIndex)
4760 }
@@ -58,12 +71,21 @@ QtObject {
5871 break;
5972 }
6073 newIndex--;
74+
75+ if (hasOverflow && newIndex < 0 ) {
76+ overflow();
77+ break;
78+ }
6179 }
6280 } else if (currentIndex !== -1 && itemView.count > 1) {
6381 var startIndex = currentIndex - 1;
6482 newIndex = startIndex;
6583 do {
6684 if (newIndex < 0) {
85+ if (hasOverflow) {
86+ overflow();
87+ break;
88+ }
6789 newIndex = itemView.count - 1;
6890 }
6991 menu = itemView.itemAt(newIndex);
@@ -72,6 +94,7 @@ QtObject {
7294 break;
7395 }
7496 newIndex--;
97+
7598 } while (newIndex !== startIndex)
7699 }
77100 }
qml/ApplicationMenus/MenuPopup.qml+116−25
@@ -16,16 +16,51 @@
1616
1717import QtQuick 2.4
1818import QtQuick.Layouts 1.1
19−import QtQuick.Window 2.2
2019import Ubuntu.Components 1.3
2120import Ubuntu.Components.ListItems 1.3 as ListItems
2221import "../Components"
22+import "../Components/PanelState"
23+import "."
2324
2425UbuntuShape {
2526 id: root
2627 objectName: "menu"
2728 backgroundColor: theme.palette.normal.overlay
2829
30+ signal childActivated()
31+
32+ // true for submenus that need to show on the other side of their parent
33+ // if they don't fit when growing right
34+ property bool substractWidth: false
35+
36+ property real desiredX
37+ x: {
38+ var dummy = visible; // force recalc when shown/hidden
39+ var parentTopLeft = parent.mapToItem(null, 0, 0);
40+ var farX = ApplicationMenusLimits.screenWidth;
41+ if (parentTopLeft.x + width + desiredX <= farX) {
42+ return desiredX;
43+ } else {
44+ if (substractWidth) {
45+ return -width;
46+ } else {
47+ return farX - parentTopLeft.x - width;
48+ }
49+ }
50+ }
51+
52+ property real desiredY
53+ y: {
54+ var dummy = visible; // force recalc when shown/hidden
55+ var parentTopLeft = parent.mapToItem(null, 0, 0);
56+ var bottomY = ApplicationMenusLimits.screenHeight;
57+ if (parentTopLeft.y + height + desiredY <= bottomY) {
58+ return desiredY;
59+ } else {
60+ return bottomY - parentTopLeft.y - height;
61+ }
62+ }
63+
2964 property alias unityMenuModel: repeater.model
3065
3166 function show() {
@@ -64,9 +99,9 @@ UbuntuShape {
6499 readonly property int currentIndex: currentItem ? currentItem.__ownIndex : -1
65100
66101 property real __minimumWidth: units.gu(20)
67− property real __maximumWidth: Screen.width * 0.7
102+ property real __maximumWidth: ApplicationMenusLimits.screenWidth * 0.7
68103 property real __minimumHeight: units.gu(2)
69− property real __maximumHeight: Screen.height * 0.7
104+ property real __maximumHeight: ApplicationMenusLimits.screenHeight - PanelState.panelHeight
70105
71106 signal dismissAll()
72107
@@ -76,6 +111,8 @@ UbuntuShape {
76111 } else {
77112 hoveredItem = null;
78113 }
114+
115+ submenuHoverTimer.stop();
79116 }
80117
81118 onSelect: {
@@ -147,8 +184,19 @@ UbuntuShape {
147184 }
148185
149186 MouseArea {
187+ id: previousMA
150188 anchors.fill: parent
151− onPressed: {
189+ hoverEnabled: enabled
190+ onPressed: progress()
191+
192+ Timer {
193+ running: previousMA.containsMouse && !listView.atYBeginning
194+ interval: 1000
195+ repeat: true
196+ onTriggered: previousMA.progress()
197+ }
198+
199+ function progress() {
152200 var item = menuColumn.childAt(0, listView.contentY);
153201 if (item) {
154202 var previousItem = item;
@@ -176,10 +224,15 @@ UbuntuShape {
176224 contentHeight: menuColumn.height
177225 interactive: height < contentHeight
178226
227+ Timer {
228+ id: submenuHoverTimer
229+ interval: 225 // GTK MENU_POPUP_DELAY, Qt SH_Menu_SubMenuPopupDelay in QCommonStyle is 256
230+ onTriggered: d.currentItem.item.trigger();
231+ }
232+
179233 MouseArea {
180234 anchors.fill: parent
181235 hoverEnabled: true
182− propagateComposedEvents: true // propogate events so we send clicks to children.
183236 z: 1 // on top so we override any other hovers
184237 onEntered: updateCurrentItemFromPosition(Qt.point(mouseX, mouseY))
185238 onPositionChanged: updateCurrentItemFromPosition(Qt.point(mouse.x, mouse.y))
@@ -189,12 +242,25 @@ UbuntuShape {
189242
190243 if (!d.hoveredItem || !d.currentItem ||
191244 !d.hoveredItem.contains(Qt.point(pos.x - d.currentItem.x, pos.y - d.currentItem.y))) {
245+ submenuHoverTimer.stop();
246+
192247 d.hoveredItem = menuColumn.childAt(pos.x, pos.y)
193248 if (!d.hoveredItem || !d.hoveredItem.enabled)
194− return false;
249+ return;
195250 d.currentItem = d.hoveredItem;
251+
252+ if (!d.currentItem.__isSeparator && d.currentItem.item.hasSubmenu && d.currentItem.item.enabled) {
253+ submenuHoverTimer.start();
254+ }
255+ }
256+ }
257+
258+ onClicked: {
259+ var pos = mapToItem(listView.contentItem, mouse.x, mouse.y);
260+ var clickedItem = menuColumn.childAt(pos.x, pos.y);
261+ if (clickedItem.enabled && !clickedItem.__isSeparator) {
262+ clickedItem.item.trigger();
196263 }
197− return true;
198264 }
199265 }
200266
@@ -249,6 +315,8 @@ UbuntuShape {
249315 width: MathUtils.clamp(implicitWidth, d.__minimumWidth, d.__maximumWidth)
250316
251317 action.onTriggered: {
318+ submenuHoverTimer.stop();
319+
252320 d.currentItem = loader;
253321
254322 if (hasSubmenu) {
@@ -257,22 +325,29 @@ UbuntuShape {
257325 popup = submenuComponent.createObject(focusScope, {
258326 objectName: loader.objectName + "-",
259327 unityMenuModel: model,
260− x: Qt.binding(function() { return root.width }),
261− y: Qt.binding(function() {
328+ substractWidth: true,
329+ desiredX: Qt.binding(function() { return root.width }),
330+ desiredY: Qt.binding(function() {
262331 var dummy = listView.contentY; // force a recalc on contentY change.
263332 return mapToItem(container, 0, y).y;
264333 })
265334 });
335+ popup.retreat.connect(function() {
336+ popup.destroy();
337+ popup = null;
338+ menuItem.forceActiveFocus();
339+ });
340+ popup.childActivated.connect(function() {
341+ popup.destroy();
342+ popup = null;
343+ root.childActivated();
344+ });
266345 } else if (popup) {
267346 popup.visible = true;
268347 }
269− popup.retreat.connect(function() {
270− popup.destroy();
271− popup = null;
272− menuItem.forceActiveFocus();
273− })
274348 } else {
275349 root.unityMenuModel.activate(__ownIndex);
350+ root.childActivated();
276351 }
277352 }
278353
@@ -349,8 +424,19 @@ UbuntuShape {
349424 }
350425
351426 MouseArea {
427+ id: nextMA
352428 anchors.fill: parent
353− onPressed: {
429+ hoverEnabled: enabled
430+ onPressed: progress()
431+
432+ Timer {
433+ running: nextMA.containsMouse && !listView.atYEnd
434+ interval: 1000
435+ repeat: true
436+ onTriggered: nextMA.progress()
437+ }
438+
439+ function progress() {
354440 var item = menuColumn.childAt(0, listView.contentY + listView.height);
355441 if (item) {
356442 var nextItem = item;
@@ -375,23 +461,28 @@ UbuntuShape {
375461 id: submenuLoader
376462 source: "MenuPopup.qml"
377463
464+ property real desiredX
465+ property real desiredY
466+ property bool substractWidth
378467 property var unityMenuModel: null
379468 signal retreat()
380−
381− Binding {
382− target: item
383− property: "unityMenuModel"
384− value: submenuLoader.unityMenuModel
469+ signal childActivated()
470+
471+ onLoaded: {
472+ item.unityMenuModel = Qt.binding(function() { return submenuLoader.unityMenuModel; });
473+ item.objectName = Qt.binding(function() { return submenuLoader.objectName + "menu"; });
474+ item.desiredX = Qt.binding(function() { return submenuLoader.desiredX; });
475+ item.desiredY = Qt.binding(function() { return submenuLoader.desiredY; });
476+ item.substractWidth = Qt.binding(function() { return submenuLoader.substractWidth; });
385477 }
386478
387− Binding {
479+ Keys.onLeftPressed: retreat()
480+
481+ Connections {
388482 target: item
389− property: "objectName"
390− value: submenuLoader.objectName + "menu"
483+ onChildActivated: childActivated();
391484 }
392485
393− Keys.onLeftPressed: retreat()
394−
395486 Component.onCompleted: item.select(0);
396487 onVisibleChanged: if (visible) { item.select(0); }
397488 }
qml/ApplicationMenus/qmldirnew file+1
@@ -0,0 +1 @@
1+singleton ApplicationMenusLimits 0.1 ApplicationMenusLimits.qml
qml/Components/EdgeBarrier.qml+1
@@ -30,6 +30,7 @@ Item {
3030 property int edge: Qt.LeftEdge
3131
3232 readonly property alias progress: controller.progress
33+ readonly property alias containsMouse: controller.containsMouse
3334
3435 property Item target: parent
3536 function push(amount) { controller.push(amount); }
qml/Components/EdgeBarrierController.qml+1
@@ -34,6 +34,7 @@ MouseArea {
3434
3535 function push(amount) {
3636 if (!root._containsMouse) {
37+ console.warn("pushing right edge without mouse actually being at right edge!")
3738 return;
3839 }
3940
qml/Components/WindowControlButtons.qml+2
@@ -29,6 +29,7 @@ Row {
2929 property bool windowIsMaximized: false
3030 property bool closeButtonShown: true
3131 property bool maximizeButtonShown: true
32+ property bool minimizeButtonVisible: true
3233 property bool overlayShown
3334
3435 signal closeClicked()
@@ -75,6 +76,7 @@ Row {
7576 height: parent.height
7677 width: height
7778 onClicked: root.minimizeClicked()
79+ visible: root.minimizeButtonVisible
7880
7981 // We dont want touch events to fall through to parent,
8082 // otherwise the containsMouse will not work.
qml/Launcher/Drawer.qml+8−1
@@ -95,7 +95,11 @@ FocusScope {
9595 KeyNavigation.down: sections
9696
9797 onAccepted: {
98− if (searchField.displayText != "" && listLoader.item && listLoader.item.currentItem) {
98+ if (searchField.displayText != "" && listLoader.item) {
99+ // In case there is no currentItem (it might have been filtered away) lets reset it to the first item
100+ if (!listLoader.item.currentItem) {
101+ listLoader.item.currentIndex = 0;
102+ }
99103 root.applicationSelected(listLoader.item.getFirstAppId());
100104 }
101105 }
@@ -238,6 +242,7 @@ FocusScope {
238242 source: sortProxyModel
239243 group: AppDrawerProxyModel.GroupByAll
240244 sortBy: AppDrawerProxyModel.SortByUsage
245+ dynamicSortFilter: false
241246 }
242247
243248 delegate: UbuntuShape {
@@ -287,6 +292,7 @@ FocusScope {
287292 source: sortProxyModel
288293 sortBy: AppDrawerProxyModel.SortByAToZ
289294 group: AppDrawerProxyModel.GroupByAToZ
295+ dynamicSortFilter: false
290296 }
291297
292298 delegate: UbuntuShape {
@@ -320,6 +326,7 @@ FocusScope {
320326 id: categoryModel
321327 source: sortProxyModel
322328 filterLetter: model.letter
329+ dynamicSortFilter: false
323330 }
324331 delegateWidth: units.gu(8)
325332 delegateHeight: units.gu(10)
qml/Launcher/Launcher.qml+3−2
@@ -307,7 +307,8 @@ FocusScope {
307307 InverseMouseArea {
308308 id: closeMouseArea
309309 anchors.fill: panel
310− enabled: root.state == "visible" || root.state == "drawer"
310+ enabled: (root.state == "visible" && !root.lockedVisible) || root.state == "drawer" || hoverEnabled
311+ hoverEnabled: panel.quickListOpen
311312 visible: enabled
312313 onPressed: {
313314 mouse.accepted = false;
@@ -414,7 +415,7 @@ FocusScope {
414415 target: panel.dismissTimer
415416 onTriggered: {
416417 if (root.autohideEnabled && !root.lockedVisible) {
417− if (!panel.preventHiding) {
418+ if (!edgeBarrier.containsMouse && !panel.preventHiding) {
418419 root.state = ""
419420 } else {
420421 panel.dismissTimer.restart()
qml/Launcher/LauncherPanel.qml+3
@@ -35,6 +35,7 @@ Rectangle {
3535 || dndArea.containsMouse || dashItem.hovered
3636 property int highlightIndex: -2
3737 property bool shortcutHintsShown: false
38+ readonly property bool quickListOpen: quickList.state === "open"
3839
3940 signal applicationSelected(string appId)
4041 signal showDashHome()
@@ -686,6 +687,8 @@ Rectangle {
686687 InverseMouseArea {
687688 anchors.fill: quickListShape
688689 enabled: quickList.state == "open" || pressed
690+ hoverEnabled: enabled
691+ visible: enabled
689692
690693 onClicked: {
691694 quickList.state = "";
qml/Panel/Panel.qml+4−2
@@ -209,6 +209,8 @@ Item {
209209 Behavior on opacity { UbuntuNumberAnimation { duration: UbuntuAnimation.SnapDuration } }
210210 active: __applicationMenus.model
211211
212+ width: parent.width - windowControlButtons.width - units.gu(2) - __indicators.barWidth
213+
212214 property bool menusRequested: menuBarLoader.item ? menuBarLoader.item.showRequested : false
213215
214216 sourceComponent: MenuBar {
@@ -283,7 +285,7 @@ Item {
283285 anchors.centerIn: parent
284286 text: actionItem.text
285287 horizontalAlignment: Text.AlignLeft
286− color: enabled ? "white" : "#5d5d5d"
288+ color: enabled ? theme.palette.normal.backgroundText : theme.palette.disabled.backgroundText
287289 }
288290 }
289291
@@ -385,7 +387,7 @@ Item {
385387 }
386388
387389 enabled: !applicationMenus.expanded
388− opacity: !applicationMenus.expanded ? 1 : 0
390+ opacity: !callHint.visible && !applicationMenus.expanded ? 1 : 0
389391 Behavior on opacity { UbuntuNumberAnimation { duration: UbuntuAnimation.SnapDuration } }
390392
391393 onEnabledChanged: {
qml/Shell.qml+31−2
@@ -288,6 +288,7 @@ StyledItem {
288288 applicationManager: ApplicationManager
289289 topLevelSurfaceList: topLevelSurfaceList
290290 inputMethodRect: inputMethod.visibleRect
291+ rightEdgePushProgress: rightEdgeBarrier.progress
291292
292293 property string usageScenario: shell.usageScenario === "phone" || greeter.hasLockedApp
293294 ? "phone"
@@ -523,12 +524,13 @@ StyledItem {
523524 hides: [launcher]
524525 available: (!greeter || !greeter.shown)
525526 && !shell.waitingOnGreeter
527+ && !stage.spreadShown
526528 }
527529
528530 readonly property bool focusedSurfaceIsFullscreen: topLevelSurfaceList.focusedWindow
529531 ? topLevelSurfaceList.focusedWindow.state === Mir.FullscreenState
530532 : false
531− fullscreenMode: (focusedSurfaceIsFullscreen && !LightDMService.greeter.active && launcher.progress == 0)
533+ fullscreenMode: (focusedSurfaceIsFullscreen && !LightDMService.greeter.active && launcher.progress == 0 && !stage.spreadShown)
532534 || greeter.hasLockedApp
533535 greeterShown: greeter && greeter.shown
534536 }
@@ -693,6 +695,33 @@ StyledItem {
693695 }
694696 ]
695697 }
698+
699+ EdgeBarrier {
700+ id: rightEdgeBarrier
701+ enabled: !greeter.shown
702+
703+ // NB: it does its own positioning according to the specified edge
704+ edge: Qt.RightEdge
705+
706+ onPassed: {
707+ panel.indicators.hide()
708+ }
709+
710+ material: Component {
711+ Item {
712+ Rectangle {
713+ width: parent.height
714+ height: parent.width
715+ rotation: 90
716+ anchors.centerIn: parent
717+ gradient: Gradient {
718+ GradientStop { position: 0.0; color: Qt.rgba(0.16,0.16,0.16,0.5)}
719+ GradientStop { position: 1.0; color: Qt.rgba(0.16,0.16,0.16,0)}
720+ }
721+ }
722+ }
723+ }
724+ }
696725 }
697726
698727 Dialogs {
@@ -776,7 +805,7 @@ StyledItem {
776805
777806 onPushedRightBoundary: {
778807 if (buttons === Qt.NoButton) {
779− stage.pushRightEdge(amount);
808+ rightEdgeBarrier.push(amount);
780809 } else if (buttons === Qt.LeftButton && previewRectangle && previewRectangle.target.canBeMaximizedLeftRight) {
781810 previewRectangle.maximizeRight(amount);
782811 }
qml/Stage/ChildWindow.qmlnew file+159
@@ -0,0 +1,159 @@
1+/*
2+ * Copyright (C) 2016 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.4
18+import Ubuntu.Components 1.3
19+import Unity.Application 0.1
20+
21+Item {
22+ id: root
23+
24+ // Set from outside.
25+ property var surface
26+ property Item boundsItem
27+ property Item target
28+ property alias requestedWidth: surfaceContainer.requestedWidth
29+ property alias requestedHeight: surfaceContainer.requestedHeight
30+
31+ width: surface ? surface.size.width : 0
32+ height: surface ? surface.size.height : 0
33+
34+ // Make it get shown and hidden with a fade in/out effect
35+ opacity: surface && surface.state !== Mir.MinimizedState && surface.state !== Mir.HiddenState ? 1.0 : 0.0
36+ Behavior on opacity { UbuntuNumberAnimation {} }
37+ visible: opacity !== 0.0 // make it transparent to input as well
38+
39+ readonly property bool dragging: windowResizeArea.dragging || d.touchOverlayDragging || d.moveHandlerDragging
40+
41+ QtObject {
42+ id: d
43+ readonly property bool decorated: surface ? surface.type === Mir.UtilityType
44+ || surface.type === Mir.DialogType
45+ || surface.type === Mir.NormalType
46+ : false
47+
48+ readonly property bool moveable: decorated
49+ readonly property bool resizeable: decorated
50+
51+ property alias decoration: decorationLoader.item
52+ property alias moveHandler: moveHandlerLoader.item
53+
54+ readonly property bool touchOverlayDragging: touchOverlayLoader.item ? touchOverlayLoader.item.dragging : false
55+ readonly property bool moveHandlerDragging: moveHandlerLoader.item ? moveHandlerLoader.item.dragging : false
56+ }
57+
58+ WindowResizeArea {
59+ id: windowResizeArea
60+ anchors {
61+ top: decorationLoader.top
62+ bottom: parent.bottom
63+ left: parent.left; right: parent.right
64+ }
65+ target: root.target
66+ boundsItem: root.boundsItem
67+ minWidth: units.gu(10)
68+ minHeight: units.gu(10)
69+ borderThickness: units.gu(2)
70+ enabled: d.resizeable
71+ visible: enabled
72+ onPressed: root.surface.activate();
73+ }
74+
75+ BorderImage {
76+ property real shadowThickness: root.surface && root.surface.focused ? units.gu(2) : units.gu(1.5)
77+ anchors {
78+ top: decorationLoader.top
79+ bottom: parent.bottom
80+ left: parent.left; right: parent.right
81+ margins: -shadowThickness
82+ }
83+ source: "../graphics/dropshadow2gu.sci"
84+ opacity: .3
85+ }
86+
87+ Loader {
88+ id: decorationLoader
89+ anchors.bottom: root.top
90+ anchors.left: root.left
91+ anchors.right: root.right
92+
93+ visible: active
94+ active: d.decorated
95+
96+ height: item ? item.height : 0
97+
98+ sourceComponent: Component {
99+ WindowDecoration {
100+ height: units.gu(3)
101+ title: root.surface ? root.surface.name : ""
102+ active: root.surface ? root.surface.focused : false
103+ closeButtonVisible: false
104+ minimizeButtonVisible: false
105+ maximizeButtonShown: false
106+ onPressed: root.surface.activate();
107+ onPressedChanged: if (d.moveHandler) { d.moveHandler.handlePressedChanged(pressed, pressedButtons, mouseX, mouseY); }
108+ onPositionChanged: if (d.moveHandler) {
109+ d.moveHandler.handlePositionChanged(mouse);
110+ }
111+ onReleased: if (d.moveHandler) { d.moveHandler.handleReleased(); }
112+ }
113+ }
114+ }
115+
116+ Loader {
117+ id: moveHandlerLoader
118+ active: d.moveable
119+ sourceComponent: Component {
120+ MoveHandler {
121+ target: root.target
122+ buttonsWidth: d.decoration ? d.decoration.buttonsWidth : 0
123+ boundsItem: root.boundsItem
124+ boundsTopMargin: decorationLoader.height
125+ }
126+ }
127+ }
128+
129+ SurfaceContainer {
130+ id: surfaceContainer
131+
132+ // Do not hold on to a dead surface so that it can be destroyed.
133+ // FIXME It should not be QML's job to release the MirSurface if its backing surface goes away. Instead backing
134+ // MirSurface should go away but the MirSurfaceItem should be able to live on with the last drawn frame
135+ // and properties.
136+ surface: root.surface && root.surface.live ? root.surface : null
137+
138+ requestedWidth: surface ? surface.size.width : 0
139+ requestedHeight: surface ? surface.size.height : 0
140+
141+ // TODO ChildWindow parent will probably want to control those
142+ interactive: true
143+ consumesInput: true
144+ }
145+
146+ Loader {
147+ id: touchOverlayLoader
148+ active: d.resizeable || d.moveable
149+ anchors.top: decorationLoader.top
150+ anchors.bottom: parent.bottom
151+ anchors.left: parent.left
152+ anchors.right: parent.right
153+ sourceComponent: Component { WindowControlsOverlay {
154+ target: root.target
155+ resizeArea: windowResizeArea
156+ boundsItem: root.boundsItem
157+ } }
158+ }
159+}
qml/Stage/ChildWindowRepeater.qmlnew file+28
@@ -0,0 +1,28 @@
1+/*
2+ * Copyright (C) 2016 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.4
18+
19+// Meant to be created with a Loader to circumvent the "ChildWindowTree is instantiated recursively" error from the QML engine
20+Repeater {
21+ id: root
22+ property Item boundsItem
23+ delegate: ChildWindowTree {
24+ surface: model.surface
25+ z: root.count - model.index
26+ boundsItem: root.boundsItem
27+ }
28+}
qml/Stage/ChildWindowTree.qmlnew file+127
@@ -0,0 +1,127 @@
1+/*
2+ * Copyright (C) 2016 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.4
18+import Ubuntu.Components 1.3
19+import Unity.Application 0.1
20+
21+Item {
22+ id: root
23+
24+ property alias surface: childWindow.surface
25+ property real displacementX: 0
26+ property real displacementY: 0
27+ property alias boundsItem: childWindow.boundsItem
28+
29+ x: surface ? surface.position.x + displacementX : 0
30+ y: surface ? surface.position.y + displacementY : 0
31+ width: childWindow.width
32+ height: childWindow.height
33+
34+ ////
35+ // API expected by MoveHandler (and some by WindowResizeArea as well)
36+ readonly property bool maximized: false
37+ readonly property bool maximizedLeft: false
38+ readonly property bool maximizedRight: false
39+ readonly property bool maximizedHorizontally: false
40+ readonly property bool maximizedVertically: false
41+ readonly property bool maximizedTopLeft: false
42+ readonly property bool maximizedTopRight: false
43+ readonly property bool maximizedBottomLeft: false
44+ readonly property bool maximizedBottomRight: false
45+ readonly property bool anyMaximized: maximized || maximizedLeft || maximizedRight || maximizedHorizontally || maximizedVertically ||
46+ maximizedTopLeft || maximizedTopRight || maximizedBottomLeft || maximizedBottomRight
47+
48+ readonly property bool canBeCornerMaximized: false
49+ readonly property bool canBeMaximizedLeftRight: false
50+ readonly property bool canBeMaximized: false
51+
52+ readonly property var resizeArea: QtObject {
53+ property real normalWidth: units.gu(1)
54+ property real normalHeight: units.gu(1)
55+ }
56+
57+ readonly property bool windowedTransitionRunning: false
58+
59+ // NB: those bindings will be overwritten by MoveHandler when you first move the window
60+ property real windowedX: x
61+ property real windowedY: y
62+
63+
64+ property real restoredX
65+ property real restoredY
66+
67+ state: "restored"
68+ // end of API expected by MoveHandler
69+ ////
70+
71+ ////
72+ // API expected by WindowResizeArea
73+ property real windowedWidth: childWindow.width
74+ property real windowedHeight: childWindow.height
75+ // end of API expected by WindowResizeArea
76+ ////
77+
78+ ////
79+ // API expected by WindowControlsOverlay
80+ function activate() {
81+ surface.activate();
82+ }
83+ // end of API expected by WindowControlsOverlay
84+ ////
85+
86+ Binding {
87+ target: root.surface
88+ when: childWindow.dragging
89+ property: "requestedPosition"
90+ value: Qt.point(root.windowedX - root.displacementX,
91+ root.windowedY - root.displacementY);
92+ }
93+
94+ // It's a separate Item so that a window can be hid independently of its children
95+ ChildWindow {
96+ id: childWindow
97+ target: root
98+ requestedWidth: root.windowedWidth
99+ requestedHeight: root.windowedHeight
100+ }
101+
102+ Connections {
103+ target: root.surface
104+ onFocusRequested: {
105+ root.surface.activate();
106+ }
107+ }
108+
109+ // Using a loader here mainly to circunvent the "ChildWindowTree is instantiated recursively" error from the QML engine
110+ Loader {
111+ id: childRepeaterLoader
112+ source: "ChildWindowRepeater.qml"
113+ active: root.surface && root.surface.childSurfaceList.count > 0
114+ Binding {
115+ target: childRepeaterLoader.item
116+ when: childRepeaterLoader.item
117+ property: "model"
118+ value: root.surface ? root.surface.childSurfaceList : null
119+ }
120+ Binding {
121+ target: childRepeaterLoader.item
122+ when: childRepeaterLoader.item
123+ property: "boundsItem"
124+ value: root.boundsItem
125+ }
126+ }
127+}
qml/Stage/DecoratedWindow.qml+1−2
@@ -67,8 +67,7 @@ FocusScope {
6767 readonly property int heightIncrement: !counterRotate ? applicationWindow.heightIncrement : applicationWindow.widthIncrement
6868
6969 property alias overlayShown: decoration.overlayShown
70− property alias stageWidth: moveHandler.stageWidth
71− property alias stageHeight: moveHandler.stageHeight
70+ property alias boundsItem: moveHandler.boundsItem
7271 readonly property alias dragging: moveHandler.dragging
7372
7473 readonly property Item clientAreaItem: applicationWindow
qml/Stage/MoveHandler.qml+23−18
@@ -19,15 +19,14 @@ import Unity.Application 0.1 // For Mir singleton
1919import Ubuntu.Components 1.3
2020import Utils 0.1
2121import "../Components"
22−import "../Components/PanelState"
2322
2423QtObject {
2524 id: root
2625
2726 property Item target // appDelegate
28− property int stageWidth
29− property int stageHeight
3027 property real buttonsWidth: 0
28+ property Item boundsItem
29+ property real boundsTopMargin: 0
3130
3231 readonly property bool dragging: priv.dragging
3332
@@ -79,7 +78,10 @@ QtObject {
7978 // length of the triggerArea square diagonal
8079 var diagLength = Math.sqrt(2 * priv.triggerArea * priv.triggerArea);
8180 var ratio = 1 - (distance / diagLength);
82− return bx > 0 && bx <= stageWidth && by > 0 && by <= stageHeight ? ratio : 1; // everything "outside" of our square from the center is 1
81+
82+ // everything "outside" of our square from the center is 1
83+ var mousePosBoundsCoords = target.mapToItem(root.boundsItem, bx, by);
84+ return root.boundsItem.contains(mousePosBoundsCoords) ? ratio : 1;
8385 }
8486 property real progress: 0
8587 }
@@ -117,35 +119,38 @@ QtObject {
117119 target.requestRestore();
118120 }
119121
120− var pos = mapToItem(target.parent, mouse.x, mouse.y);
122+ var pos = mapToItem(target.parent, mouse.x, mouse.y); // How can that work if we're just a QtObject (not an Item)?
123+ var bounds = boundsItem.mapToItem(target.parent, 0, 0, boundsItem.width, boundsItem.height);
124+ bounds.y += boundsTopMargin;
125+ bounds.height -= boundsTopMargin;
121126 // Use integer coordinate values to ensure that target is left in a pixel-aligned
122127 // position. Mouse movement could have subpixel precision, yielding a fractional
123128 // mouse position.
124129 target.windowedX = Math.round(pos.x - priv.distanceX);
125− target.windowedY = Math.round(Math.max(pos.y - priv.distanceY, PanelState.panelHeight));
130+ target.windowedY = Math.round(Math.max(pos.y - priv.distanceY, bounds.top));
126131
127132 if (sensingPoints) { // edge/corner detection when dragging via the touch overlay
128− if (sensingPoints.topLeft.x < priv.triggerArea && sensingPoints.topLeft.y < PanelState.panelHeight + priv.triggerArea
133+ if (sensingPoints.topLeft.x < priv.triggerArea && sensingPoints.topLeft.y < bounds.top + priv.triggerArea
129134 && target.canBeCornerMaximized) { // top left
130− priv.progress = priv.progressInCorner(0, PanelState.panelHeight, sensingPoints.topLeft.x, sensingPoints.topLeft.y);
135+ priv.progress = priv.progressInCorner(bounds.left, bounds.top, sensingPoints.topLeft.x, sensingPoints.topLeft.y);
131136 priv.resetEdges();
132137 priv.nearTopLeftCorner = true;
133138 root.fakeMaximizeTopLeftAnimationRequested(priv.progress);
134− } else if (sensingPoints.topRight.x > stageWidth - priv.triggerArea && sensingPoints.topRight.y < PanelState.panelHeight + priv.triggerArea
139+ } else if (sensingPoints.topRight.x > bounds.right - priv.triggerArea && sensingPoints.topRight.y < bounds.top + priv.triggerArea
135140 && target.canBeCornerMaximized) { // top right
136− priv.progress = priv.progressInCorner(stageWidth, PanelState.panelHeight, sensingPoints.topRight.x, sensingPoints.topRight.y);
141+ priv.progress = priv.progressInCorner(bounds.right, bounds.top, sensingPoints.topRight.x, sensingPoints.topRight.y);
137142 priv.resetEdges();
138143 priv.nearTopRightCorner = true;
139144 root.fakeMaximizeTopRightAnimationRequested(priv.progress);
140− } else if (sensingPoints.bottomLeft.x < priv.triggerArea && sensingPoints.bottomLeft.y > stageHeight - priv.triggerArea
145+ } else if (sensingPoints.bottomLeft.x < priv.triggerArea && sensingPoints.bottomLeft.y > bounds.bottom - priv.triggerArea
141146 && target.canBeCornerMaximized) { // bottom left
142− priv.progress = priv.progressInCorner(0, stageHeight, sensingPoints.bottomLeft.x, sensingPoints.bottomLeft.y);
147+ priv.progress = priv.progressInCorner(bounds.left, bounds.bottom, sensingPoints.bottomLeft.x, sensingPoints.bottomLeft.y);
143148 priv.resetEdges();
144149 priv.nearBottomLeftCorner = true;
145150 root.fakeMaximizeBottomLeftAnimationRequested(priv.progress);
146− } else if (sensingPoints.bottomRight.x > stageWidth - priv.triggerArea && sensingPoints.bottomRight.y > stageHeight - priv.triggerArea
151+ } else if (sensingPoints.bottomRight.x > bounds.right - priv.triggerArea && sensingPoints.bottomRight.y > bounds.bottom - priv.triggerArea
147152 && target.canBeCornerMaximized) { // bottom right
148− priv.progress = priv.progressInCorner(stageWidth, stageHeight, sensingPoints.bottomRight.x, sensingPoints.bottomRight.y);
153+ priv.progress = priv.progressInCorner(bounds.right, bounds.bottom, sensingPoints.bottomRight.x, sensingPoints.bottomRight.y);
149154 priv.resetEdges();
150155 priv.nearBottomRightCorner = true;
151156 root.fakeMaximizeBottomRightAnimationRequested(priv.progress);
@@ -154,13 +159,13 @@ QtObject {
154159 priv.resetEdges();
155160 priv.nearLeftEdge = true;
156161 root.fakeMaximizeLeftAnimationRequested(priv.progress);
157− } else if (sensingPoints.right.x > stageWidth - priv.triggerArea && target.canBeMaximizedLeftRight) { // right
158− priv.progress = MathUtils.clampAndProject(sensingPoints.right.x, stageWidth - priv.triggerArea, stageWidth, 0, 1);
162+ } else if (sensingPoints.right.x > bounds.right - priv.triggerArea && target.canBeMaximizedLeftRight) { // right
163+ priv.progress = MathUtils.clampAndProject(sensingPoints.right.x, bounds.right - priv.triggerArea, bounds.right, 0, 1);
159164 priv.resetEdges();
160165 priv.nearRightEdge = true;
161166 root.fakeMaximizeRightAnimationRequested(priv.progress);
162− } else if (sensingPoints.top.y < PanelState.panelHeight + priv.triggerArea && target.canBeMaximized) { // top
163− priv.progress = MathUtils.clampAndProject(sensingPoints.top.y, PanelState.panelHeight + priv.triggerArea, 0, 0, 1);
167+ } else if (sensingPoints.top.y < bounds.top + priv.triggerArea && target.canBeMaximized) { // top
168+ priv.progress = MathUtils.clampAndProject(sensingPoints.top.y, bounds.top + priv.triggerArea, 0, 0, 1);
164169 priv.resetEdges();
165170 priv.nearTopEdge = true;
166171 root.fakeMaximizeAnimationRequested(priv.progress);
qml/Stage/Stage.qml+113−65
@@ -46,6 +46,7 @@ FocusScope {
4646 property int leftMargin: 0
4747 property bool oskEnabled: false
4848 property rect inputMethodRect
49+ property real rightEdgePushProgress: 0
4950
5051 // Configuration
5152 property string mode: "staged"
@@ -100,7 +101,9 @@ FocusScope {
100101 } else {
101102 // No we didn't, do a quick alt-tab
102103 if (appRepeater.count > 1) {
103− appRepeater.itemAt(1).claimFocus();
104+ appRepeater.itemAt(1).activate();
105+ } else if (appRepeater.count > 0) {
106+ appRepeater.itemAt(0).activate(); // quick alt-tab to the only (minimized) window should still activate it
104107 }
105108 }
106109 }
@@ -125,11 +128,6 @@ FocusScope {
125128 // functions to be called from outside
126129 function updateFocusedAppOrientation() { /* TODO */ }
127130 function updateFocusedAppOrientationAnimated() { /* TODO */}
128− function pushRightEdge(amount) {
129− if (root.spreadEnabled) {
130− edgeBarrier.push(amount);
131− }
132− }
133131
134132 function closeSpread() {
135133 priv.goneToSpread = false;
@@ -141,6 +139,12 @@ FocusScope {
141139 }
142140 }
143141
142+ onRightEdgePushProgressChanged: {
143+ if (spreadEnabled && rightEdgePushProgress >= 1) {
144+ priv.goneToSpread = true
145+ }
146+ }
147+
144148 GSettings {
145149 id: lifecycleExceptions
146150 schema.id: "com.canonical.qtmir"
@@ -452,7 +456,7 @@ FocusScope {
452456 PropertyChanges { target: wallpaper; visible: false }
453457 },
454458 State {
455− name: "stagedRightEdge"; when: (rightEdgeDragArea.dragging || edgeBarrier.progress > 0) && root.mode == "staged"
459+ name: "stagedRightEdge"; when: root.spreadEnabled && (rightEdgeDragArea.dragging || rightEdgePushProgress > 0) && root.mode == "staged"
456460 PropertyChanges {
457461 target: blurLayer;
458462 visible: true;
@@ -462,7 +466,7 @@ FocusScope {
462466 }
463467 },
464468 State {
465− name: "sideStagedRightEdge"; when: (rightEdgeDragArea.dragging || edgeBarrier.progress > 0) && root.mode == "stagedWithSideStage"
469+ name: "sideStagedRightEdge"; when: root.spreadEnabled && (rightEdgeDragArea.dragging || rightEdgePushProgress > 0) && root.mode == "stagedWithSideStage"
466470 extend: "stagedRightEdge"
467471 PropertyChanges {
468472 target: sideStage
@@ -471,18 +475,18 @@ FocusScope {
471475 }
472476 },
473477 State {
474− name: "windowedRightEdge"; when: (rightEdgeDragArea.dragging || edgeBarrier.progress > 0) && root.mode == "windowed"
478+ name: "windowedRightEdge"; when: root.spreadEnabled && (rightEdgeDragArea.dragging || rightEdgePushProgress > 0) && root.mode == "windowed"
475479 PropertyChanges {
476480 target: blurLayer;
477481 visible: true
478482 blurRadius: 32
479483 brightness: .65
480− opacity: MathUtils.linearAnimation(spreadItem.rightEdgeBreakPoint, 1, 0, 1, Math.max(rightEdgeDragArea.dragging ? rightEdgeDragArea.progress : 0, edgeBarrier.progress))
484+ opacity: MathUtils.linearAnimation(spreadItem.rightEdgeBreakPoint, 1, 0, 1, Math.max(rightEdgeDragArea.dragging ? rightEdgeDragArea.progress : 0, rightEdgePushProgress))
481485 }
482486 },
483487 State {
484488 name: "staged"; when: root.mode === "staged"
485− PropertyChanges { target: wallpaper; visible: false }
489+ PropertyChanges { target: wallpaper; visible: !priv.focusedAppDelegate || priv.focusedAppDelegate.x !== 0 }
486490 },
487491 State {
488492 name: "stagedWithSideStage"; when: root.mode === "stagedWithSideStage"
@@ -502,7 +506,6 @@ FocusScope {
502506 Transition {
503507 to: "spread"
504508 PropertyAction { target: spreadItem; property: "highlightedIndex"; value: appRepeater.count > 1 ? 1 : 0 }
505− PropertyAction { target: floatingFlickable; property: "contentX"; value: 0 }
506509 },
507510 Transition {
508511 from: "spread"
@@ -517,6 +520,7 @@ FocusScope {
517520 }
518521 }
519522 PropertyAction { target: spreadItem; property: "highlightedIndex"; value: -1 }
523+ PropertyAction { target: floatingFlickable; property: "contentX"; value: 0 }
520524 }
521525 },
522526 Transition {
@@ -665,6 +669,13 @@ FocusScope {
665669 }
666670 }
667671
672+ Item {
673+ id: boundariesForWindowPlacement
674+ anchors.fill: parent
675+ anchors.topMargin: PanelState.panelHeight
676+ visible: false
677+ }
678+
668679 Repeater {
669680 id: appRepeater
670681 model: topLevelSurfaceList
@@ -804,7 +815,7 @@ FocusScope {
804815 maximizedTopLeft || maximizedTopRight || maximizedBottomLeft || maximizedBottomRight
805816
806817 readonly property bool minimized: windowState & WindowStateStorage.WindowStateMinimized
807− readonly property bool fullscreen: window.state === Mir.FullscreenState
818+ readonly property bool fullscreen: windowState === WindowStateStorage.WindowStateFullscreen
808819
809820 readonly property bool canBeMaximized: canBeMaximizedHorizontally && canBeMaximizedVertically
810821 readonly property bool canBeMaximizedLeftRight: (maximumWidth == 0 || maximumWidth >= appContainer.width/2) &&
@@ -815,7 +826,10 @@ FocusScope {
815826 readonly property bool canBeMaximizedVertically: maximumHeight == 0 || maximumHeight >= appContainer.height
816827 readonly property alias orientationChangesEnabled: decoratedWindow.orientationChangesEnabled
817828
829+ // TODO drop our own windowType once Mir/Miral/Qtmir gets in sync with ours
818830 property int windowState: WindowStateStorage.WindowStateNormal
831+ property int prevWindowState: WindowStateStorage.WindowStateRestored
832+
819833 property bool animationsEnabled: true
820834 property alias title: decoratedWindow.title
821835 readonly property string appName: model.application ? model.application.name : ""
@@ -833,7 +847,6 @@ FocusScope {
833847 readonly property var surface: model.window.surface
834848 readonly property var window: model.window
835849
836− readonly property alias resizeArea: resizeArea
837850 readonly property alias focusedSurface: decoratedWindow.focusedSurface
838851 readonly property bool dragging: touchControls.overlayShown ? touchControls.dragging : decoratedWindow.dragging
839852
@@ -871,9 +884,6 @@ FocusScope {
871884 }
872885 priv.updateMainAndSideStageIndexes();
873886 }
874− if (root.mode == "windowed") {
875− appDelegate.restore(true /* animated */, appDelegate.windowState);
876− }
877887 appDelegate.focus = true;
878888 }
879889
@@ -890,7 +900,7 @@ FocusScope {
890900 screenWidth: appContainer.width
891901 screenHeight: appContainer.height
892902 leftMargin: root.leftMargin
893− minimumY: PanelState.panelHeight
903+ minimumY: boundariesForWindowPlacement.y
894904 }
895905
896906 Connections {
@@ -923,7 +933,14 @@ FocusScope {
923933 } else if (model.window.state === Mir.MaximizedBottomRightState) {
924934 appDelegate.maximizeBottomRight();
925935 } else if (model.window.state === Mir.RestoredState) {
926− appDelegate.restore();
936+ if (appDelegate.fullscreen && appDelegate.prevWindowState != WindowStateStorage.WindowStateRestored) {
937+ model.window.requestState(WindowStateStorage.toMirState(appDelegate.prevWindowState));
938+ } else {
939+ appDelegate.restore();
940+ }
941+ } else if (model.window.state === Mir.FullscreenState) {
942+ appDelegate.prevWindowState = appDelegate.windowState;
943+ appDelegate.windowState = WindowStateStorage.WindowStateFullscreen;
927944 }
928945 }
929946 }
@@ -1025,6 +1042,7 @@ FocusScope {
10251042 animationsEnabled = (animated === undefined) || animated;
10261043 windowState = state || WindowStateStorage.WindowStateRestored;
10271044 windowState &= ~WindowStateStorage.WindowStateMinimized; // clear the minimized bit
1045+ prevWindowState = windowState;
10281046 }
10291047
10301048 function playFocusAnimation() {
@@ -1187,7 +1205,7 @@ FocusScope {
11871205 when: (root.mode == "staged" || root.mode == "stagedWithSideStage") && (root.state == "sideStagedRightEdge" || root.state == "stagedRightEdge" || rightEdgeFocusAnimation.running || hidingAnimation.running)
11881206 PropertyChanges {
11891207 target: stagedRightEdgeMaths
1190− progress: Math.max(edgeBarrier.progress, rightEdgeDragArea.draggedProgress)
1208+ progress: Math.max(rightEdgePushProgress, rightEdgeDragArea.draggedProgress)
11911209 }
11921210 PropertyChanges {
11931211 target: appDelegate
@@ -1214,11 +1232,11 @@ FocusScope {
12141232 },
12151233 State {
12161234 name: "windowedRightEdge"
1217− when: root.mode == "windowed" && (root.state == "windowedRightEdge" || rightEdgeFocusAnimation.running || hidingAnimation.running || edgeBarrier.progress > 0)
1235+ when: root.mode == "windowed" && (root.state == "windowedRightEdge" || rightEdgeFocusAnimation.running || hidingAnimation.running || rightEdgePushProgress > 0)
12181236 PropertyChanges {
12191237 target: windowedRightEdgeMaths
12201238 swipeProgress: rightEdgeDragArea.dragging ? rightEdgeDragArea.progress : 0
1221− pushProgress: edgeBarrier.progress
1239+ pushProgress: rightEdgePushProgress
12221240 }
12231241 PropertyChanges {
12241242 target: appDelegate
@@ -1412,11 +1430,12 @@ FocusScope {
14121430 name: "minimized"; when: appDelegate.minimized
14131431 PropertyChanges {
14141432 target: appDelegate
1415− requestedX: -appDelegate.width / 2
14161433 scale: units.gu(5) / appDelegate.width
14171434 opacity: 0;
14181435 visuallyMinimized: true
14191436 visuallyMaximized: false
1437+ x: -appDelegate.width / 2
1438+ y: root.height / 2
14201439 }
14211440 }
14221441 ]
@@ -1432,15 +1451,6 @@ FocusScope {
14321451 to: "staged,stagedWithSideStage"
14331452 UbuntuNumberAnimation { target: appDelegate; properties: "x,y,requestedX,requestedY,requestedWidth,requestedHeight"; duration: priv.animationDuration}
14341453 },
1435− Transition {
1436− to: "minimized"
1437− enabled: appDelegate.animationsEnabled
1438− PropertyAction { target: appDelegate; property: "visuallyMaximized" }
1439− SequentialAnimation {
1440− UbuntuNumberAnimation { target: appDelegate; properties: "requestedX,requestedY,opacity,scale,requestedWidth,requestedHeight" }
1441− PropertyAction { target: appDelegate; property: "visuallyMinimized" }
1442− }
1443− },
14441454 Transition {
14451455 to: "spread"
14461456 // DecoratedWindow wants the scaleToPreviewSize set before enabling scaleToPreview
@@ -1489,6 +1499,31 @@ FocusScope {
14891499 PropertyAction { target: appDelegate; property: "visible" }
14901500 }
14911501 },
1502+ Transition {
1503+ from: ",normal,restored,maximized,maximizedLeft,maximizedRight,maximizedTopLeft,maximizedTopRight,maximizedBottomLeft,maximizedBottomRight,maximizedHorizontally,maximizedVertically,fullscreen"
1504+ to: "minimized"
1505+ SequentialAnimation {
1506+ ScriptAction { script: print("transitioning:", appDelegate.x, appDelegate.y, appDelegate.scale) }
1507+ ScriptAction { script: { fakeRectangle.stop(); } }
1508+ PropertyAction { target: appDelegate; property: "visuallyMaximized" }
1509+ UbuntuNumberAnimation { target: appDelegate; properties: "x,y,scale,opacity"; duration: priv.animationDuration }
1510+ PropertyAction { target: appDelegate; property: "visuallyMinimized" }
1511+ }
1512+ },
1513+ Transition {
1514+ from: "minimized"
1515+ to: ",normal,restored,maximized,maximizedLeft,maximizedRight,maximizedTopLeft,maximizedTopRight,maximizedBottomLeft,maximizedBottomRight,maximizedHorizontally,maximizedVertically,fullscreen"
1516+ SequentialAnimation {
1517+ ScriptAction { script: print("transitioning:", appDelegate.x, appDelegate.y, appDelegate.scale) }
1518+ PropertyAction { target: appDelegate; property: "visuallyMinimized,z" }
1519+ ParallelAnimation {
1520+ UbuntuNumberAnimation { target: appDelegate; properties: "x"; from: -appDelegate.width / 2; duration: priv.animationDuration }
1521+ UbuntuNumberAnimation { target: appDelegate; properties: "y,opacity"; duration: priv.animationDuration }
1522+ UbuntuNumberAnimation { target: appDelegate; properties: "scale"; from: 0; duration: priv.animationDuration }
1523+ }
1524+ PropertyAction { target: appDelegate; property: "visuallyMaximized" }
1525+ }
1526+ },
14921527 Transition {
14931528 id: windowedTransition
14941529 from: ",normal,restored,maximized,maximizedLeft,maximizedRight,maximizedTopLeft,maximizedTopRight,maximizedBottomLeft,maximizedBottomRight,maximizedHorizontally,maximizedVertically,fullscreen,minimized"
@@ -1520,7 +1555,7 @@ FocusScope {
15201555 anchors.margins: touchControls.overlayShown ? borderThickness/2 : -borderThickness
15211556
15221557 target: appDelegate
1523− minimumY: PanelState.panelHeight // disallow resizing up past Panel
1558+ boundsItem: boundariesForWindowPlacement
15241559 minWidth: units.gu(10)
15251560 minHeight: units.gu(10)
15261561 borderThickness: units.gu(2)
@@ -1539,7 +1574,7 @@ FocusScope {
15391574 anchors.top: appDelegate.top
15401575 application: model.application
15411576 surface: model.window.surface
1542− active: appDelegate.focus
1577+ active: model.window.focused
15431578 focus: true
15441579 interactive: root.interactive
15451580 showDecoration: 1
@@ -1548,8 +1583,7 @@ FocusScope {
15481583 width: implicitWidth
15491584 height: implicitHeight
15501585 highlightSize: windowInfoItem.iconMargin / 2
1551− stageWidth: appContainer.width
1552− stageHeight: appContainer.height
1586+ boundsItem: boundariesForWindowPlacement
15531587
15541588 requestedWidth: appDelegate.requestedWidth
15551589 requestedHeight: appDelegate.requestedHeight
@@ -1581,7 +1615,10 @@ FocusScope {
15811615 onDecorationReleased: fakeRectangle.commit();
15821616
15831617 property real angle: 0
1618+ Behavior on angle { enabled: priv.closingIndex >= 0; UbuntuNumberAnimation {} }
15841619 property real itemScale: 1
1620+ Behavior on itemScale { enabled: priv.closingIndex >= 0; UbuntuNumberAnimation {} }
1621+
15851622 transform: [
15861623 Scale {
15871624 origin.x: 0
@@ -1604,11 +1641,12 @@ FocusScope {
16041641
16051642 WindowControlsOverlay {
16061643 id: touchControls
1644+ anchors.fill: appDelegate
16071645 target: appDelegate
1646+ resizeArea: resizeArea
16081647 enabled: false
16091648 visible: enabled
1610− stageWidth: appContainer.width
1611− stageHeight: appContainer.height
1649+ boundsItem: boundariesForWindowPlacement
16121650
16131651 onFakeMaximizeAnimationRequested: if (!appDelegate.maximized) fakeRectangle.maximize(amount, true)
16141652 onFakeMaximizeLeftAnimationRequested: if (!appDelegate.maximizedLeft) fakeRectangle.maximizeLeft(amount, true)
@@ -1642,7 +1680,6 @@ FocusScope {
16421680 onClicked: {
16431681 spreadItem.highlightedIndex = index;
16441682 if (distance == 0) {
1645− model.window.activate();
16461683 priv.goneToSpread = false;
16471684 }
16481685 }
@@ -1703,6 +1740,41 @@ FocusScope {
17031740 sourceSize.height: height
17041741 }
17051742 }
1743+
1744+ Item {
1745+ // Group all child windows in this item so that we can fade them out together when going to the spread
1746+ // (and fade them in back again when returning from it)
1747+ readonly property bool stageOnProperState: root.state === "windowed"
1748+ || root.state === "staged"
1749+ || root.state === "stagedWithSideStage"
1750+
1751+ // TODO: Is it worth the extra cost of layering to avoid the opacity artifacts of intersecting children?
1752+ // Btw, will involve more than uncommenting the line below as children won't necessarily fit this item's
1753+ // geometry. This is just a reference.
1754+ //layer.enabled: opacity !== 0.0 && opacity !== 1.0
1755+
1756+ opacity: stageOnProperState ? 1.0 : 0.0
1757+ visible: opacity !== 0.0 // make it transparent to input as well
1758+ Behavior on opacity { UbuntuNumberAnimation {} }
1759+
1760+ Repeater {
1761+ id: childWindowRepeater
1762+ model: appDelegate.surface ? appDelegate.surface.childSurfaceList : null
1763+
1764+ delegate: ChildWindowTree {
1765+ surface: model.surface
1766+
1767+ // Account for the displacement caused by window decoration in the top-level surface
1768+ // Ie, the top-level surface is not positioned at (0,0) of this ChildWindow's parent (appDelegate)
1769+ displacementX: appDelegate.clientAreaItem.x
1770+ displacementY: appDelegate.clientAreaItem.y
1771+
1772+ boundsItem: boundariesForWindowPlacement
1773+
1774+ z: childWindowRepeater.count - model.index
1775+ }
1776+ }
1777+ }
17061778 }
17071779 }
17081780 }
@@ -1715,30 +1787,6 @@ FocusScope {
17151787 appContainerHeight: appContainer.height
17161788 }
17171789
1718− EdgeBarrier {
1719− id: edgeBarrier
1720−
1721− // NB: it does its own positioning according to the specified edge
1722− edge: Qt.RightEdge
1723−
1724− onPassed: priv.goneToSpread = true;
1725−
1726− material: Component {
1727− Item {
1728− Rectangle {
1729− width: parent.height
1730− height: parent.width
1731− rotation: 90
1732− anchors.centerIn: parent
1733− gradient: Gradient {
1734− GradientStop { position: 0.0; color: Qt.rgba(0.16,0.16,0.16,0.5)}
1735− GradientStop { position: 1.0; color: Qt.rgba(0.16,0.16,0.16,0)}
1736− }
1737− }
1738− }
1739− }
1740− }
1741−
17421790 MouseArea {
17431791 id: hoverMouseArea
17441792 objectName: "hoverMouseArea"
@@ -1805,11 +1853,11 @@ FocusScope {
18051853 var targetContentX = floatingFlickable.contentWidth / spreadItem.totalItemCount * toIndex;
18061854 if (targetContentX - floatingFlickable.contentX > spreadItem.rightStackXPos - (spreadItem.spreadItemWidth / 2)) {
18071855 var offset = (spreadItem.rightStackXPos - (spreadItem.spreadItemWidth / 2)) - (targetContentX - floatingFlickable.contentX)
1808− snapAnimation.to = floatingFlickable.contentX - offset;
1856+ snapAnimation.to = Math.max(0, floatingFlickable.contentX - offset);
18091857 snapAnimation.start();
18101858 } else if (targetContentX - floatingFlickable.contentX < spreadItem.leftStackXPos + units.gu(1)) {
18111859 var offset = (spreadItem.leftStackXPos + units.gu(1)) - (targetContentX - floatingFlickable.contentX);
1812− snapAnimation.to = floatingFlickable.contentX - offset;
1860+ snapAnimation.to = Math.max(0, floatingFlickable.contentX - offset);
18131861 snapAnimation.start();
18141862 }
18151863 }
qml/Stage/WindowControlsOverlay.qml+21−24
@@ -18,17 +18,14 @@ import QtQuick 2.4
1818import Ubuntu.Components 1.3
1919import Ubuntu.Gestures 0.1
2020import Unity.Application 0.1
21−import "../Components/PanelState"
2221
2322Item {
2423 id: root
25− enabled: target && !target.fullscreen
26− anchors.fill: target
2724
2825 // to be set from outside
2926 property Item target // appDelegate
30− property alias stageWidth: moveHandler.stageWidth
31− property alias stageHeight: moveHandler.stageHeight
27+ property WindowResizeArea resizeArea
28+ property Item boundsItem
3229
3330 // to be read from outside
3431 readonly property alias overlayShown: overlay.visible
@@ -90,9 +87,7 @@ Item {
9087
9188 QtObject {
9289 id: priv
93− readonly property var resizeArea: root.target && root.target.resizeArea ? root.target.resizeArea : null
94− readonly property bool ensureWindow: root.target.state == "normal" || root.target.state == "restored"
95− readonly property bool dragging: moveHandler.dragging || (resizeArea && resizeArea.dragging)
90+ readonly property bool dragging: moveHandler.dragging || (root.resizeArea && root.resizeArea.dragging)
9691
9792 function getSensingPoints() {
9893 var xPoints = [];
@@ -162,6 +157,8 @@ Item {
162157 objectName: "moveHandler"
163158 target: root.target
164159
160+ boundsItem: root.boundsItem
161+
165162 onFakeMaximizeAnimationRequested: root.fakeMaximizeAnimationRequested(amount)
166163 onFakeMaximizeLeftAnimationRequested: root.fakeMaximizeLeftAnimationRequested(amount)
167164 onFakeMaximizeRightAnimationRequested: root.fakeMaximizeRightAnimationRequested(amount)
@@ -193,65 +190,65 @@ Item {
193190 ResizeGrip { // top left
194191 anchors.horizontalCenter: parent.left
195192 anchors.verticalCenter: parent.top
196− visible: priv.ensureWindow || target.maximizedBottomRight
197− resizeTarget: priv.resizeArea
193+ visible: root.enabled || target.maximizedBottomRight
194+ resizeTarget: root.resizeArea
198195 }
199196
200197 ResizeGrip { // top center
201198 anchors.horizontalCenter: parent.horizontalCenter
202199 anchors.verticalCenter: parent.top
203200 rotation: 45
204− visible: priv.ensureWindow || target.maximizedHorizontally || target.maximizedBottomLeft || target.maximizedBottomRight
205− resizeTarget: priv.resizeArea
201+ visible: root.enabled || target.maximizedHorizontally || target.maximizedBottomLeft || target.maximizedBottomRight
202+ resizeTarget: root.resizeArea
206203 }
207204
208205 ResizeGrip { // top right
209206 anchors.horizontalCenter: parent.right
210207 anchors.verticalCenter: parent.top
211208 rotation: 90
212− visible: priv.ensureWindow || target.maximizedBottomLeft
213− resizeTarget: priv.resizeArea
209+ visible: root.enabled || target.maximizedBottomLeft
210+ resizeTarget: root.resizeArea
214211 }
215212
216213 ResizeGrip { // right
217214 anchors.horizontalCenter: parent.right
218215 anchors.verticalCenter: parent.verticalCenter
219216 rotation: 135
220− visible: priv.ensureWindow || target.maximizedVertically || target.maximizedLeft ||
217+ visible: root.enabled || target.maximizedVertically || target.maximizedLeft ||
221218 target.maximizedTopLeft || target.maximizedBottomLeft
222− resizeTarget: priv.resizeArea
219+ resizeTarget: root.resizeArea
223220 }
224221
225222 ResizeGrip { // bottom right
226223 anchors.horizontalCenter: parent.right
227224 anchors.verticalCenter: parent.bottom
228− visible: priv.ensureWindow || target.maximizedTopLeft
229− resizeTarget: priv.resizeArea
225+ visible: root.enabled || target.maximizedTopLeft
226+ resizeTarget: root.resizeArea
230227 }
231228
232229 ResizeGrip { // bottom center
233230 anchors.horizontalCenter: parent.horizontalCenter
234231 anchors.verticalCenter: parent.bottom
235232 rotation: 45
236− visible: priv.ensureWindow || target.maximizedHorizontally || target.maximizedTopLeft || target.maximizedTopRight
237− resizeTarget: priv.resizeArea
233+ visible: root.enabled || target.maximizedHorizontally || target.maximizedTopLeft || target.maximizedTopRight
234+ resizeTarget: root.resizeArea
238235 }
239236
240237 ResizeGrip { // bottom left
241238 anchors.horizontalCenter: parent.left
242239 anchors.verticalCenter: parent.bottom
243240 rotation: 90
244− visible: priv.ensureWindow || target.maximizedTopRight
245− resizeTarget: priv.resizeArea
241+ visible: root.enabled || target.maximizedTopRight
242+ resizeTarget: root.resizeArea
246243 }
247244
248245 ResizeGrip { // left
249246 anchors.horizontalCenter: parent.left
250247 anchors.verticalCenter: parent.verticalCenter
251248 rotation: 135
252− visible: priv.ensureWindow || target.maximizedVertically || target.maximizedRight ||
249+ visible: root.enabled || target.maximizedVertically || target.maximizedRight ||
253250 target.maximizedTopRight || target.maximizedBottomRight
254− resizeTarget: priv.resizeArea
251+ resizeTarget: root.resizeArea
255252 }
256253 }
257254}
qml/Stage/WindowDecoration.qml+1
@@ -28,6 +28,7 @@ MouseArea {
2828 property alias closeButtonVisible: buttons.closeButtonShown
2929 property alias title: titleLabel.text
3030 property alias maximizeButtonShown: buttons.maximizeButtonShown
31+ property alias minimizeButtonVisible: buttons.minimizeButtonVisible
3132 property bool active: false
3233 property alias overlayShown: buttons.overlayShown
3334 property var menu: undefined
qml/Stage/WindowResizeArea.qml+3−2
@@ -32,7 +32,7 @@ MouseArea {
3232 // The area will anchor to it and manage resize events
3333 property Item target: null
3434 property int borderThickness: 0
35− property real minimumY: -100000000 // By default, impose no limit
35+ property Item boundsItem
3636 property int minWidth: 0
3737 property int minHeight: 0
3838
@@ -243,7 +243,8 @@ MouseArea {
243243 }
244244
245245 if (d.topBorder) {
246− var newTargetY = Math.max(d.startY + deltaY, root.minimumY);
246+ var bounds = boundsItem.mapToItem(target.parent, 0, 0, boundsItem.width, boundsItem.height);
247+ var newTargetY = Math.max(d.startY + deltaY, bounds.y);
247248 var bottomBorderY = target.windowedY + target.height;
248249 if (bottomBorderY > newTargetY + d.minimumHeight) {
249250 if (bottomBorderY < newTargetY + d.maximumHeight) {
qml/Tutorial/TutorialLeftLong.qml+1−1
@@ -46,7 +46,7 @@ TutorialPage {
4646 }
4747
4848 label {
49− text: i18n.tr("Long swipe from the left edge to open the Today scope")
49+ text: i18n.tr("Long swipe from the left edge to open the Application Drawer")
5050 anchors.left: arrow.right
5151 anchors.leftMargin: units.gu(3)
5252 anchors.right: root.right
tests/mocks/Unity/Application/ApplicationInfo.cpp+9−1
@@ -94,6 +94,7 @@ void ApplicationInfo::createPromptSurface()
9494 auto surface = surfaceManager->createSurface(QString("prompt foo"),
9595 Mir::NormalType,
9696 Mir::RestoredState,
97+ nullptr, /* parentSurface */
9798 screenshotUrl);
9899 surfaceManager->notifySurfaceCreated(surface);
99100
@@ -122,7 +123,9 @@ void ApplicationInfo::createSurface()
122123 auto surface = surfaceManager->createSurface(surfaceName,
123124 Mir::NormalType,
124125 fullscreen() ? Mir::FullscreenState : Mir::RestoredState,
125− m_screenshotFileName);
126+ nullptr, /* parentSurface */
127+ m_screenshotFileName,
128+ m_qmlFilePath);
126129
127130 surface->setShellChrome(m_shellChrome);
128131
@@ -201,6 +204,11 @@ void ApplicationInfo::setScreenshotId(const QString &screenshotId)
201204 }
202205}
203206
207+void ApplicationInfo::setQmlFilename(const QString &qmlFilename)
208+{
209+ m_qmlFilePath = QString("qrc:///Unity/Application/%1").arg(qmlFilename);
210+}
211+
204212void ApplicationInfo::setName(const QString &value)
205213{
206214 if (value != m_name) {
tests/mocks/Unity/Application/ApplicationInfo.h+3
@@ -29,6 +29,7 @@ class MirSurface;
2929
3030#include <QList>
3131#include <QTimer>
32+#include <QUrl>
3233
3334using namespace unity::shell::application;
3435
@@ -58,6 +59,7 @@ public:
5859
5960 void setIconId(const QString &iconId);
6061 void setScreenshotId(const QString &screenshotId);
62+ void setQmlFilename(const QString &);
6163
6264 void setAppId(const QString &value) { m_appId = value; }
6365 QString appId() const override { return m_appId; }
@@ -152,6 +154,7 @@ private:
152154 QList<MirSurface*> m_closingSurfaces;
153155 bool m_manualSurfaceCreation{false};
154156 Mir::ShellChrome m_shellChrome{Mir::NormalChrome};
157+ QUrl m_qmlFilePath;
155158};
156159
157160Q_DECLARE_METATYPE(ApplicationInfo*)
tests/mocks/Unity/Application/ApplicationManager.cpp+9
@@ -480,6 +480,15 @@ void ApplicationManager::buildListOfAvailableApplications()
480480 application->setName("Primary Oriented");
481481 application->setSupportedOrientations(Qt::PrimaryOrientation);
482482 m_availableApplications.append(application);
483+
484+ application = new ApplicationInfo(this);
485+ application->setAppId("kate");
486+ application->setName("Kate");
487+ application->setIconId("libreoffice");
488+ application->setScreenshotId("libreoffice");
489+ application->setQmlFilename("Kate.qml");
490+ application->setIsTouchApp(false);
491+ m_availableApplications.append(application);
483492}
484493
485494
tests/mocks/Unity/Application/MirSurface.cpp+43
@@ -74,6 +74,7 @@ using namespace unity::shell::application;
7474MirSurface::MirSurface(const QString& name,
7575 Mir::Type type,
7676 Mir::State state,
77+ MirSurface *parentSurface,
7778 const QUrl& screenshot,
7879 const QUrl &qmlFilePath)
7980 : unity::shell::application::MirSurfaceInterface(nullptr)
@@ -90,6 +91,8 @@ MirSurface::MirSurface(const QString& name,
9091 , m_height(-1)
9192 , m_slowToResize(false)
9293 , m_shellChrome(Mir::NormalChrome)
94+ , m_parentSurface(parentSurface)
95+ , m_childSurfaceList(new MirSurfaceListModel(this))
9396{
9497 DEBUG_MSG("state=" << stateToStr(state));
9598
@@ -493,6 +496,36 @@ void MirSurface::setInputBounds(const QRect &boundsRect)
493496 }
494497}
495498
499+void MirSurface::openMenu(qreal x, qreal y, qreal width, qreal height)
500+{
501+ auto *menu = SurfaceManager::instance()->createSurface("menu", Mir::MenuType, Mir::HiddenState,
502+ this /* parentSurface */,
503+ QUrl() /* screenshot */,
504+ QUrl("qrc:///Unity/Application/KateMenu.qml"));
505+
506+ menu->setRequestedPosition(QPoint(x,y));
507+ menu->resize(width, height);
508+ menu->requestState(Mir::RestoredState);
509+
510+ SurfaceManager::instance()->notifySurfaceCreated(menu);
511+}
512+
513+void MirSurface::openDialog(qreal x, qreal y, qreal width, qreal height)
514+{
515+ auto *dialog = SurfaceManager::instance()->createSurface("dialog", Mir::DialogType, Mir::HiddenState,
516+ this /* parentSurface */,
517+ QUrl() /* screenshot */,
518+ QUrl("qrc:///Unity/Application/KateDialog.qml"));
519+
520+ dialog->setRequestedPosition(QPoint(x,y));
521+ dialog->resize(width, height);
522+ dialog->requestState(Mir::RestoredState);
523+
524+ SurfaceManager::instance()->notifySurfaceCreated(dialog);
525+
526+ dialog->requestFocus();
527+}
528+
496529void MirSurface::setRequestedPosition(const QPoint &value)
497530{
498531 if (value != m_requestedPosition) {
@@ -505,3 +538,13 @@ void MirSurface::setRequestedPosition(const QPoint &value)
505538 Q_EMIT positionChanged(m_position);
506539 }
507540}
541+
542+MirSurfaceInterface* MirSurface::parentSurface() const
543+{
544+ return m_parentSurface;
545+}
546+
547+MirSurfaceListInterface* MirSurface::childSurfaceList() const
548+{
549+ return m_childSurfaceList;
550+}
tests/mocks/Unity/Application/MirSurface.h+11
@@ -45,6 +45,7 @@ public:
4545 MirSurface(const QString& name,
4646 Mir::Type type,
4747 Mir::State state,
48+ MirSurface *parentSurface,
4849 const QUrl& screenshot,
4950 const QUrl &qmlFilePath = QUrl());
5051 virtual ~MirSurface();
@@ -94,6 +95,9 @@ public:
9495 QPoint requestedPosition() const override { return m_requestedPosition; }
9596 void setRequestedPosition(const QPoint &) override;
9697
98+ unity::shell::application::MirSurfaceInterface* parentSurface() const override;
99+ unity::shell::application::MirSurfaceListInterface* childSurfaceList() const override;
100+
97101 Q_INVOKABLE void close() override;
98102 Q_INVOKABLE void activate() override;
99103
@@ -121,6 +125,9 @@ public:
121125
122126 Q_INVOKABLE virtual void setInputBounds(const QRect &boundsRect);
123127
128+ Q_INVOKABLE void openMenu(qreal x, qreal y, qreal width, qreal height);
129+ Q_INVOKABLE void openDialog(qreal x, qreal y, qreal width, qreal height);
130+
124131 /////
125132 // internal mock stuff
126133
@@ -216,6 +223,10 @@ private:
216223
217224 QPoint m_position;
218225 QPoint m_requestedPosition;
226+
227+ unity::shell::application::MirSurfaceInterface* m_parentSurface;
228+
229+ MirSurfaceListModel *m_childSurfaceList;
219230};
220231
221232#endif // MOCK_MIR_SURFACE_H
tests/mocks/Unity/Application/MirSurfaceItem.cpp+19−4
@@ -159,7 +159,9 @@ void MirSurfaceItem::setOrientationAngle(Mir::OrientationAngle angle)
159159
160160 if (m_qmlItem) {
161161 QQmlProperty orientationProp(m_qmlItem, "orientationAngle");
162− orientationProp.write(QVariant::fromValue(orientationAngle()));
162+ if (orientationProp.isValid()) {
163+ orientationProp.write(QVariant::fromValue(orientationAngle()));
164+ }
163165 }
164166}
165167
@@ -167,7 +169,9 @@ void MirSurfaceItem::updateScreenshot(QUrl screenshotUrl)
167169{
168170 if (m_qmlItem) {
169171 QQmlProperty screenshotSource(m_qmlItem, "screenshotSource");
170− screenshotSource.write(QVariant::fromValue(screenshotUrl));
172+ if (screenshotSource.isValid()) {
173+ screenshotSource.write(QVariant::fromValue(screenshotUrl));
174+ }
171175 }
172176}
173177
@@ -193,12 +197,23 @@ void MirSurfaceItem::createQmlContentItem()
193197
194198 {
195199 QQmlProperty screenshotSource(m_qmlItem, "screenshotSource");
196− screenshotSource.write(QVariant::fromValue(m_qmlSurface->screenshotUrl()));
200+ if (screenshotSource.isValid()) {
201+ screenshotSource.write(QVariant::fromValue(m_qmlSurface->screenshotUrl()));
202+ }
197203 }
198204
199205 {
200206 QQmlProperty orientationProp(m_qmlItem, "orientationAngle");
201− orientationProp.write(QVariant::fromValue(orientationAngle()));
207+ if (orientationProp.isValid()) {
208+ orientationProp.write(QVariant::fromValue(orientationAngle()));
209+ }
210+ }
211+
212+ {
213+ QQmlProperty surfaceProperty(m_qmlItem, "surface");
214+ if (surfaceProperty.isValid()) {
215+ surfaceProperty.write(QVariant::fromValue(m_qmlSurface));
216+ }
202217 }
203218}
204219
tests/mocks/Unity/Application/MirSurfaceListModel.h−1
@@ -44,7 +44,6 @@ public:
4444 bool contains(MirSurface *surface) const { return m_surfaceList.contains(surface); }
4545
4646private:
47− void appendSurface(MirSurface *surface);
4847 void raise(MirSurface *surface);
4948 void moveSurface(int from, int to);
5049 void connectSurface(MirSurface *surface);
tests/mocks/Unity/Application/SurfaceManager.cpp+19−13
@@ -61,10 +61,15 @@ SurfaceManager::~SurfaceManager()
6161MirSurface *SurfaceManager::createSurface(const QString& name,
6262 Mir::Type type,
6363 Mir::State state,
64− const QUrl& screenshot)
64+ MirSurface *parentSurface,
65+ const QUrl &screenshot,
66+ const QUrl &qmlFilePath)
6567{
66− MirSurface* surface = new MirSurface(name, type, state, screenshot);
68+ MirSurface* surface = new MirSurface(name, type, state, parentSurface, screenshot, qmlFilePath);
6769 registerSurface(surface);
70+ if (parentSurface) {
71+ static_cast<MirSurfaceListModel*>(parentSurface->childSurfaceList())->addSurface(surface);
72+ }
6873 return surface;
6974}
7075
@@ -72,12 +77,14 @@ void SurfaceManager::registerSurface(MirSurface *surface)
7277{
7378 m_surfaces.prepend(surface);
7479
75− surface->setMinimumWidth(m_newSurfaceMinimumWidth);
76− surface->setMaximumWidth(m_newSurfaceMaximumWidth);
77− surface->setMinimumHeight(m_newSurfaceMinimumHeight);
78− surface->setMaximumHeight(m_newSurfaceMaximumHeight);
79− surface->setWidthIncrement(m_newSurfaceWidthIncrement);
80− surface->setHeightIncrement(m_newSurfaceHeightIncrement);
80+ if (!surface->parentSurface()) {
81+ surface->setMinimumWidth(m_newSurfaceMinimumWidth);
82+ surface->setMaximumWidth(m_newSurfaceMaximumWidth);
83+ surface->setMinimumHeight(m_newSurfaceMinimumHeight);
84+ surface->setMaximumHeight(m_newSurfaceMaximumHeight);
85+ surface->setWidthIncrement(m_newSurfaceWidthIncrement);
86+ surface->setHeightIncrement(m_newSurfaceHeightIncrement);
87+ }
8188
8289 connect(surface, &MirSurface::stateRequested, this, [=](Mir::State state) {
8390 this->onStateRequested(surface, state);
@@ -204,8 +211,6 @@ void SurfaceManager::activate(unityapi::MirSurfaceInterface *apiSurface)
204211
205212void SurfaceManager::onStateRequested(MirSurface *surface, Mir::State state)
206213{
207− Q_ASSERT(!m_underModification);
208−
209214 DEBUG_MSG("("<<surface<<","<<state<<") started");
210215 Q_EMIT modificationsStarted();
211216 m_underModification = true;
@@ -259,9 +264,10 @@ void SurfaceManager::focusFirstAvailableSurface()
259264 if (m_focusedSurface) {
260265 m_focusedSurface->setFocused(false);
261266 }
262− if (chosenSurface) {
263− chosenSurface->setFocused(true);
264− }
267+
268+ chosenSurface->setFocused(true);
269+ doRaise(chosenSurface);
270+
265271 m_focusedSurface = chosenSurface;
266272}
267273
tests/mocks/Unity/Application/SurfaceManager.h+3−1
@@ -49,7 +49,9 @@ public:
4949 Q_INVOKABLE MirSurface* createSurface(const QString& name,
5050 Mir::Type type,
5151 Mir::State state,
52− const QUrl& screenshot);
52+ MirSurface *parentSurface,
53+ const QUrl &screenshot,
54+ const QUrl &qmlFilePath = QUrl());
5355
5456
5557 void notifySurfaceCreated(unity::shell::application::MirSurfaceInterface *);
tests/mocks/Unity/Application/VirtualKeyboard.cpp+5−4
@@ -24,10 +24,11 @@
2424
2525VirtualKeyboard::VirtualKeyboard()
2626 : MirSurface("input-method",
27− Mir::InputMethodType,
28− Mir::MinimizedState,
29− QUrl("qrc:///Unity/Application/vkb_portrait.png"),
30− QUrl("qrc:///Unity/Application/VirtualKeyboard.qml"))
27+ Mir::InputMethodType,
28+ Mir::MinimizedState,
29+ nullptr, /* parentSurface */
30+ QUrl("qrc:///Unity/Application/vkb_portrait.png"),
31+ QUrl("qrc:///Unity/Application/VirtualKeyboard.qml"))
3132{
3233}
3334
tests/mocks/Unity/Application/resources/Kate.qmlnew file+49
@@ -0,0 +1,49 @@
1+/*
2+ * Copyright (C) 2016 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.4
18+import Ubuntu.Components 1.3
19+
20+Rectangle {
21+ id: root
22+ color: "white"
23+ implicitWidth: width
24+ implicitHeight: height
25+
26+ property var surface
27+
28+ Column {
29+ Button {
30+ text: "Open Menu"
31+ property real nextY: y
32+ property real menuHeight: units.gu(5)
33+ onClicked: {
34+ surface.openMenu(x+width, nextY, units.gu(10), menuHeight);
35+ nextY += menuHeight + units.gu(.5)
36+ }
37+ }
38+
39+ Button {
40+ text: "Open Dialog"
41+ property real dialogWidth: units.gu(30)
42+ property real dialogHeight: units.gu(20)
43+ onClicked: {
44+ surface.openDialog(root.x+(root.width/2)-(dialogWidth/2), root.y+(root.height/2)-(dialogHeight/2),
45+ dialogWidth, dialogHeight);
46+ }
47+ }
48+ }
49+}
tests/mocks/Unity/Application/resources/KateDialog.qmlnew file+48
@@ -0,0 +1,48 @@
1+/*
2+ * Copyright (C) 2016 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.4
18+import Ubuntu.Components 1.3
19+
20+Rectangle {
21+ id: root
22+ color: "grey"
23+ implicitWidth: width
24+ implicitHeight: height
25+
26+ property var surface
27+
28+ Text {
29+ anchors.left: parent.left
30+ anchors.right: parent.right
31+ horizontalAlignment: Text.AlignHCenter
32+ verticalAlignment: Text.AlignVCenter
33+ text: "This is a child dialog."
34+ }
35+
36+ Row {
37+ anchors.bottom: parent.bottom
38+ anchors.right: parent.right
39+ Button {
40+ text: "OK"
41+ onClicked: root.surface.close()
42+ }
43+ Button {
44+ text: "Cancel"
45+ onClicked: root.surface.close()
46+ }
47+ }
48+}
tests/mocks/Unity/Application/resources/KateMenu.qmlnew file+41
@@ -0,0 +1,41 @@
1+/*
2+ * Copyright (C) 2016 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.4
18+import Ubuntu.Components 1.3
19+
20+Rectangle {
21+ id: root
22+ color: "grey"
23+ implicitWidth: width
24+ implicitHeight: height
25+
26+ property var surface
27+
28+ Text {
29+ anchors.centerIn: parent
30+ text: "menu"
31+ }
32+ MouseArea {
33+ anchors.fill: parent
34+ property real nextY: 0
35+ onClicked: {
36+ // ensure some overlap with is parent in order to visually check for nested opacity artifacts
37+ root.surface.openMenu(x+(width*0.6), nextY, units.gu(10), root.height);
38+ nextY += root.height
39+ }
40+ }
41+}
tests/mocks/Unity/Application/resources/surfaces.qrc+3
@@ -1,5 +1,8 @@
11<RCC>
22 <qresource prefix="/Unity/Application">
3+ <file>Kate.qml</file>
4+ <file>KateDialog.qml</file>
5+ <file>KateMenu.qml</file>
36 <file>VirtualKeyboard.qml</file>
47 <file>MirSurfaceItem.qml</file>
58 <file>vkb_portrait.png</file>
tests/mocks/Unity/CMakeLists.txt+6
@@ -73,3 +73,9 @@ add_unity8_mock(Unity 0.2 Unity TARGETS FakeUnityQml)
7373
7474# and one copy in a separate directory for autopilot
7575add_unity8_mock(Unity 0.2 Unity PREFIX scopefakes TARGETS FakeUnityQml)
76+
77+# Since on build both copy the same file to the same location (not great)
78+# make sure one depends on the other, otherwise when running with make -jX
79+# we can get errors of cp complaining the file has been created while it
80+# was trying to create it
81+add_dependencies(scopefakes-MockUnity-qmlfiles mocks-MockUnity-qmlfiles)
tests/mocks/Unity/Launcher/CMakeLists.txt−2
@@ -1,5 +1,3 @@
1−pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=11)
2−
31include_directories(
42 ${CMAKE_CURRENT_SOURCE_DIR}
53 ${CMAKE_SOURCE_DIR}/plugins/Unity/Launcher/
tests/mocks/Utils/CMakeLists.txt+1
@@ -26,6 +26,7 @@ set(QMLPLUGIN_SRC
2626 ${CMAKE_SOURCE_DIR}/plugins/Utils/globalfunctions.cpp
2727 ${CMAKE_SOURCE_DIR}/plugins/Utils/appdrawerproxymodel.cpp
2828 ${CMAKE_SOURCE_DIR}/plugins/Utils/tabfocusfence.cpp
29+ ${CMAKE_SOURCE_DIR}/plugins/Utils/expressionfiltermodel.cpp
2930 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationManagerInterface.h
3031 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationInfoInterface.h
3132 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceInterface.h
tests/mocks/Utils/plugin.cpp+2
@@ -42,6 +42,7 @@
4242#include <globalfunctions.h>
4343#include <appdrawerproxymodel.h>
4444#include <tabfocusfence.h>
45+#include <expressionfiltermodel.h>
4546
4647static QObject *createWindowStateStorage(QQmlEngine *engine, QJSEngine *scriptEngine)
4748{
@@ -86,4 +87,5 @@ void FakeUtilsPlugin::registerTypes(const char *uri)
8687 qmlRegisterType<URLDispatcher>(uri, 0, 1, "URLDispatcher");
8788 qmlRegisterType<AppDrawerProxyModel>(uri, 0, 1, "AppDrawerProxyModel");
8889 qmlRegisterType<TabFocusFenceItem>(uri, 0, 1, "TabFocusFence");
90+ qmlRegisterType<ExpressionFilterModel>(uri, 0, 1, "ExpressionFilterModel");
8991}
tests/plugins/Greeter/Unity/Launcher/CMakeLists.txt−2
@@ -1,5 +1,3 @@
1−pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=11)
2−
31include_directories(
42 ${CMAKE_CURRENT_SOURCE_DIR}
53 ${CMAKE_CURRENT_BINARY_DIR}
tests/plugins/Unity/Launcher/CMakeLists.txt−1
@@ -1,5 +1,4 @@
11pkg_check_modules(GSETTINGS_QT REQUIRED gsettings-qt)
2−pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=11)
32
43include_directories(
54 ${CMAKE_CURRENT_SOURCE_DIR}
tests/qmltests/ApplicationMenus/tst_MenuBar.qml+85−9
@@ -28,8 +28,8 @@ import ".."
2828
2929Item {
3030 id: root
31− width: units.gu(100)
32− height: units.gu(50)
31+ width: units.gu(120)
32+ height: units.gu(70)
3333
3434 Component.onCompleted: {
3535 QuickUtils.keyboardAttached = true;
@@ -51,12 +51,12 @@ Item {
5151 Rectangle {
5252 anchors {
5353 left: parent.left
54− right: parent.right
5554 top: parent.top
5655 margins: units.gu(1)
5756 }
5857 height: units.gu(3)
59− color: "grey"
58+ width: parent.width * 2/3
59+ color: theme.palette.normal.background
6060
6161 MenuBar {
6262 id: menuBar
@@ -65,7 +65,7 @@ Item {
6565
6666 unityMenuModel: UnityMenuModel {
6767 id: menuBackend
68− modelData: appMenuData.generateTestData(17,5,2,3)
68+ modelData: appMenuData.generateTestData(10,5,2,3)
6969 }
7070 }
7171 }
@@ -83,12 +83,12 @@ Item {
8383
8484 function init() {
8585 menuBar.dismiss();
86− menuBackend.modelData = appMenuData.generateTestData(5,5,2,3)
86+ menuBackend.modelData = appMenuData.generateTestData(5,5,2,3, "menu")
8787 activatedSpy.clear();
8888 }
8989
9090 function test_mouseNavigation() {
91− menuBackend.modelData = appMenuData.generateTestData(3,3,0,0);
91+ menuBackend.modelData = appMenuData.generateTestData(3,3,0,0, "menu");
9292 wait(50) // wait for row to build
9393 var priv = findInvisibleChild(menuBar, "d");
9494
@@ -114,7 +114,7 @@ Item {
114114 }
115115
116116 function test_keyboardNavigation_RightKeySelectsNextMenuItem(data) {
117− menuBackend.modelData = appMenuData.generateTestData(3,3,0,0);
117+ menuBackend.modelData = appMenuData.generateTestData(3,3,0,0, "menu");
118118 var priv = findInvisibleChild(menuBar, "d");
119119
120120 var menuItem0 = findChild(menuBar, "menuBar-item0"); verify(menuItem0);
@@ -139,7 +139,7 @@ Item {
139139 }
140140
141141 function test_keyboardNavigation_LeftKeySelectsPreviousMenuItem(data) {
142− menuBackend.modelData = appMenuData.generateTestData(3,3,0,0);
142+ menuBackend.modelData = appMenuData.generateTestData(3,3,0,0, "menu");
143143 var priv = findInvisibleChild(menuBar, "d");
144144
145145 var menuItem0 = findChild(menuBar, "menuBar-item0"); verify(menuItem0);
@@ -180,6 +180,41 @@ Item {
180180 tryCompare(priv, "currentItem", menuItem);
181181 }
182182
183+ function test_menuActivateClosesMenu() {
184+ menuBackend.modelData = appMenuData.generateTestData(3,3,0,0,"menu");
185+ var priv = findInvisibleChild(menuBar, "d");
186+
187+ var menuItem = findChild(menuBar, "menuBar-item0");
188+ menuItem.show();
189+ compare(priv.currentItem, menuItem, "CurrentItem should be set to item 0");
190+ compare(priv.currentItem.popupVisible, true, "Popup should be visible");
191+
192+ var actionItem = findChild(menuBar, "menuBar-item0-menu-item0-actionItem");
193+ mouseClick(actionItem);
194+ compare(priv.currentItem, null, "CurrentItem should be null");
195+ }
196+
197+ function test_subMenuActivateClosesMenu() {
198+ menuBackend.modelData = appMenuData.generateTestData(3,4,1,0,"menu");
199+ var priv = findInvisibleChild(menuBar, "d");
200+
201+ var menuItem = findChild(menuBar, "menuBar-item0");
202+ menuItem.show();
203+ compare(priv.currentItem, menuItem, "CurrentItem should be set to item 0");
204+ compare(priv.currentItem.popupVisible, true, "Popup should be visible");
205+
206+ var actionItem = findChild(menuBar, "menuBar-item0-menu-item0-actionItem");
207+ mouseClick(actionItem);
208+
209+ actionItem = findChild(menuBar, "menuBar-item0-menu-item0-menu-item0-actionItem");
210+ mouseClick(actionItem);
211+
212+ actionItem = findChild(menuBar, "menuBar-item0-menu-item0-menu-item0-menu-item0-actionItem");
213+ mouseClick(actionItem);
214+
215+ compare(priv.currentItem, null, "CurrentItem should be null");
216+ }
217+
183218 function test_openAppMenuShortcut() {
184219 var priv = findInvisibleChild(menuBar, "d");
185220
@@ -192,5 +227,46 @@ Item {
192227 keyClick(Qt.Key_F10, Qt.AltModifier);
193228 compare(priv.currentItem, menuItem1, "First enabled item should be opened");
194229 }
230+
231+ function test_clickOpenMenuClosesMenu() {
232+ menuBackend.modelData = appMenuData.generateTestData(3,3,0,0,"menu");
233+ var priv = findInvisibleChild(menuBar, "d");
234+
235+ var menuItem = findChild(menuBar, "menuBar-item0");
236+ waitForRendering(menuItem);
237+ mouseClick(menuItem);
238+ compare(priv.currentItem, menuItem, "CurrentItem should be set to item 0");
239+ compare(priv.currentItem.popupVisible, true, "Popup should be visible");
240+
241+ waitForRendering(menuItem);
242+ mouseClick(menuItem);
243+ compare(priv.currentItem, null, "CurrentItem should be null");
244+ }
245+
246+ function test_overfow() {
247+ menuBackend.modelData = appMenuData.generateTestData(5,2,0,0,"menu");
248+
249+ var overflow = findChild(menuBar, "overflow");
250+ compare(overflow.visible, false, "Overflow should not be visible");
251+
252+ var menu = { "rowData": { "label": "Short" } };
253+ tryCompareFunction(function() {
254+ menuBackend.insertRow(0, menu);
255+ wait(1);
256+ if (overflow.visible) {
257+ return true;
258+ }
259+ return false;
260+ }, true);
261+
262+ tryCompareFunction(function() {
263+ menuBackend.removeRow(0);
264+ wait(1);
265+ if (!overflow.visible) {
266+ return true;
267+ }
268+ return false;
269+ }, true);
270+ }
195271 }
196272}
tests/qmltests/ApplicationMenus/tst_MenuPopup.qml+14
@@ -223,6 +223,20 @@ Item {
223223 tryCompareFunction(function() { return menuItem.popup !== null && menuItem.popup.visible }, false);
224224 }
225225
226+ function test_mouseHoverOpensSubMenu() {
227+ menu.unityMenuModel.modelData = appMenuData.generateTestData(3,3,1,0,"menu",false);
228+
229+ var menuItem = findChild(menu, "menu-item0");
230+
231+ var priv = findInvisibleChild(menu, "d");
232+ priv.currentItem = menuItem;
233+
234+ mouseMove(menuItem, menuItem.width/2, menuItem.height/2);
235+ verify(!menuItem.popup);
236+
237+ tryCompareFunction(function() { return menuItem.popup != null; }, true);
238+ }
239+
226240 function test_differentSizes() {
227241 var differentSizesMenu = [{
228242 "rowData": { "label": "Short" }}, {
tests/qmltests/Launcher/tst_Launcher.qml+13
@@ -1480,6 +1480,19 @@ Rectangle {
14801480 launcher.available = true;
14811481 }
14821482
1483+ function test_hoverOnEdgeBarrerPreventsHiding() {
1484+ revealByEdgePush();
1485+
1486+ // Make sure the mouse is on the very left edge (on top of the barrier)
1487+ mouseMove(root, 1, root.height / 2);
1488+
1489+ // trigger the hide timer
1490+ compare(fakeDismissTimer.running, true);
1491+ fakeDismissTimer.triggered();
1492+
1493+ compare(launcher.state, "visibleTemporary");
1494+ }
1495+
14831496 function test_hintOnSizeChange() {
14841497 var oldSize = launcher.panelWidth;
14851498 launcher.maxPanelX = -launcher.panelWidth;
tests/qmltests/Stage/ApplicationCheckBox.qml+1−1
@@ -162,7 +162,7 @@ Column {
162162 }
163163 }
164164
165− // Rows of application surfaces
165+ // Rows of top-level application surfaces
166166 Repeater {
167167 model: d.application ? d.application.surfaceList : null
168168 RowLayout {
tests/qmltests/Stage/tst_DesktopStage.qml+193−10
@@ -29,6 +29,7 @@ import ".." // For EdgeBarrierControls
2929import "../../../qml/Stage"
3030import "../../../qml/Components"
3131import "../../../qml/Components/PanelState"
32+import "../../../qml/ApplicationMenus"
3233
3334Item {
3435 id: root
@@ -44,6 +45,8 @@ Item {
4445 }
4546
4647 Component.onCompleted: {
48+ ApplicationMenusLimits.screenWidth = Qt.binding( function() { return stageLoader.width; } );
49+ ApplicationMenusLimits.screenHeight = Qt.binding( function() { return stageLoader.height; } );
4750 QuickUtils.keyboardAttached = true;
4851 theme.name = "Ubuntu.Components.Themes.SuruDark";
4952 resetGeometry();
@@ -89,7 +92,6 @@ Item {
8992 focus: true
9093
9194 Component.onCompleted: {
92− edgeBarrierControls.target = testCase.findChild(this, "edgeBarrierController");
9395 ApplicationManager.startApplication("unity8-dash");
9496 }
9597 Component.onDestruction: {
@@ -132,11 +134,22 @@ Item {
132134 }
133135 }
134136
135− EdgeBarrierControls {
136− id: edgeBarrierControls
137− text: "Drag here to pull out spread"
138− backgroundColor: "blue"
139− onDragged: { stageLoader.item.pushRightEdge(amount); }
137+ Label {
138+ text: "Right edge push progress"
139+ }
140+
141+ Slider {
142+ id: rightEdgePushSlider
143+ width: parent.width
144+ live: true
145+ minimumValue: 0.0
146+ maximumValue: 1.0
147+ onPressedChanged: {
148+ if (!pressed) {
149+ value = 0;
150+ }
151+ }
152+ Binding { target: stageLoader.item; property: "rightEdgePushProgress"; value: rightEdgePushSlider.value }
140153 }
141154
142155 Divider {}
@@ -695,10 +708,18 @@ Item {
695708 var sizeBefore = Qt.size(dialerDelegate.width, dialerDelegate.height);
696709 var deco = findChild(dialerDelegate, "appWindowDecoration");
697710 verify(deco);
698− tryCompare(deco, "maximizeButtonShown", false);
699− mouseDoubleClick(deco);
700− var sizeAfter = Qt.size(dialerDelegate.width, dialerDelegate.height);
701− tryCompareFunction(function(){ return sizeBefore; }, sizeAfter);
711+ // deco.width - units.gu(1) to make sure we're outside the "menu" area of the decoration
712+ mouseMove(deco, deco.width - units.gu(1), deco.height/2);
713+ var menuBarLoader = findChild(deco, "menuBarLoader");
714+ tryCompare(menuBarLoader.item, "visible", true);
715+ mouseDoubleClick(deco, deco.width - units.gu(1), deco.height/2)
716+ expectFail("", "Double click should not maximize in a size restricted window");
717+ tryCompareFunction(function() {
718+ var sizeAfter = Qt.size(dialerDelegate.width, dialerDelegate.height);
719+ return sizeAfter.width > sizeBefore.width && sizeAfter.height > sizeBefore.height;
720+ },
721+ true
722+ );
702723
703724 // remove restrictions, the maximize button should again be visible
704725 dialerDelegate.surface.setMaximumWidth(0);
@@ -706,6 +727,29 @@ Item {
706727 tryCompare(dialerMaximizeButton, "visible", true);
707728 }
708729
730+ function test_doubleClickMaximizes() {
731+ var dialerDelegate = startApplication("dialer-app");
732+
733+ var dialerMaximizeButton = findChild(dialerDelegate, "maximizeWindowButton");
734+ tryCompare(dialerMaximizeButton, "visible", true);
735+
736+ // try double clicking the decoration, should maximize it
737+ var sizeBefore = Qt.size(dialerDelegate.width, dialerDelegate.height);
738+ var deco = findChild(dialerDelegate, "appWindowDecoration");
739+ verify(deco);
740+ // deco.width - units.gu(1) to make sure we're outside the "menu" area of the decoration
741+ mouseMove(deco, deco.width - units.gu(1), deco.height/2);
742+ var menuBarLoader = findChild(deco, "menuBarLoader");
743+ tryCompare(menuBarLoader.item, "visible", true);
744+ mouseDoubleClick(deco, deco.width - units.gu(1), deco.height/2);
745+ tryCompareFunction(function() {
746+ var sizeAfter = Qt.size(dialerDelegate.width, dialerDelegate.height);
747+ return sizeAfter.width > sizeBefore.width && sizeAfter.height > sizeBefore.height;
748+ },
749+ true
750+ );
751+ }
752+
709753 function test_canMoveWindowWithLeftMouseButtonOnly_data() {
710754 return [
711755 {tag: "left mouse button", button: Qt.LeftButton },
@@ -830,5 +874,144 @@ Item {
830874 mouseRelease(decoration);
831875 tryCompare(Mir, "cursorName", "");
832876 }
877+
878+ function test_menuPositioning_data() {
879+ return [
880+ {tag: "good",
881+ windowPosition: Qt.point(units.gu(10), units.gu(10))
882+ },
883+ {tag: "collides right",
884+ windowPosition: Qt.point(units.gu(100), units.gu(10)),
885+ minimumXDifference: units.gu(8)
886+ },
887+ {tag: "collides bottom",
888+ windowPosition: Qt.point(units.gu(10), units.gu(80)),
889+ minimumYDifference: units.gu(7)
890+ },
891+ ]
892+ }
893+
894+ function test_menuPositioning(data) {
895+ var appDelegate = startApplication("dialer-app");
896+ appDelegate.windowedX = data.windowPosition.x;
897+ appDelegate.windowedY = data.windowPosition.y;
898+
899+ var menuItem = findChild(appDelegate, "menuBar-item3");
900+ menuItem.show();
901+
902+ var menu = findChild(appDelegate, "menuBar-item3-menu");
903+ tryCompare(menu, "visible", true);
904+
905+ var normalPositioningX = menuItem.x - units.gu(1);
906+ var normalPositioningY = menuItem.height;
907+
908+ // We do this fuzzy checking because otherwise we would be duplicating the code
909+ // that calculates the coordinates and any bug it may have, what we want is really
910+ // to check that on collision with the border the menu is shifted substantially
911+ if (data.minimumXDifference) {
912+ verify(menu.x < normalPositioningX - data.minimumXDifference);
913+ } else {
914+ compare(menu.x, normalPositioningX);
915+ }
916+
917+ if (data.minimumYDifference) {
918+ verify(menu.y < normalPositioningY - data.minimumYDifference);
919+ } else {
920+ compare(menu.y, normalPositioningY);
921+ }
922+ }
923+
924+ function test_submenuPositioning_data() {
925+ return [
926+ {tag: "good",
927+ windowPosition: Qt.point(units.gu(10), units.gu(10))
928+ },
929+ {tag: "collides right",
930+ windowPosition: Qt.point(units.gu(100), units.gu(10)),
931+ minimumXDifference: units.gu(35)
932+ },
933+ {tag: "collides bottom",
934+ windowPosition: Qt.point(units.gu(10), units.gu(80)),
935+ minimumYDifference: units.gu(8)
936+ },
937+ ]
938+ }
939+
940+ function test_submenuPositioning(data) {
941+ var appDelegate = startApplication("dialer-app");
942+ appDelegate.windowedX = data.windowPosition.x;
943+ appDelegate.windowedY = data.windowPosition.y;
944+
945+ var menuItem = findChild(appDelegate, "menuBar-item3");
946+ menuItem.show();
947+
948+ var menu = findChild(appDelegate, "menuBar-item3-menu");
949+ menuItem = findChild(menu, "menuBar-item3-menu-item3-actionItem");
950+ tryCompare(menuItem, "visible", true);
951+ mouseMove(menuItem);
952+ mouseClick(menuItem);
953+
954+ menu = findChild(appDelegate, "menuBar-item3-menu-item3-menu");
955+
956+ var normalPositioningX = menuItem.width;
957+ var normalPositioningY = menuItem.parent.y;
958+
959+ // We do this fuzzy checking because otherwise we would be duplicating the code
960+ // that calculates the coordinates and any bug it may have, what we want is really
961+ // to check that on collision with the border the menu is shifted substantially
962+ if (data.minimumXDifference) {
963+ verify(menu.x < normalPositioningX - data.minimumXDifference);
964+ } else {
965+ compare(menu.x, normalPositioningX);
966+ }
967+
968+ if (data.minimumYDifference) {
969+ verify(menu.y < normalPositioningY - data.minimumYDifference);
970+ } else {
971+ compare(menu.y, normalPositioningY);
972+ }
973+ }
974+
975+ function test_menuDoubleClickNoMaximizeWindowBehind() {
976+ var appDelegate1 = startApplication("dialer-app");
977+ var appDelegate2 = startApplication("gmail-webapp");
978+
979+ // Open menu
980+ var menuItem = findChild(appDelegate2, "menuBar-item3");
981+ menuItem.show();
982+ var menu = findChild(appDelegate2, "menuBar-item3-menu");
983+ menuItem = findChild(menu, "menuBar-item3-menu-item3-actionItem");
984+ tryCompare(menuItem, "visible", true);
985+
986+ // Place the other application window decoration under the menu
987+ var pos = menuItem.mapToItem(null, menuItem.width / 2, menuItem.height / 2);
988+ appDelegate1.windowedX = pos.x - appDelegate1.width / 2;
989+ appDelegate1.windowedY = pos.y - units.gu(1);
990+
991+ var previousWindowState = appDelegate1.windowState;
992+
993+ mouseMove(menuItem);
994+ mouseDoubleClickSequence(menuItem);
995+
996+ expectFail("", "Double clicking a menu should not change the window below");
997+ tryCompareFunction(function() { return appDelegate1.windowState != previousWindowState; }, true);
998+ }
999+
1000+ function test_openMenuEatsHoverOutsideIt() {
1001+ var appDelegate = startApplication("gmail-webapp");
1002+
1003+ var wd = findChild(appDelegate, "appWindowDecoration");
1004+ var closeButton = findChild(wd, "closeWindowButton");
1005+
1006+ // Open menu
1007+ var menuItem = findChild(appDelegate, "menuBar-item3");
1008+ menuItem.show();
1009+ var menu = findChild(appDelegate, "menuBar-item3-menu");
1010+ tryCompare(menu, "visible", true);
1011+
1012+ mouseMove(closeButton, closeButton.width/2, closeButton.height/2);
1013+ expectFail("", "Hovering the window controls should be ignored when the menu is open");
1014+ tryCompare(closeButton, "containsMouse", true);
1015+ }
8331016 }
8341017}
tests/qmltests/Stage/tst_PhoneStage.qml+4−5
@@ -418,11 +418,10 @@ Item {
418418
419419 function test_mouseEdgePush() {
420420 addApps(1);
421− mouseMove(stage, stage.width - 1, units.gu(10));
422− for (var i = 0; i < units.gu(10); i++) {
423− stage.pushRightEdge(1);
424− }
425− mouseMove(stage, stage.width - units.gu(5), units.gu(10));
421+ // When progress goes to 1 it should switch to spread, but stay there even if progress goes back
422+ stage.rightEdgePushProgress = 1;
423+ compare(stage.state, "spread");
424+ stage.rightEdgePushProgress = 0;
426425 compare(stage.state, "spread");
427426 }
428427
tests/qmltests/Stage/tst_WindowResizeArea.qml+10
@@ -90,6 +90,7 @@ Item {
9090 id: windowResizeArea
9191 anchors.fill: parent
9292 target: fakeWindow
93+ boundsItem: bounds
9394 borderThickness: units.gu(2)
9495 minWidth: units.gu(15)
9596 minHeight: units.gu(10)
@@ -121,7 +122,16 @@ Item {
121122 active: windowLoaderCheckbox.checked
122123 }
123124
125+ Item {
126+ id: bounds
127+ anchors.left: parent.left
128+ anchors.top: parent.top
129+ anchors.right: controls.left
130+ anchors.bottom: parent.bottom
131+ }
132+
124133 Rectangle {
134+ id: controls
125135 anchors.right: parent.right
126136 anchors.top: parent.top
127137 anchors.bottom: parent.bottom
tests/qmltests/Tutorial/tst_Tutorial.qml+2−2
@@ -719,9 +719,9 @@ Rectangle {
719719 ApplicationManager.startApplication("facebook-webapp");
720720 tryCompare(tutorialRightLoader, "shown", true);
721721
722− var stage = findChild(shell, "stage");
722+ var cursor = findChild(shell, "cursor");
723723 mouseMove(shell, shell.width, shell.height / 2);
724− stage.pushRightEdge(units.gu(8));
724+ cursor.pushedRightBoundary(units.gu(8), 0);
725725 tryCompare(tutorialRightLoader, "shown", false);
726726
727727 tryCompare(AccountsService, "demoEdges", false);
tests/qmltests/tst_OrientedShell.qml+2−1
@@ -1433,8 +1433,9 @@ Rectangle {
14331433 function swipeAwayGreeter() {
14341434 var greeter = findChild(shell, "greeter");
14351435 tryCompare(greeter, "fullyShown", true);
1436+ waitForRendering(greeter)
14361437
1437− var touchX = shell.width - (shell.edgeSize / 2);
1438+ var touchX = shell.width * .75;
14381439 var touchY = shell.height / 2;
14391440 touchFlick(shell, touchX, touchY, shell.width * 0.1, touchY);
14401441
tests/qmltests/tst_Shell.qml+132−1
@@ -335,6 +335,8 @@ Rectangle {
335335 Row {
336336 CheckBox {
337337 id: fullscreeAppCheck
338+ activeFocusOnPress: false
339+ activeFocusOnTab: false
338340
339341 onTriggered: {
340342 if (!topLevelSurfaceList.focusedWindow) return;
@@ -2585,6 +2587,55 @@ Rectangle {
25852587 tryCompareFunction(function() { return ApplicationManager.focusedApplicationId; }, "calendar-app");
25862588 }
25872589
2590+ function test_rightEdgePushWithOpenIndicators() {
2591+ loadShell("desktop");
2592+ shell.usageScenario = "desktop";
2593+ waitForRendering(shell);
2594+ swipeAwayGreeter();
2595+
2596+ var stage = findChild(shell, "stage");
2597+ var cursor = findChild(shell, "cursor");
2598+ var indicators = findChild(shell, "indicators");
2599+
2600+ // Open indicators
2601+ var touchX = shell.width - units.gu(5);
2602+ touchFlick(shell,
2603+ touchX /* fromX */, indicators.minimizedPanelHeight * 0.5 /* fromY */,
2604+ touchX /* toX */, shell.height * 0.9 /* toY */,
2605+ true /* beginTouch */, true /* endTouch */);
2606+ tryCompare(indicators, "fullyOpened", true);
2607+
2608+ // push the right edge
2609+ mouseMove(shell, shell.width - 1, units.gu(10));
2610+ for (var i = 0; i < units.gu(10); i++) {
2611+ cursor.pushedRightBoundary(1, 0);
2612+ }
2613+ tryCompare(stage, "rightEdgePushProgress", 1);
2614+ tryCompare(stage, "state", "spread");
2615+ tryCompare(indicators, "fullyOpened", false);
2616+
2617+ mouseMove(shell, shell.width - units.gu(5), units.gu(10));
2618+
2619+ tryCompare(stage, "rightEdgePushProgress", 0);
2620+ }
2621+
2622+ function test_rightEdgePushOnGreeter() {
2623+ loadShell("desktop");
2624+ shell.usageScenario = "desktop";
2625+ waitForRendering(shell);
2626+
2627+ var stage = findChild(shell, "stage");
2628+ var cursor = findChild(shell, "cursor");
2629+
2630+ // push the right edge, but verify it doesn't emit any progress
2631+ mouseMove(shell, shell.width - 1, units.gu(10));
2632+ for (var i = 0; i < units.gu(10); i++) {
2633+ cursor.pushedRightBoundary(1, 0);
2634+ compare(stage.rightEdgePushProgress, 0);
2635+ }
2636+ compare(stage.rightEdgePushProgress, 0);
2637+ }
2638+
25882639 function test_oskDisplacesWindow_data() {
25892640 return [
25902641 {tag: "no need to displace", windowHeight: units.gu(10), windowY: units.gu(5), targetDisplacement: units.gu(5), oskEnabled: true},
@@ -2707,9 +2758,10 @@ Rectangle {
27072758 tryCompare(stage, "state", "staged");
27082759
27092760 // Try by edge push
2761+ var cursor = findChild(shell, "cursor");
27102762 mouseMove(stage, stage.width - 1, units.gu(10));
27112763 for (var i = 0; i < units.gu(10); i++) {
2712− stage.pushRightEdge(1);
2764+ cursor.pushedRightBoundary(1, 0);
27132765 }
27142766 mouseMove(stage, stage.width - units.gu(5), units.gu(10));
27152767 tryCompare(stage, "state", data.spreadEnabled ? "spread" : "staged");
@@ -2732,6 +2784,28 @@ Rectangle {
27322784 keyRelease(Qt.Key_W, Qt.MetaModifier)
27332785 }
27342786
2787+ function test_launcherWindowResizeInteraction()
2788+ {
2789+ loadShell("desktop");
2790+ waitForRendering(shell)
2791+ shell.usageScenario = "desktop"
2792+ waitForRendering(shell)
2793+ swipeAwayGreeter();
2794+
2795+ var app1SurfaceId = topLevelSurfaceList.nextId;
2796+ var app1 = ApplicationManager.startApplication("dialer-app")
2797+ waitUntilAppWindowIsFullyLoaded(app1SurfaceId);
2798+
2799+ var launcherDelegate1 = findChild(shell, "launcherDelegate1");
2800+ mouseClick(launcherDelegate1, launcherDelegate1.width / 2, launcherDelegate1.height / 2, Qt.RightButton);
2801+
2802+ var appDelegate = findChild(shell, "appDelegate_" + app1SurfaceId);
2803+ mouseMove(shell, appDelegate.mapToItem(shell, 0, 0).x, launcherDelegate1.mapToItem(shell, 0, 0).y);
2804+
2805+ expectFail("", "Cursor should not change while launcher menu is open");
2806+ tryCompare(Mir, "cursorName", "left_side");
2807+ }
2808+
27352809 function test_panelTitleShowsWhenGreeterNotShown_data() {
27362810 return [
27372811 {tag: "phone" },
@@ -2779,5 +2853,62 @@ Rectangle {
27792853 }
27802854 tryCompareFunction(function() { return drawer.visible; }, false);
27812855 }
2856+
2857+ function test_restoreFromFullscreen() {
2858+ loadShell("desktop");
2859+ shell.usageScenario = "desktop";
2860+ waitForRendering(shell);
2861+ swipeAwayGreeter();
2862+
2863+ var appSurfaceId = topLevelSurfaceList.nextId;
2864+ var app = ApplicationManager.startApplication("dialer-app")
2865+ waitUntilAppWindowIsFullyLoaded(appSurfaceId);
2866+
2867+ // start dialer
2868+ var appContainer = findChild(shell, "appContainer");
2869+ var appDelegate = findChild(appContainer, "appDelegate_" + appSurfaceId);
2870+ verify(appDelegate);
2871+ tryCompare(appDelegate, "state", "normal");
2872+
2873+ // now maximize to right
2874+ appDelegate.requestMaximizeRight();
2875+ tryCompare(appDelegate, "state", "maximizedRight");
2876+
2877+ // switch to fullscreen
2878+ app.surfaceList.get(0).requestState(Mir.FullscreenState);
2879+ tryCompare(appDelegate, "state", "fullscreen");
2880+
2881+ // restore, should go back to maximizedRight, not restored
2882+ appDelegate.requestRestore();
2883+ tryCompare(appDelegate, "state", "maximizedRight");
2884+ }
2885+
2886+ function test_altTabToMinimizedApp() {
2887+ loadShell("desktop");
2888+ shell.usageScenario = "desktop";
2889+ waitForRendering(shell);
2890+ swipeAwayGreeter();
2891+
2892+ var appSurfaceId = topLevelSurfaceList.nextId;
2893+ var app = ApplicationManager.startApplication("dialer-app")
2894+ waitUntilAppWindowIsFullyLoaded(appSurfaceId);
2895+
2896+ // start dialer
2897+ var appContainer = findChild(shell, "appContainer");
2898+ var appDelegate = findChild(appContainer, "appDelegate_" + appSurfaceId);
2899+ verify(appDelegate);
2900+ tryCompare(appDelegate, "state", "normal");
2901+
2902+ // minimize dialer
2903+ appDelegate.requestMinimize();
2904+ tryCompare(appDelegate, "state", "minimized");
2905+
2906+ // try to bring dialer back from minimized by doing alt-tab
2907+ keyClick(Qt.Key_Tab, Qt.AltModifier);
2908+ tryCompare(appDelegate, "visible", true);
2909+ tryCompare(appDelegate, "focus", true);
2910+ tryCompare(topLevelSurfaceList.focusedWindow, "surface", appDelegate.surface);
2911+ tryCompare(topLevelSurfaceList.applicationAt(0), "appId", "dialer-app");
2912+ }
27822913 }
27832914}
tests/utils/modules/Unity/Test/UnityTestCase.qml−9
@@ -617,15 +617,6 @@ TestCase {
617617 }
618618 }
619619
620− // TODO This function can be removed altogether once we use Qt 5.5 which has the same feature
621− function waitForRendering(item, timeout) {
622− if (timeout === undefined)
623− timeout = 5000;
624− if (!item)
625− qtest_fail("No item given to waitForRendering", 1);
626− return qtest_results.waitForRendering(item, timeout);
627− }
628−
629620 /*
630621 Wait until any transition animation has finished for the given StateGroup or Item
631622 */