on xenial help sign in
Merge from trunk
e3a1d2dMichael Terry
tests/autopilot/.project → .projectrenamed+1−1
@@ -1,6 +1,6 @@
1<?xml version="1.0" encoding="UTF-8"?>
1<?xml version="1.0" encoding="UTF-8"?>
2<projectDescription>
2<projectDescription>
3− <name>Unity8 Autopilot</name>
3+ <name>Unity8</name>
4 <comment></comment>
4 <comment></comment>
5 <projects>
5 <projects>
6 </projects>
6 </projects>
tests/autopilot/.pydevproject → .pydevprojectrenamed+3−1
@@ -1,7 +1,9 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<?eclipse-pydev version="1.0"?><pydev_project>
2<?eclipse-pydev version="1.0"?><pydev_project>
3<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
3<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
4−<path>/Unity8 Autopilot</path>
4+<path>/Unity8/tests/autopilot</path>
5+<path>/Unity8/.bazaar</path>
6+<path>/Unity8/tests/whitespace</path>
5</pydev_pathproperty>
7</pydev_pathproperty>
6<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.7</pydev_property>
8<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.7</pydev_property>
7<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
9<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
.settings/Autopilot List.launchnew file+14
@@ -0,0 +1,14 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<launchConfiguration type="org.python.pydev.debug.regularLaunchConfigurationType">
3+<stringAttribute key="bad_container_name" value="/Unity8/.pyd"/>
4+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"/>
5+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"/>
6+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
7+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
8+</listAttribute>
9+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="/usr/bin/autopilot"/>
10+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_OTHER_WORKING_DIRECTORY" value=""/>
11+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="list unity8"/>
12+<stringAttribute key="org.python.pydev.debug.ATTR_INTERPRETER" value="__default"/>
13+<stringAttribute key="org.python.pydev.debug.ATTR_PROJECT" value="Unity8"/>
14+</launchConfiguration>
.settings/Autopilot Run.launchnew file+14
@@ -0,0 +1,14 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<launchConfiguration type="org.python.pydev.debug.regularLaunchConfigurationType">
3+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"/>
4+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"/>
5+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
6+<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
7+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
8+</listAttribute>
9+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="/usr/bin/autopilot"/>
10+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_OTHER_WORKING_DIRECTORY" value=""/>
11+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="run ${string_prompt:the test suite to run:unity8}"/>
12+<stringAttribute key="org.python.pydev.debug.ATTR_INTERPRETER" value="__default"/>
13+<stringAttribute key="org.python.pydev.debug.ATTR_PROJECT" value="Unity8"/>
14+</launchConfiguration>
debian/changelog+70
@@ -1,3 +1,73 @@
1+unity8 (8.00+14.10.20140729-0ubuntu1) utopic; urgency=medium
2+
3+ [ Gerry Boland ]
4+ [ Daniel d'Andrada ]
5+ * Re-architecture unity8 to use the QtMirCompositor library so that
6+ the Qt scenegraph renderer is used as the Mir compositor, and
7+ application surfaces are added to the QML scene as items.
8+
9+ [ Michael Zanetti ]
10+ * Port phone right-edge spread code to use QtCompositor
11+ * Add right-edge spread animation for tablet
12+
13+ [ Ubuntu daily release ]
14+ * New rebuild forced
15+
16+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Tue, 29 Jul 2014 15:07:32 +0000
17+
18+unity8 (7.90+14.10.20140725-0ubuntu1) utopic; urgency=low
19+
20+ [ CI bot ]
21+ * Resync trunk
22+
23+ [ Michał Sawicz ]
24+ * Fix the ap test for applications.
25+
26+ [ Albert Astals ]
27+ * Use deleteLater instead of a direct delete We are seeing a crash in
28+ QQuickWindowPrivate::polishItems because LVWPH is deleting items to
29+ polish from it's updatePolish which means the set in
30+ QQuickWindowPrivate::polishItems may end up with some yet-to-
31+ process-but-now-deleted items. Switching to deleteLater fixes this
32+
33+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Fri, 25 Jul 2014 10:47:34 +0000
34+
35+unity8 (7.90+14.10.20140724.1-0ubuntu1) utopic; urgency=low
36+
37+ [ Michael Zanetti ]
38+ * properly parent launcher items (LP: #1347902)
39+
40+ [ Michał Sawicz ]
41+ * Move the PyDev project files to the root, supporting .py scripts
42+ outside of tests/autopilot. Add Autopilot Run and List launch
43+ configurations to easily support debugging in Eclipse. Use
44+ add_unity8_mock macro in the Telephony plugin.
45+ * Drop FilterGrid and refactor height animations in GenericScopeView.
46+ Also implement forced category expansion. (LP: #1326470)
47+ * Move expansion button from section header to category footer. (LP:
48+ #1261300)
49+ * Fix expect-sigstop enviroment variable name. (LP: #1346819)
50+ * Make headerless categories easier Instead of having no header
51+ category (which is a bit confusing since the LVWPH code was designed
52+ so that when a category has no header it is because it shares the
53+ category with the previous one) what we have for headerless
54+ categories is a header of height 0, this way everything works as it
55+ should and results in cleaner code in the LVWPH and in
56+ GenericScopeView
57+ * Add support for header links.
58+ * Add dash PageHeader styling.
59+
60+ [ Albert Astals ]
61+ * Make headerless categories easier Instead of having no header
62+ category (which is a bit confusing since the LVWPH code was designed
63+ so that when a category has no header it is because it shares the
64+ category with the previous one) what we have for headerless
65+ categories is a header of height 0, this way everything works as it
66+ should and results in cleaner code in the LVWPH and in
67+ GenericScopeView
68+
69+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Thu, 24 Jul 2014 20:41:29 +0000
70+
1unity8 (7.90+14.10.20140723.4-0ubuntu1) utopic; urgency=low
71unity8 (7.90+14.10.20140723.4-0ubuntu1) utopic; urgency=low
2
72
3 [ thomas-voss ]
73 [ thomas-voss ]
debian/control+2−3
@@ -24,7 +24,6 @@ Build-Depends: cmake,
24 libqmenumodel-dev (>= 0.2.8),
24 libqmenumodel-dev (>= 0.2.8),
25 libqt5xmlpatterns5-dev,
25 libqt5xmlpatterns5-dev,
26 libunity-api-dev (>= 7.85),
26 libunity-api-dev (>= 7.85),
27− libunity-mir-dev,
28 libusermetricsoutput1-dev,
27 libusermetricsoutput1-dev,
29 libxcb1-dev,
28 libxcb1-dev,
30 pkg-config,
29 pkg-config,
@@ -80,10 +79,10 @@ Provides: indicator-renderer,
80Depends: gsettings-desktop-schemas,
79Depends: gsettings-desktop-schemas,
81 libcap2-bin,
80 libcap2-bin,
82 libglib2.0-bin,
81 libglib2.0-bin,
83− libunity-mir1 (>= 0.4),
84 qmenumodel-qml (>= 0.2.8),
82 qmenumodel-qml (>= 0.2.8),
85 qml-module-qtquick-xmllistmodel,
83 qml-module-qtquick-xmllistmodel,
86 qtdeclarative5-gsettings1.0,
84 qtdeclarative5-gsettings1.0,
85+ qtdeclarative5-qtmir-plugin (>= 0.4),
87 qtdeclarative5-ubuntu-settings-components (>= 0.3),
86 qtdeclarative5-ubuntu-settings-components (>= 0.3),
88 qtdeclarative5-ubuntu-telephony0.1,
87 qtdeclarative5-ubuntu-telephony0.1,
89 unity-launcher-impl-3,
88 unity-launcher-impl-3,
@@ -112,7 +111,7 @@ Depends: qtdeclarative5-ubuntu-thumbnailer0.1 | ubuntu-thumbnailer-impl,
112 unity-application-impl-2,
111 unity-application-impl-2,
113 unity-notifications-impl-3,
112 unity-notifications-impl-3,
114 unity-plugin-scopes | unity-scopes-impl,
113 unity-plugin-scopes | unity-scopes-impl,
115− unity-scopes-impl-0,
114+ unity-scopes-impl-2,
116 unity8-fake-env | unity-application-impl,
115 unity8-fake-env | unity-application-impl,
117 ${misc:Depends},
116 ${misc:Depends},
118Breaks: unity8 (<< 7.86),
117Breaks: unity8 (<< 7.86),
plugins/Dash/ScopeStyle.qml+6
@@ -70,6 +70,12 @@ QtObject {
70 /// Source of the logo image for the header
70 /// Source of the logo image for the header
71 readonly property url headerLogo: "logo" in d.headerStyle ? d.headerStyle["logo"] : ""
71 readonly property url headerLogo: "logo" in d.headerStyle ? d.headerStyle["logo"] : ""
72
72
73+ /// Background style for the header
74+ readonly property url headerBackground: "background" in d.headerStyle ? d.headerStyle["background"] : ""
75+
76+ /// Foreground color for the header
77+ readonly property color headerForeground: "foreground-color" in d.headerStyle ? d.headerStyle["foreground-color"] : foreground
78+
73 //! @cond
79 //! @cond
74 property var d: QtObject {
80 property var d: QtObject {
75 readonly property real foregroundLuminance: luminance(foreground)
81 readonly property real foregroundLuminance: luminance(foreground)
plugins/Dash/listviewwithpageheader.cpp+1−6
@@ -141,8 +141,6 @@ void ListViewWithPageHeader::ListItem::setCulled(bool culled)
141void ListViewWithPageHeader::ListItem::setSectionItem(QQuickItem *sectionItem)
141void ListViewWithPageHeader::ListItem::setSectionItem(QQuickItem *sectionItem)
142{
142{
143 m_sectionItem = sectionItem;
143 m_sectionItem = sectionItem;
144− QQmlContext *context = QQmlEngine::contextForObject(m_item)->parentContext();
145− context->setContextProperty(QLatin1String("hasSectionHeader"), QVariant::fromValue<bool>(sectionItem != nullptr));
146}
144}
147
145
148ListViewWithPageHeader::ListViewWithPageHeader()
146ListViewWithPageHeader::ListViewWithPageHeader()
@@ -658,7 +656,7 @@ void ListViewWithPageHeader::reallyReleaseItem(ListItem *listItem)
658 if (flags & QQmlDelegateModel::Destroyed) {
656 if (flags & QQmlDelegateModel::Destroyed) {
659 item->setParentItem(nullptr);
657 item->setParentItem(nullptr);
660 }
658 }
661− delete listItem->sectionItem();
659+ listItem->sectionItem()->deleteLater();
662 delete listItem;
660 delete listItem;
663}
661}
664
662
@@ -685,8 +683,6 @@ QQuickItem *ListViewWithPageHeader::getSectionItem(int modelIndex, bool alreadyI
685 return nullptr;
683 return nullptr;
686
684
687 const QString section = m_delegateModel->stringValue(modelIndex, m_sectionProperty);
685 const QString section = m_delegateModel->stringValue(modelIndex, m_sectionProperty);
688− if (section.isEmpty())
689− return nullptr;
690
686
691 if (modelIndex > 0) {
687 if (modelIndex > 0) {
692 const QString prevSection = m_delegateModel->stringValue(modelIndex - 1, m_sectionProperty);
688 const QString prevSection = m_delegateModel->stringValue(modelIndex - 1, m_sectionProperty);
@@ -877,7 +873,6 @@ void ListViewWithPageHeader::itemCreated(int modelIndex, QObject *object)
877 QQmlContext *context = QQmlEngine::contextForObject(item)->parentContext();
873 QQmlContext *context = QQmlEngine::contextForObject(item)->parentContext();
878 context->setContextProperty(QLatin1String("ListViewWithPageHeader"), this);
874 context->setContextProperty(QLatin1String("ListViewWithPageHeader"), this);
879 context->setContextProperty(QLatin1String("heightToClip"), QVariant::fromValue<int>(0));
875 context->setContextProperty(QLatin1String("heightToClip"), QVariant::fromValue<int>(0));
880− context->setContextProperty(QLatin1String("hasSectionHeader"), QVariant::fromValue<bool>(false));
881 if (modelIndex == m_asyncRequestedIndex) {
876 if (modelIndex == m_asyncRequestedIndex) {
882 createItem(modelIndex, false);
877 createItem(modelIndex, false);
883 refill();
878 refill();
plugins/Unity/Launcher/launchermodel.cpp+3−2
@@ -141,7 +141,8 @@ void LauncherModel::pin(const QString &appId, int index)
141 beginInsertRows(QModelIndex(), index, index);
141 beginInsertRows(QModelIndex(), index, index);
142 LauncherItem *item = new LauncherItem(appId,
142 LauncherItem *item = new LauncherItem(appId,
143 m_backend->displayName(appId),
143 m_backend->displayName(appId),
144− m_backend->icon(appId));
144+ m_backend->icon(appId),
145+ this);
145 item->setPinned(true);
146 item->setPinned(true);
146 m_list.insert(index, item);
147 m_list.insert(index, item);
147 endInsertRows();
148 endInsertRows();
@@ -326,7 +327,7 @@ void LauncherModel::applicationAdded(const QModelIndex &parent, int row)
326 if (found) {
327 if (found) {
327 // Shall we paint some running/recent app highlight? If yes, do it here.
328 // Shall we paint some running/recent app highlight? If yes, do it here.
328 } else {
329 } else {
329− LauncherItem *item = new LauncherItem(app->appId(), app->name(), app->icon().toString());
330+ LauncherItem *item = new LauncherItem(app->appId(), app->name(), app->icon().toString(), this);
330 item->setRecent(true);
331 item->setRecent(true);
331 item->setFocused(app->focused());
332 item->setFocused(app->focused());
332
333
plugins/Utils/CMakeLists.txt+1
@@ -15,6 +15,7 @@ set(QMLPLUGIN_SRC
15 qsortfilterproxymodelqml.cpp
15 qsortfilterproxymodelqml.cpp
16 timeformatter.cpp
16 timeformatter.cpp
17 unitymenumodelpaths.cpp
17 unitymenumodelpaths.cpp
18+ windowkeysfilter.cpp
18 easingcurve.cpp
19 easingcurve.cpp
19 plugin.cpp
20 plugin.cpp
20 )
21 )
plugins/Utils/easingcurve.cpp+5−1
@@ -34,7 +34,11 @@ QEasingCurve::Type EasingCurve::type() const
34
34
35void EasingCurve::setType(const QEasingCurve::Type &type)
35void EasingCurve::setType(const QEasingCurve::Type &type)
36{
36{
37+ // FIXME: Working around bug https://bugreports.qt-project.org/browse/QTBUG-38686 here
38+ QEasingCurve newCurve;
37− m_easingCurve.setType(type);
39+ newCurve.setType(type);
40+ newCurve.setPeriod(m_easingCurve.period());
41+ m_easingCurve = newCurve;
38 Q_EMIT typeChanged();
42 Q_EMIT typeChanged();
39}
43}
40
44
plugins/Utils/plugin.cpp+2
@@ -30,6 +30,7 @@
30#include "qsortfilterproxymodelqml.h"
30#include "qsortfilterproxymodelqml.h"
31#include "timeformatter.h"
31#include "timeformatter.h"
32#include "unitymenumodelpaths.h"
32#include "unitymenumodelpaths.h"
33+#include "windowkeysfilter.h"
33#include "easingcurve.h"
34#include "easingcurve.h"
34
35
35void UtilsPlugin::registerTypes(const char *uri)
36void UtilsPlugin::registerTypes(const char *uri)
@@ -40,6 +41,7 @@ void UtilsPlugin::registerTypes(const char *uri)
40 qmlRegisterType<QSortFilterProxyModelQML>(uri, 0, 1, "SortFilterProxyModel");
41 qmlRegisterType<QSortFilterProxyModelQML>(uri, 0, 1, "SortFilterProxyModel");
41 qmlRegisterType<UnityMenuModelPaths>(uri, 0, 1, "UnityMenuModelPaths");
42 qmlRegisterType<UnityMenuModelPaths>(uri, 0, 1, "UnityMenuModelPaths");
42 qmlRegisterType<TimeFormatter>(uri, 0, 1, "TimeFormatter");
43 qmlRegisterType<TimeFormatter>(uri, 0, 1, "TimeFormatter");
44+ qmlRegisterType<WindowKeysFilter>(uri, 0, 1, "WindowKeysFilter");
43 qmlRegisterType<GDateTimeFormatter>(uri, 0, 1, "GDateTimeFormatter");
45 qmlRegisterType<GDateTimeFormatter>(uri, 0, 1, "GDateTimeFormatter");
44 qmlRegisterType<EasingCurve>(uri, 0, 1, "EasingCurve");
46 qmlRegisterType<EasingCurve>(uri, 0, 1, "EasingCurve");
45}
47}
plugins/Utils/windowkeysfilter.cppnew file+57
@@ -0,0 +1,57 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ * Author: Daniel d'Andrada <daniel.dandrada@canonical.com>
17+ */
18+
19+#include "windowkeysfilter.h"
20+
21+#include <QQuickWindow>
22+
23+WindowKeysFilter::WindowKeysFilter(QQuickItem *parent)
24+ : QQuickItem(parent)
25+{
26+ connect(this, &QQuickItem::windowChanged,
27+ this, &WindowKeysFilter::setupFilterOnWindow);
28+}
29+
30+bool WindowKeysFilter::eventFilter(QObject *watched, QEvent *event)
31+{
32+ Q_ASSERT(!m_filteredWindow.isNull());
33+ Q_ASSERT(watched == static_cast<QObject*>(m_filteredWindow.data()));
34+
35+ if (event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease) {
36+ // Let QML see this event and decide if it does not want it
37+ event->accept();
38+ QCoreApplication::sendEvent(this, event);
39+ return event->isAccepted();
40+ } else {
41+ // Not interested
42+ return false;
43+ }
44+}
45+
46+void WindowKeysFilter::setupFilterOnWindow(QQuickWindow *window)
47+{
48+ if (!m_filteredWindow.isNull()) {
49+ m_filteredWindow->removeEventFilter(this);
50+ m_filteredWindow.clear();
51+ }
52+
53+ if (window) {
54+ window->installEventFilter(this);
55+ m_filteredWindow = window;
56+ }
57+}
plugins/Utils/windowkeysfilter.hnew file+51
@@ -0,0 +1,51 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ * Author: Daniel d'Andrada <daniel.dandrada@canonical.com>
17+ */
18+
19+#ifndef UNITY_WINDOWKEYSFILTER_H
20+#define UNITY_WINDOWKEYSFILTER_H
21+
22+#include <QQuickItem>
23+#include <QPointer>
24+
25+/*
26+ Receives all key events that arrive in the QQuickWindow where this item is placed.
27+
28+ Rejected key events will be allowed to be processed normally by the QQuickWindow whereas
29+ accepted ones will be filtered out. Events are accepted by default, so make sure you reject
30+ the keys you're not interested in.
31+
32+ If more than one WindowKeysFilter exist in the same QML scene (and thus in the same QQuickWindow)
33+ they will be called in the order of creation, which can be tricky to assess. So the best practice
34+ is to have at most one WindowKeysFilter per QML scene.
35+ */
36+class WindowKeysFilter : public QQuickItem
37+{
38+ Q_OBJECT
39+public:
40+ WindowKeysFilter(QQuickItem *parent = 0);
41+
42+ bool eventFilter(QObject *watched, QEvent *event);
43+
44+private Q_SLOTS:
45+ void setupFilterOnWindow(QQuickWindow *window);
46+
47+private:
48+ QPointer<QQuickWindow> m_filteredWindow;
49+};
50+
51+#endif // UNITY_WINDOWKEYSFILTER_H
po/am.po+23−15
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11−"PO-Revision-Date: 2014-07-20 18:16+0000\n"
11+"PO-Revision-Date: 2014-07-27 01:25+0000\n"
12"Last-Translator: samson <Unknown>\n"
12"Last-Translator: samson <Unknown>\n"
13"Language-Team: Amharic <am@li.org>\n"
13"Language-Team: Amharic <am@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-21 07:05+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-28 06:44+0000\n"
18−"X-Generator: Launchpad (build 17114)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -28,7 +28,7 @@ msgstr "አቋራጭ መለያያ"
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
31−msgstr ""
31+msgstr "መግቢያውን መዝለያ"
32
32
33#: qml/Components/EdgeDemo.qml:113
33#: qml/Components/EdgeDemo.qml:113
34msgid "Right edge"
34msgid "Right edge"
@@ -80,10 +80,6 @@ msgstr "የ ድንገተኛ ጥሪ"
80msgid "OK"
80msgid "OK"
81msgstr "እሺ"
81msgstr "እሺ"
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr "በቅርብ የፈለጉዋቸው"
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr "ጨርሷል"
105msgid "See more"
101msgid "See more"
106msgstr "ተጨማሪ መመልከቻ"
102msgstr "ተጨማሪ መመልከቻ"
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr "አነስተኛ መመልከቻ"
106msgstr "አነስተኛ መመልከቻ"
111
107
@@ -113,6 +109,10 @@ msgstr "አነስተኛ መመልከቻ"
113msgid "Recent"
109msgid "Recent"
114msgstr "የቅርብ ጊዜ"
110msgstr "የቅርብ ጊዜ"
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr "ሁሉንም መመልከቻ"
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr "ተጨማሪ..."
118msgstr "ተጨማሪ..."
@@ -121,15 +121,15 @@ msgstr "ተጨማሪ..."
121msgid "Less..."
121msgid "Less..."
122msgstr "አነስተኛ..."
122msgstr "አነስተኛ..."
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr ""
126msgstr ""
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130−msgstr ""
130+msgstr "ግምገማ መጨመሪያ"
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr "መላኪያ"
134msgstr "መላኪያ"
135
135
@@ -165,9 +165,17 @@ msgstr "የመግቢያ ቃል ማሳያ"
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr "ስብሰባ"
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170−msgstr ""
178+msgstr "ወረፋ በመጠበቅ ላይ…"
171
179
172#: qml/Panel/Indicators/MenuItemFactory.qml:587
180#: qml/Panel/Indicators/MenuItemFactory.qml:587
173msgid "Downloading"
181msgid "Downloading"
po/ar.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2014-05-22 08:22+0000\n"
11"PO-Revision-Date: 2014-05-22 08:22+0000\n"
12"Last-Translator: Ibrahim Saed <ibraheem5000@gmail.com>\n"
12"Last-Translator: Ibrahim Saed <ibraheem5000@gmail.com>\n"
13"Language-Team: Arabic <ar@li.org>\n"
13"Language-Team: Arabic <ar@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:36+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:16+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -83,10 +83,6 @@ msgstr "مكالمة طوارئ"
83msgid "OK"
83msgid "OK"
84msgstr ""
84msgstr ""
85
85
86−#: qml/Components/PageHeader.qml:366
87−msgid "Recent searches"
88−msgstr "عمليات البحث الأخيرة"
89−
90#: qml/Components/PassphraseLockscreen.qml:60
86#: qml/Components/PassphraseLockscreen.qml:60
91#, qt-format
87#, qt-format
92msgid "Hello %1"
88msgid "Hello %1"
@@ -108,7 +104,7 @@ msgstr ""
108msgid "See more"
104msgid "See more"
109msgstr "شاهد المزيد"
105msgstr "شاهد المزيد"
110
106
111−#: qml/Components/SeeMore.qml:58
107+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
112msgid "See less"
108msgid "See less"
113msgstr "شاهد أقل"
109msgstr "شاهد أقل"
114
110
@@ -116,6 +112,10 @@ msgstr "شاهد أقل"
116msgid "Recent"
112msgid "Recent"
117msgstr "استُخدمت مؤخرًا"
113msgstr "استُخدمت مؤخرًا"
118
114
115+#: qml/Dash/GenericScopeView.qml:330
116+msgid "See all"
117+msgstr ""
118+
119#: qml/Dash/Previews/PreviewActionCombo.qml:34
119#: qml/Dash/Previews/PreviewActionCombo.qml:34
120msgid "More..."
120msgid "More..."
121msgstr "المزيد..."
121msgstr "المزيد..."
@@ -124,15 +124,15 @@ msgstr "المزيد..."
124msgid "Less..."
124msgid "Less..."
125msgstr "أقل..."
125msgstr "أقل..."
126
126
127−#: qml/Dash/Previews/PreviewRatingInput.qml:82
127+#: qml/Dash/Previews/PreviewRatingInput.qml:81
128msgid "Rate this"
128msgid "Rate this"
129msgstr "قيّم ذلك"
129msgstr "قيّم ذلك"
130
130
131−#: qml/Dash/Previews/PreviewRatingInput.qml:128
131+#: qml/Dash/Previews/PreviewRatingInput.qml:126
132msgid "Add a review"
132msgid "Add a review"
133msgstr "أضف تعليق"
133msgstr "أضف تعليق"
134
134
135−#: qml/Dash/Previews/PreviewRatingInput.qml:168
135+#: qml/Dash/Previews/PreviewRatingInput.qml:166
136msgid "Send"
136msgid "Send"
137msgstr "أرسل"
137msgstr "أرسل"
138
138
@@ -168,6 +168,14 @@ msgstr "عرض كلمة السر"
168msgid "Please enter SIM PIN"
168msgid "Please enter SIM PIN"
169msgstr "من فضلك أدخِل رقم التعريف الشخصي لبطاقة SIM"
169msgstr "من فضلك أدخِل رقم التعريف الشخصي لبطاقة SIM"
170
170
171+#: qml/Panel/ActiveCallHint.qml:77
172+msgid "Tap to return to call..."
173+msgstr ""
174+
175+#: qml/Panel/ActiveCallHint.qml:90
176+msgid "Conference"
177+msgstr ""
178+
171#: qml/Panel/Indicators/MenuItemFactory.qml:583
179#: qml/Panel/Indicators/MenuItemFactory.qml:583
172msgid "In queue…"
180msgid "In queue…"
173msgstr ""
181msgstr ""
po/ast.po+20−12
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11−"PO-Revision-Date: 2014-07-15 16:32+0000\n"
11+"PO-Revision-Date: 2014-07-25 16:51+0000\n"
12"Last-Translator: ivarela <ivarela@ubuntu.com>\n"
12"Last-Translator: ivarela <ivarela@ubuntu.com>\n"
13"Language-Team: Asturian <ast@li.org>\n"
13"Language-Team: Asturian <ast@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-16 07:27+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:16+0000\n"
18−"X-Generator: Launchpad (build 17112)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -84,10 +84,6 @@ msgstr "Llamada d'emerxencia"
84msgid "OK"
84msgid "OK"
85msgstr "Aceutar"
85msgstr "Aceutar"
86
86
87−#: qml/Components/PageHeader.qml:366
88−msgid "Recent searches"
89−msgstr "Busques recientes"
90−
91#: qml/Components/PassphraseLockscreen.qml:60
87#: qml/Components/PassphraseLockscreen.qml:60
92#, qt-format
88#, qt-format
93msgid "Hello %1"
89msgid "Hello %1"
@@ -109,7 +105,7 @@ msgstr "FECHO"
109msgid "See more"
105msgid "See more"
110msgstr "Ver más"
106msgstr "Ver más"
111
107
112−#: qml/Components/SeeMore.qml:58
108+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
113msgid "See less"
109msgid "See less"
114msgstr "Ver menos"
110msgstr "Ver menos"
115
111
@@ -117,6 +113,10 @@ msgstr "Ver menos"
117msgid "Recent"
113msgid "Recent"
118msgstr "Reciente"
114msgstr "Reciente"
119
115
116+#: qml/Dash/GenericScopeView.qml:330
117+msgid "See all"
118+msgstr "Ver too"
119+
120#: qml/Dash/Previews/PreviewActionCombo.qml:34
120#: qml/Dash/Previews/PreviewActionCombo.qml:34
121msgid "More..."
121msgid "More..."
122msgstr "Más…"
122msgstr "Más…"
@@ -125,15 +125,15 @@ msgstr "Más…"
125msgid "Less..."
125msgid "Less..."
126msgstr "Menos…"
126msgstr "Menos…"
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:82
128+#: qml/Dash/Previews/PreviewRatingInput.qml:81
129msgid "Rate this"
129msgid "Rate this"
130msgstr "Valorar esto"
130msgstr "Valorar esto"
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:128
132+#: qml/Dash/Previews/PreviewRatingInput.qml:126
133msgid "Add a review"
133msgid "Add a review"
134msgstr "Amestar una reseña"
134msgstr "Amestar una reseña"
135
135
136−#: qml/Dash/Previews/PreviewRatingInput.qml:168
136+#: qml/Dash/Previews/PreviewRatingInput.qml:166
137msgid "Send"
137msgid "Send"
138msgstr "Unviar"
138msgstr "Unviar"
139
139
@@ -169,6 +169,14 @@ msgstr "Amosar contraseña"
169msgid "Please enter SIM PIN"
169msgid "Please enter SIM PIN"
170msgstr "Escribi'l PIN de la SIM"
170msgstr "Escribi'l PIN de la SIM"
171
171
172+#: qml/Panel/ActiveCallHint.qml:77
173+msgid "Tap to return to call..."
174+msgstr "Tocar pa tornar a la llamada..."
175+
176+#: qml/Panel/ActiveCallHint.qml:90
177+msgid "Conference"
178+msgstr "Conferencia"
179+
172#: qml/Panel/Indicators/MenuItemFactory.qml:583
180#: qml/Panel/Indicators/MenuItemFactory.qml:583
173msgid "In queue…"
181msgid "In queue…"
174msgstr "N'espera…"
182msgstr "N'espera…"
po/az.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2014-01-15 09:50+0000\n"
11"PO-Revision-Date: 2014-01-15 09:50+0000\n"
12"Last-Translator: Turan Mahmudov <turan.mahmudov@gmail.com>\n"
12"Last-Translator: Turan Mahmudov <turan.mahmudov@gmail.com>\n"
13"Language-Team: Azerbaijani <az@li.org>\n"
13"Language-Team: Azerbaijani <az@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:36+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:16+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -81,10 +81,6 @@ msgstr "Zərurət zəngi"
81msgid "OK"
81msgid "OK"
82msgstr ""
82msgstr ""
83
83
84−#: qml/Components/PageHeader.qml:366
85−msgid "Recent searches"
86−msgstr "Son axtarışlar"
87−
88#: qml/Components/PassphraseLockscreen.qml:60
84#: qml/Components/PassphraseLockscreen.qml:60
89#, qt-format
85#, qt-format
90msgid "Hello %1"
86msgid "Hello %1"
@@ -106,7 +102,7 @@ msgstr ""
106msgid "See more"
102msgid "See more"
107msgstr ""
103msgstr ""
108
104
109−#: qml/Components/SeeMore.qml:58
105+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
110msgid "See less"
106msgid "See less"
111msgstr ""
107msgstr ""
112
108
@@ -114,6 +110,10 @@ msgstr ""
114msgid "Recent"
110msgid "Recent"
115msgstr ""
111msgstr ""
116
112
113+#: qml/Dash/GenericScopeView.qml:330
114+msgid "See all"
115+msgstr ""
116+
117#: qml/Dash/Previews/PreviewActionCombo.qml:34
117#: qml/Dash/Previews/PreviewActionCombo.qml:34
118msgid "More..."
118msgid "More..."
119msgstr ""
119msgstr ""
@@ -122,15 +122,15 @@ msgstr ""
122msgid "Less..."
122msgid "Less..."
123msgstr ""
123msgstr ""
124
124
125−#: qml/Dash/Previews/PreviewRatingInput.qml:82
125+#: qml/Dash/Previews/PreviewRatingInput.qml:81
126msgid "Rate this"
126msgid "Rate this"
127msgstr "Qiymət ver"
127msgstr "Qiymət ver"
128
128
129−#: qml/Dash/Previews/PreviewRatingInput.qml:128
129+#: qml/Dash/Previews/PreviewRatingInput.qml:126
130msgid "Add a review"
130msgid "Add a review"
131msgstr "Rəy yaz"
131msgstr "Rəy yaz"
132
132
133−#: qml/Dash/Previews/PreviewRatingInput.qml:168
133+#: qml/Dash/Previews/PreviewRatingInput.qml:166
134msgid "Send"
134msgid "Send"
135msgstr "Göndər"
135msgstr "Göndər"
136
136
@@ -166,6 +166,14 @@ msgstr "Parolu göstər"
166msgid "Please enter SIM PIN"
166msgid "Please enter SIM PIN"
167msgstr ""
167msgstr ""
168
168
169+#: qml/Panel/ActiveCallHint.qml:77
170+msgid "Tap to return to call..."
171+msgstr ""
172+
173+#: qml/Panel/ActiveCallHint.qml:90
174+msgid "Conference"
175+msgstr ""
176+
169#: qml/Panel/Indicators/MenuItemFactory.qml:583
177#: qml/Panel/Indicators/MenuItemFactory.qml:583
170msgid "In queue…"
178msgid "In queue…"
171msgstr ""
179msgstr ""
po/bg.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2014-04-01 14:08+0000\n"
11"PO-Revision-Date: 2014-04-01 14:08+0000\n"
12"Last-Translator: Atanas Kovachki <Unknown>\n"
12"Last-Translator: Atanas Kovachki <Unknown>\n"
13"Language-Team: Bulgarian <bg@li.org>\n"
13"Language-Team: Bulgarian <bg@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:36+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:16+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -87,10 +87,6 @@ msgstr "Спешно повикване"
87msgid "OK"
87msgid "OK"
88msgstr ""
88msgstr ""
89
89
90−#: qml/Components/PageHeader.qml:366
91−msgid "Recent searches"
92−msgstr "Последни търсения"
93−
94#: qml/Components/PassphraseLockscreen.qml:60
90#: qml/Components/PassphraseLockscreen.qml:60
95#, qt-format
91#, qt-format
96msgid "Hello %1"
92msgid "Hello %1"
@@ -112,7 +108,7 @@ msgstr ""
112msgid "See more"
108msgid "See more"
113msgstr ""
109msgstr ""
114
110
115−#: qml/Components/SeeMore.qml:58
111+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
116msgid "See less"
112msgid "See less"
117msgstr ""
113msgstr ""
118
114
@@ -120,6 +116,10 @@ msgstr ""
120msgid "Recent"
116msgid "Recent"
121msgstr "Последни"
117msgstr "Последни"
122
118
119+#: qml/Dash/GenericScopeView.qml:330
120+msgid "See all"
121+msgstr ""
122+
123#: qml/Dash/Previews/PreviewActionCombo.qml:34
123#: qml/Dash/Previews/PreviewActionCombo.qml:34
124msgid "More..."
124msgid "More..."
125msgstr ""
125msgstr ""
@@ -128,15 +128,15 @@ msgstr ""
128msgid "Less..."
128msgid "Less..."
129msgstr "По-малко..."
129msgstr "По-малко..."
130
130
131−#: qml/Dash/Previews/PreviewRatingInput.qml:82
131+#: qml/Dash/Previews/PreviewRatingInput.qml:81
132msgid "Rate this"
132msgid "Rate this"
133msgstr "Оценете това"
133msgstr "Оценете това"
134
134
135−#: qml/Dash/Previews/PreviewRatingInput.qml:128
135+#: qml/Dash/Previews/PreviewRatingInput.qml:126
136msgid "Add a review"
136msgid "Add a review"
137msgstr "Добави отзив"
137msgstr "Добави отзив"
138
138
139−#: qml/Dash/Previews/PreviewRatingInput.qml:168
139+#: qml/Dash/Previews/PreviewRatingInput.qml:166
140msgid "Send"
140msgid "Send"
141msgstr "Изпрати"
141msgstr "Изпрати"
142
142
@@ -172,6 +172,14 @@ msgstr "Покажи паролата"
172msgid "Please enter SIM PIN"
172msgid "Please enter SIM PIN"
173msgstr ""
173msgstr ""
174
174
175+#: qml/Panel/ActiveCallHint.qml:77
176+msgid "Tap to return to call..."
177+msgstr ""
178+
179+#: qml/Panel/ActiveCallHint.qml:90
180+msgid "Conference"
181+msgstr ""
182+
175#: qml/Panel/Indicators/MenuItemFactory.qml:583
183#: qml/Panel/Indicators/MenuItemFactory.qml:583
176msgid "In queue…"
184msgid "In queue…"
177msgstr ""
185msgstr ""
po/br.po+20−12
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11−"PO-Revision-Date: 2014-07-15 06:44+0000\n"
11+"PO-Revision-Date: 2014-07-28 06:44+0000\n"
12"Last-Translator: Fohanno Thierry <thierry.fohanno@ofis-bzh.org>\n"
12"Last-Translator: Fohanno Thierry <thierry.fohanno@ofis-bzh.org>\n"
13"Language-Team: Breton <br@li.org>\n"
13"Language-Team: Breton <br@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-16 07:27+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-29 06:54+0000\n"
18−"X-Generator: Launchpad (build 17112)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -87,10 +87,6 @@ msgstr "Pellgomzadenn vallus"
87msgid "OK"
87msgid "OK"
88msgstr "Mat eo"
88msgstr "Mat eo"
89
89
90−#: qml/Components/PageHeader.qml:366
91−msgid "Recent searches"
92−msgstr "Enklaskoù graet nevez zo"
93−
94#: qml/Components/PassphraseLockscreen.qml:60
90#: qml/Components/PassphraseLockscreen.qml:60
95#, qt-format
91#, qt-format
96msgid "Hello %1"
92msgid "Hello %1"
@@ -112,7 +108,7 @@ msgstr "ECHU"
112msgid "See more"
108msgid "See more"
113msgstr "Gwelet muioc'h"
109msgstr "Gwelet muioc'h"
114
110
115−#: qml/Components/SeeMore.qml:58
111+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
116msgid "See less"
112msgid "See less"
117msgstr "Gwelet nebeutoc'h"
113msgstr "Gwelet nebeutoc'h"
118
114
@@ -120,6 +116,10 @@ msgstr "Gwelet nebeutoc'h"
120msgid "Recent"
116msgid "Recent"
121msgstr "Nevez zo"
117msgstr "Nevez zo"
122
118
119+#: qml/Dash/GenericScopeView.qml:330
120+msgid "See all"
121+msgstr "Gwelet pep tra"
122+
123#: qml/Dash/Previews/PreviewActionCombo.qml:34
123#: qml/Dash/Previews/PreviewActionCombo.qml:34
124msgid "More..."
124msgid "More..."
125msgstr "Muioc'h..."
125msgstr "Muioc'h..."
@@ -128,15 +128,15 @@ msgstr "Muioc'h..."
128msgid "Less..."
128msgid "Less..."
129msgstr "Nebeutoc'h..."
129msgstr "Nebeutoc'h..."
130
130
131−#: qml/Dash/Previews/PreviewRatingInput.qml:82
131+#: qml/Dash/Previews/PreviewRatingInput.qml:81
132msgid "Rate this"
132msgid "Rate this"
133msgstr "Priziit an dra-mañ"
133msgstr "Priziit an dra-mañ"
134
134
135−#: qml/Dash/Previews/PreviewRatingInput.qml:128
135+#: qml/Dash/Previews/PreviewRatingInput.qml:126
136msgid "Add a review"
136msgid "Add a review"
137msgstr "Ouzhpennañ un ali"
137msgstr "Ouzhpennañ un ali"
138
138
139−#: qml/Dash/Previews/PreviewRatingInput.qml:168
139+#: qml/Dash/Previews/PreviewRatingInput.qml:166
140msgid "Send"
140msgid "Send"
141msgstr "Kas"
141msgstr "Kas"
142
142
@@ -172,6 +172,14 @@ msgstr "Diskouez ar ger-tremen"
172msgid "Please enter SIM PIN"
172msgid "Please enter SIM PIN"
173msgstr "Ebarzhit kod PIN ho kartenn SIM, mar plij"
173msgstr "Ebarzhit kod PIN ho kartenn SIM, mar plij"
174
174
175+#: qml/Panel/ActiveCallHint.qml:77
176+msgid "Tap to return to call..."
177+msgstr "Touchit evit distreiñ d'ar bellgomzadenn..."
178+
179+#: qml/Panel/ActiveCallHint.qml:90
180+msgid "Conference"
181+msgstr "Kendiviz"
182+
175#: qml/Panel/Indicators/MenuItemFactory.qml:583
183#: qml/Panel/Indicators/MenuItemFactory.qml:583
176msgid "In queue…"
184msgid "In queue…"
177msgstr "El lostennad..."
185msgstr "El lostennad..."
po/bs.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2014-01-16 22:33+0000\n"
11"PO-Revision-Date: 2014-01-16 22:33+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Bosnian <bs@li.org>\n"
13"Language-Team: Bosnian <bs@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:36+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:16+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -80,10 +80,6 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr ""
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr ""
105msgid "See more"
101msgid "See more"
106msgstr ""
102msgstr ""
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr ""
106msgstr ""
111
107
@@ -113,6 +109,10 @@ msgstr ""
113msgid "Recent"
109msgid "Recent"
114msgstr ""
110msgstr ""
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr ""
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr ""
118msgstr ""
@@ -121,15 +121,15 @@ msgstr ""
121msgid "Less..."
121msgid "Less..."
122msgstr ""
122msgstr ""
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr ""
126msgstr ""
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr ""
130msgstr ""
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr ""
134msgstr ""
135
135
@@ -165,6 +165,14 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr ""
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr ""
178msgstr ""
po/ca.po+28−20
@@ -7,24 +7,24 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11−"PO-Revision-Date: 2014-06-13 07:47+0000\n"
11+"PO-Revision-Date: 2014-07-25 10:21+0000\n"
12"Last-Translator: David Planella <david.planella@ubuntu.com>\n"
12"Last-Translator: David Planella <david.planella@ubuntu.com>\n"
13"Language-Team: Catalan <ca@li.org>\n"
13"Language-Team: Catalan <ca@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:36+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:16+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
22msgid "Pin shortcut"
22msgid "Pin shortcut"
23−msgstr ""
23+msgstr "Enganxa la drecera"
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26msgid "Unpin shortcut"
26msgid "Unpin shortcut"
27−msgstr ""
27+msgstr "Desenganxa la drecera"
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -88,10 +88,6 @@ msgstr "Trucada d'emergència"
88msgid "OK"
88msgid "OK"
89msgstr "D'acord"
89msgstr "D'acord"
90
90
91−#: qml/Components/PageHeader.qml:366
92−msgid "Recent searches"
93−msgstr "Cerques recents"
94−
95#: qml/Components/PassphraseLockscreen.qml:60
91#: qml/Components/PassphraseLockscreen.qml:60
96#, qt-format
92#, qt-format
97msgid "Hello %1"
93msgid "Hello %1"
@@ -113,7 +109,7 @@ msgstr "Fet"
113msgid "See more"
109msgid "See more"
114msgstr "Mostra'n més"
110msgstr "Mostra'n més"
115
111
116−#: qml/Components/SeeMore.qml:58
112+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
117msgid "See less"
113msgid "See less"
118msgstr "Mostra'n menys"
114msgstr "Mostra'n menys"
119
115
@@ -121,6 +117,10 @@ msgstr "Mostra'n menys"
121msgid "Recent"
117msgid "Recent"
122msgstr "Recents"
118msgstr "Recents"
123
119
120+#: qml/Dash/GenericScopeView.qml:330
121+msgid "See all"
122+msgstr "Mostra-ho tot"
123+
124#: qml/Dash/Previews/PreviewActionCombo.qml:34
124#: qml/Dash/Previews/PreviewActionCombo.qml:34
125msgid "More..."
125msgid "More..."
126msgstr "Més..."
126msgstr "Més..."
@@ -129,15 +129,15 @@ msgstr "Més..."
129msgid "Less..."
129msgid "Less..."
130msgstr "Menys..."
130msgstr "Menys..."
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:82
132+#: qml/Dash/Previews/PreviewRatingInput.qml:81
133msgid "Rate this"
133msgid "Rate this"
134msgstr "Puntueu-ho"
134msgstr "Puntueu-ho"
135
135
136−#: qml/Dash/Previews/PreviewRatingInput.qml:128
136+#: qml/Dash/Previews/PreviewRatingInput.qml:126
137msgid "Add a review"
137msgid "Add a review"
138msgstr "Afegiu una ressenya"
138msgstr "Afegiu una ressenya"
139
139
140−#: qml/Dash/Previews/PreviewRatingInput.qml:168
140+#: qml/Dash/Previews/PreviewRatingInput.qml:166
141msgid "Send"
141msgid "Send"
142msgstr "Envia"
142msgstr "Envia"
143
143
@@ -173,29 +173,37 @@ msgstr "Mostra la contrasenya"
173msgid "Please enter SIM PIN"
173msgid "Please enter SIM PIN"
174msgstr "Introduïu el PIN de la targeta SIM"
174msgstr "Introduïu el PIN de la targeta SIM"
175
175
176+#: qml/Panel/ActiveCallHint.qml:77
177+msgid "Tap to return to call..."
178+msgstr "Feu un toc per tornar a la trucada..."
179+
180+#: qml/Panel/ActiveCallHint.qml:90
181+msgid "Conference"
182+msgstr "Conferència"
183+
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
184#: qml/Panel/Indicators/MenuItemFactory.qml:583
177msgid "In queue…"
185msgid "In queue…"
178−msgstr ""
186+msgstr "A la cua..."
179
187
180#: qml/Panel/Indicators/MenuItemFactory.qml:587
188#: qml/Panel/Indicators/MenuItemFactory.qml:587
181msgid "Downloading"
189msgid "Downloading"
182−msgstr ""
190+msgstr "S'està baixant"
183
191
184#: qml/Panel/Indicators/MenuItemFactory.qml:589
192#: qml/Panel/Indicators/MenuItemFactory.qml:589
185msgid "Paused, tap to resume"
193msgid "Paused, tap to resume"
186−msgstr ""
194+msgstr "En pausa, feu un toc per continuar"
187
195
188#: qml/Panel/Indicators/MenuItemFactory.qml:591
196#: qml/Panel/Indicators/MenuItemFactory.qml:591
189msgid "Canceled"
197msgid "Canceled"
190−msgstr ""
198+msgstr "S'ha cancel·lat"
191
199
192#: qml/Panel/Indicators/MenuItemFactory.qml:593
200#: qml/Panel/Indicators/MenuItemFactory.qml:593
193msgid "Finished"
201msgid "Finished"
194−msgstr ""
202+msgstr "S'ha finalitzat"
195
203
196#: qml/Panel/Indicators/MenuItemFactory.qml:595
204#: qml/Panel/Indicators/MenuItemFactory.qml:595
197msgid "Failed, tap to retry"
205msgid "Failed, tap to retry"
198−msgstr ""
206+msgstr "Ha fallat, feu un toc per tornar-ho a intentar"
199
207
200#: qml/Panel/SearchIndicator.qml:27
208#: qml/Panel/SearchIndicator.qml:27
201msgid "Search"
209msgid "Search"
po/ckb.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2014-01-21 11:05+0000\n"
11"PO-Revision-Date: 2014-01-21 11:05+0000\n"
12"Last-Translator: Aras <aras.noori@gmail.com>\n"
12"Last-Translator: Aras <aras.noori@gmail.com>\n"
13"Language-Team: Kurdish (Sorani) <ckb@li.org>\n"
13"Language-Team: Kurdish (Sorani) <ckb@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:17+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -80,10 +80,6 @@ msgstr "هێڵی فریاگوزاری"
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr "دوایین گەڕانەکان"
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr ""
105msgid "See more"
101msgid "See more"
106msgstr ""
102msgstr ""
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr ""
106msgstr ""
111
107
@@ -113,6 +109,10 @@ msgstr ""
113msgid "Recent"
109msgid "Recent"
114msgstr ""
110msgstr ""
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr ""
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr ""
118msgstr ""
@@ -121,15 +121,15 @@ msgstr ""
121msgid "Less..."
121msgid "Less..."
122msgstr ""
122msgstr ""
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr "پلە دابنی بۆی"
126msgstr "پلە دابنی بۆی"
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr "پێداچوونەوە زۆر بکە"
130msgstr "پێداچوونەوە زۆر بکە"
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr "ناردن"
134msgstr "ناردن"
135
135
@@ -165,6 +165,14 @@ msgstr "تێپەڕەوشە پیشان بدە"
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr ""
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr ""
178msgstr ""
po/cs.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2014-01-08 10:11+0000\n"
11"PO-Revision-Date: 2014-01-08 10:11+0000\n"
12"Last-Translator: Tadeáš Pařík <tadeas.parik@gmail.com>\n"
12"Last-Translator: Tadeáš Pařík <tadeas.parik@gmail.com>\n"
13"Language-Team: Czech <cs@li.org>\n"
13"Language-Team: Czech <cs@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:36+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:16+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -80,10 +80,6 @@ msgstr "Tísňové volání"
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr "Poslední vyhledávání"
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr ""
105msgid "See more"
101msgid "See more"
106msgstr ""
102msgstr ""
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr ""
106msgstr ""
111
107
@@ -113,6 +109,10 @@ msgstr ""
113msgid "Recent"
109msgid "Recent"
114msgstr ""
110msgstr ""
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr ""
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr ""
118msgstr ""
@@ -121,15 +121,15 @@ msgstr ""
121msgid "Less..."
121msgid "Less..."
122msgstr ""
122msgstr ""
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr "Ohodnoťte to"
126msgstr "Ohodnoťte to"
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr "Přidat recenzi"
130msgstr "Přidat recenzi"
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr "Odeslat"
134msgstr "Odeslat"
135
135
@@ -165,6 +165,14 @@ msgstr "Zobrazit heslo"
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr ""
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr ""
178msgstr ""
po/da.po+22−14
@@ -8,15 +8,15 @@ msgid ""
8msgstr ""
8msgstr ""
9"Project-Id-Version: unity8\n"
9"Project-Id-Version: unity8\n"
10"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
11−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
12−"PO-Revision-Date: 2014-07-22 15:46+0000\n"
12+"PO-Revision-Date: 2014-07-29 23:18+0000\n"
13−"Last-Translator: Kenneth Ramsussen <kentora@kentora.dk>\n"
13+"Last-Translator: Ask Hjorth Larsen <asklarsen@gmail.com>\n"
14"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
14"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
15"MIME-Version: 1.0\n"
15"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
17"Content-Transfer-Encoding: 8bit\n"
18−"X-Launchpad-Export-Date: 2014-07-23 07:01+0000\n"
18+"X-Launchpad-Export-Date: 2014-07-30 07:08+0000\n"
19−"X-Generator: Launchpad (build 17114)\n"
19+"X-Generator: Launchpad (build 17131)\n"
20
20
21#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:43
22#: plugins/Unity/Launcher/launcheritem.cpp:73
22#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,7 +72,7 @@ msgid ""
72"You have now mastered the edge gestures and can start using the "
72"You have now mastered the edge gestures and can start using the "
73"phone<br><br>Tap on the screen to start"
73"phone<br><br>Tap on the screen to start"
74msgstr ""
74msgstr ""
75−"Du mestrer nu kantgestusserne og kan begynde at bruge telefonen<br><br>Tryk "
75+"Du mestrer nu kantbevægelserne og kan begynde at bruge telefonen<br><br>Tryk "
76"på skærmen for at starte"
76"på skærmen for at starte"
77
77
78#: qml/Components/Lockscreen.qml:214
78#: qml/Components/Lockscreen.qml:214
@@ -83,10 +83,6 @@ msgstr "Nødopkald"
83msgid "OK"
83msgid "OK"
84msgstr "O.k."
84msgstr "O.k."
85
85
86−#: qml/Components/PageHeader.qml:366
87−msgid "Recent searches"
88−msgstr "Seneste søgninger"
89−
90#: qml/Components/PassphraseLockscreen.qml:60
86#: qml/Components/PassphraseLockscreen.qml:60
91#, qt-format
87#, qt-format
92msgid "Hello %1"
88msgid "Hello %1"
@@ -108,7 +104,7 @@ msgstr "FÆRDIG"
108msgid "See more"
104msgid "See more"
109msgstr "Vis mere"
105msgstr "Vis mere"
110
106
111−#: qml/Components/SeeMore.qml:58
107+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
112msgid "See less"
108msgid "See less"
113msgstr "Vis mindre"
109msgstr "Vis mindre"
114
110
@@ -116,6 +112,10 @@ msgstr "Vis mindre"
116msgid "Recent"
112msgid "Recent"
117msgstr "Seneste"
113msgstr "Seneste"
118
114
115+#: qml/Dash/GenericScopeView.qml:330
116+msgid "See all"
117+msgstr ""
118+
119#: qml/Dash/Previews/PreviewActionCombo.qml:34
119#: qml/Dash/Previews/PreviewActionCombo.qml:34
120msgid "More..."
120msgid "More..."
121msgstr "Mere..."
121msgstr "Mere..."
@@ -124,15 +124,15 @@ msgstr "Mere..."
124msgid "Less..."
124msgid "Less..."
125msgstr "Mindre..."
125msgstr "Mindre..."
126
126
127−#: qml/Dash/Previews/PreviewRatingInput.qml:82
127+#: qml/Dash/Previews/PreviewRatingInput.qml:81
128msgid "Rate this"
128msgid "Rate this"
129msgstr "Bedøm dette"
129msgstr "Bedøm dette"
130
130
131−#: qml/Dash/Previews/PreviewRatingInput.qml:128
131+#: qml/Dash/Previews/PreviewRatingInput.qml:126
132msgid "Add a review"
132msgid "Add a review"
133msgstr "Tilføj en forhåndsvisning"
133msgstr "Tilføj en forhåndsvisning"
134
134
135−#: qml/Dash/Previews/PreviewRatingInput.qml:168
135+#: qml/Dash/Previews/PreviewRatingInput.qml:166
136msgid "Send"
136msgid "Send"
137msgstr "Send"
137msgstr "Send"
138
138
@@ -168,6 +168,14 @@ msgstr "Vis adgangskode"
168msgid "Please enter SIM PIN"
168msgid "Please enter SIM PIN"
169msgstr "Indtast venligst PIN for SIM"
169msgstr "Indtast venligst PIN for SIM"
170
170
171+#: qml/Panel/ActiveCallHint.qml:77
172+msgid "Tap to return to call..."
173+msgstr ""
174+
175+#: qml/Panel/ActiveCallHint.qml:90
176+msgid "Conference"
177+msgstr "Konference"
178+
171#: qml/Panel/Indicators/MenuItemFactory.qml:583
179#: qml/Panel/Indicators/MenuItemFactory.qml:583
172msgid "In queue…"
180msgid "In queue…"
173msgstr "I kø…"
181msgstr "I kø…"
po/de.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2014-07-15 13:20+0000\n"
11"PO-Revision-Date: 2014-07-15 13:20+0000\n"
12"Last-Translator: Phillip Sz <Unknown>\n"
12"Last-Translator: Phillip Sz <Unknown>\n"
13"Language-Team: German <de@li.org>\n"
13"Language-Team: German <de@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-16 07:27+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:16+0000\n"
18−"X-Generator: Launchpad (build 17112)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -85,10 +85,6 @@ msgstr "Notruf"
85msgid "OK"
85msgid "OK"
86msgstr "OK"
86msgstr "OK"
87
87
88−#: qml/Components/PageHeader.qml:366
89−msgid "Recent searches"
90−msgstr "Zuletzt verwendete Suchbegriffe"
91−
92#: qml/Components/PassphraseLockscreen.qml:60
88#: qml/Components/PassphraseLockscreen.qml:60
93#, qt-format
89#, qt-format
94msgid "Hello %1"
90msgid "Hello %1"
@@ -110,7 +106,7 @@ msgstr "ERLEDIGT"
110msgid "See more"
106msgid "See more"
111msgstr "Mehr ansehen"
107msgstr "Mehr ansehen"
112
108
113−#: qml/Components/SeeMore.qml:58
109+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
114msgid "See less"
110msgid "See less"
115msgstr "Weniger ansehen"
111msgstr "Weniger ansehen"
116
112
@@ -118,6 +114,10 @@ msgstr "Weniger ansehen"
118msgid "Recent"
114msgid "Recent"
119msgstr "Kürzlich"
115msgstr "Kürzlich"
120
116
117+#: qml/Dash/GenericScopeView.qml:330
118+msgid "See all"
119+msgstr ""
120+
121#: qml/Dash/Previews/PreviewActionCombo.qml:34
121#: qml/Dash/Previews/PreviewActionCombo.qml:34
122msgid "More..."
122msgid "More..."
123msgstr "Mehr …"
123msgstr "Mehr …"
@@ -126,15 +126,15 @@ msgstr "Mehr …"
126msgid "Less..."
126msgid "Less..."
127msgstr "Weniger …"
127msgstr "Weniger …"
128
128
129−#: qml/Dash/Previews/PreviewRatingInput.qml:82
129+#: qml/Dash/Previews/PreviewRatingInput.qml:81
130msgid "Rate this"
130msgid "Rate this"
131msgstr "Bewerten"
131msgstr "Bewerten"
132
132
133−#: qml/Dash/Previews/PreviewRatingInput.qml:128
133+#: qml/Dash/Previews/PreviewRatingInput.qml:126
134msgid "Add a review"
134msgid "Add a review"
135msgstr "Bewertung hinzufügen"
135msgstr "Bewertung hinzufügen"
136
136
137−#: qml/Dash/Previews/PreviewRatingInput.qml:168
137+#: qml/Dash/Previews/PreviewRatingInput.qml:166
138msgid "Send"
138msgid "Send"
139msgstr "Senden"
139msgstr "Senden"
140
140
@@ -170,6 +170,14 @@ msgstr "Passwort anzeigen"
170msgid "Please enter SIM PIN"
170msgid "Please enter SIM PIN"
171msgstr "Bitte die PIN der SIM eingeben"
171msgstr "Bitte die PIN der SIM eingeben"
172
172
173+#: qml/Panel/ActiveCallHint.qml:77
174+msgid "Tap to return to call..."
175+msgstr ""
176+
177+#: qml/Panel/ActiveCallHint.qml:90
178+msgid "Conference"
179+msgstr ""
180+
173#: qml/Panel/Indicators/MenuItemFactory.qml:583
181#: qml/Panel/Indicators/MenuItemFactory.qml:583
174msgid "In queue…"
182msgid "In queue…"
175msgstr "In Warteschlange …"
183msgstr "In Warteschlange …"
po/el.po+34−26
@@ -7,24 +7,24 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11−"PO-Revision-Date: 2014-02-26 09:58+0000\n"
11+"PO-Revision-Date: 2014-07-28 16:06+0000\n"
12−"Last-Translator: j3lc <x_nikos@yahoo.gr>\n"
12+"Last-Translator: Chris Taklis (aka Kailor) <ctaklis@gmail.com>\n"
13"Language-Team: Greek <el@li.org>\n"
13"Language-Team: Greek <el@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-29 06:54+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
22msgid "Pin shortcut"
22msgid "Pin shortcut"
23−msgstr ""
23+msgstr "Καρφίτσωμα συντόμευσης"
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26msgid "Unpin shortcut"
26msgid "Unpin shortcut"
27−msgstr ""
27+msgstr "Ξεκαρφίτσωμα συντόμευσης"
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -82,11 +82,7 @@ msgstr "Κλήση έκτακτης ανάγκης"
82
82
83#: qml/Components/Lockscreen.qml:231
83#: qml/Components/Lockscreen.qml:231
84msgid "OK"
84msgid "OK"
85−msgstr ""
85+msgstr "OK"
86−
87−#: qml/Components/PageHeader.qml:366
88−msgid "Recent searches"
89−msgstr "Πρόσφατες αναζητήσεις"
90
86
91#: qml/Components/PassphraseLockscreen.qml:60
87#: qml/Components/PassphraseLockscreen.qml:60
92#, qt-format
88#, qt-format
@@ -99,47 +95,51 @@ msgstr "Γεια σας"
99
95
100#: qml/Components/PinLockscreen.qml:198
96#: qml/Components/PinLockscreen.qml:198
101msgid "CANCEL"
97msgid "CANCEL"
102−msgstr ""
98+msgstr "ΑΚΥΡΩΣΗ"
103
99
104#: qml/Components/PinLockscreen.qml:216
100#: qml/Components/PinLockscreen.qml:216
105msgid "DONE"
101msgid "DONE"
106−msgstr ""
102+msgstr "ΟΛΟΚΛΗΡΩΣΗ"
107
103
108#: qml/Components/SeeMore.qml:35
104#: qml/Components/SeeMore.qml:35
109msgid "See more"
105msgid "See more"
110msgstr "Περρισότερα"
106msgstr "Περρισότερα"
111
107
112−#: qml/Components/SeeMore.qml:58
108+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
113msgid "See less"
109msgid "See less"
114msgstr "Λιγότερα"
110msgstr "Λιγότερα"
115
111
116#: qml/Dash/DashApps.qml:37
112#: qml/Dash/DashApps.qml:37
117msgid "Recent"
113msgid "Recent"
118−msgstr ""
114+msgstr "Πρόσφατα"
115+
116+#: qml/Dash/GenericScopeView.qml:330
117+msgid "See all"
118+msgstr "Εμφάνιση όλων"
119
119
120#: qml/Dash/Previews/PreviewActionCombo.qml:34
120#: qml/Dash/Previews/PreviewActionCombo.qml:34
121msgid "More..."
121msgid "More..."
122−msgstr ""
122+msgstr "Περισσότερα..."
123
123
124#: qml/Dash/Previews/PreviewActionCombo.qml:34
124#: qml/Dash/Previews/PreviewActionCombo.qml:34
125msgid "Less..."
125msgid "Less..."
126−msgstr ""
126+msgstr "Λιγότερα..."
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:82
128+#: qml/Dash/Previews/PreviewRatingInput.qml:81
129msgid "Rate this"
129msgid "Rate this"
130msgstr "Βαθμολογήστε το"
130msgstr "Βαθμολογήστε το"
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:128
132+#: qml/Dash/Previews/PreviewRatingInput.qml:126
133msgid "Add a review"
133msgid "Add a review"
134msgstr "Προσθέστε την αξιολόγησή σας"
134msgstr "Προσθέστε την αξιολόγησή σας"
135
135
136−#: qml/Dash/Previews/PreviewRatingInput.qml:168
136+#: qml/Dash/Previews/PreviewRatingInput.qml:166
137msgid "Send"
137msgid "Send"
138msgstr "Αποστολή"
138msgstr "Αποστολή"
139
139
140#: qml/Greeter/Greeter.qml:157
140#: qml/Greeter/Greeter.qml:157
141msgid "Swipe to unlock"
141msgid "Swipe to unlock"
142−msgstr ""
142+msgstr "Σύρετε για να ξεκλειδώσετε"
143
143
144#: qml/Hud/HudParametrizedActionsPage.qml:132
144#: qml/Hud/HudParametrizedActionsPage.qml:132
145msgid "Confirm"
145msgid "Confirm"
@@ -169,25 +169,33 @@ msgstr "Εμφάνιση κωδικού"
169msgid "Please enter SIM PIN"
169msgid "Please enter SIM PIN"
170msgstr "Παρακαλώ εισάγετε το PIN της κάρτας SIM"
170msgstr "Παρακαλώ εισάγετε το PIN της κάρτας SIM"
171
171
172+#: qml/Panel/ActiveCallHint.qml:77
173+msgid "Tap to return to call..."
174+msgstr ""
175+
176+#: qml/Panel/ActiveCallHint.qml:90
177+msgid "Conference"
178+msgstr "Συνδιάσκεψη"
179+
172#: qml/Panel/Indicators/MenuItemFactory.qml:583
180#: qml/Panel/Indicators/MenuItemFactory.qml:583
173msgid "In queue…"
181msgid "In queue…"
174msgstr ""
182msgstr ""
175
183
176#: qml/Panel/Indicators/MenuItemFactory.qml:587
184#: qml/Panel/Indicators/MenuItemFactory.qml:587
177msgid "Downloading"
185msgid "Downloading"
178−msgstr ""
186+msgstr "Λήψη σε εξέλιξη"
179
187
180#: qml/Panel/Indicators/MenuItemFactory.qml:589
188#: qml/Panel/Indicators/MenuItemFactory.qml:589
181msgid "Paused, tap to resume"
189msgid "Paused, tap to resume"
182−msgstr ""
190+msgstr "Σταματημένο, αγγίξτε για συνέχιση"
183
191
184#: qml/Panel/Indicators/MenuItemFactory.qml:591
192#: qml/Panel/Indicators/MenuItemFactory.qml:591
185msgid "Canceled"
193msgid "Canceled"
186−msgstr ""
194+msgstr "Ακυρώθηκε"
187
195
188#: qml/Panel/Indicators/MenuItemFactory.qml:593
196#: qml/Panel/Indicators/MenuItemFactory.qml:593
189msgid "Finished"
197msgid "Finished"
190−msgstr ""
198+msgstr "Ολοκληρώθηκε"
191
199
192#: qml/Panel/Indicators/MenuItemFactory.qml:595
200#: qml/Panel/Indicators/MenuItemFactory.qml:595
193msgid "Failed, tap to retry"
201msgid "Failed, tap to retry"
po/en_AU.po+20−12
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11−"PO-Revision-Date: 2014-07-18 10:38+0000\n"
11+"PO-Revision-Date: 2014-07-27 12:14+0000\n"
12"Last-Translator: Jared Norris <jarednorris@ubuntu.com>\n"
12"Last-Translator: Jared Norris <jarednorris@ubuntu.com>\n"
13"Language-Team: English (Australia) <en_AU@li.org>\n"
13"Language-Team: English (Australia) <en_AU@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-19 06:19+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-28 06:44+0000\n"
18−"X-Generator: Launchpad (build 17114)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -82,10 +82,6 @@ msgstr "Emergency Call"
82msgid "OK"
82msgid "OK"
83msgstr "OK"
83msgstr "OK"
84
84
85−#: qml/Components/PageHeader.qml:366
86−msgid "Recent searches"
87−msgstr "Recent searches"
88−
89#: qml/Components/PassphraseLockscreen.qml:60
85#: qml/Components/PassphraseLockscreen.qml:60
90#, qt-format
86#, qt-format
91msgid "Hello %1"
87msgid "Hello %1"
@@ -107,7 +103,7 @@ msgstr "DONE"
107msgid "See more"
103msgid "See more"
108msgstr "See more"
104msgstr "See more"
109
105
110−#: qml/Components/SeeMore.qml:58
106+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
111msgid "See less"
107msgid "See less"
112msgstr "See less"
108msgstr "See less"
113
109
@@ -115,6 +111,10 @@ msgstr "See less"
115msgid "Recent"
111msgid "Recent"
116msgstr "Recent"
112msgstr "Recent"
117
113
114+#: qml/Dash/GenericScopeView.qml:330
115+msgid "See all"
116+msgstr "See all"
117+
118#: qml/Dash/Previews/PreviewActionCombo.qml:34
118#: qml/Dash/Previews/PreviewActionCombo.qml:34
119msgid "More..."
119msgid "More..."
120msgstr "More..."
120msgstr "More..."
@@ -123,15 +123,15 @@ msgstr "More..."
123msgid "Less..."
123msgid "Less..."
124msgstr "Less..."
124msgstr "Less..."
125
125
126−#: qml/Dash/Previews/PreviewRatingInput.qml:82
126+#: qml/Dash/Previews/PreviewRatingInput.qml:81
127msgid "Rate this"
127msgid "Rate this"
128msgstr "Rate this"
128msgstr "Rate this"
129
129
130−#: qml/Dash/Previews/PreviewRatingInput.qml:128
130+#: qml/Dash/Previews/PreviewRatingInput.qml:126
131msgid "Add a review"
131msgid "Add a review"
132msgstr "Add a review"
132msgstr "Add a review"
133
133
134−#: qml/Dash/Previews/PreviewRatingInput.qml:168
134+#: qml/Dash/Previews/PreviewRatingInput.qml:166
135msgid "Send"
135msgid "Send"
136msgstr "Send"
136msgstr "Send"
137
137
@@ -167,6 +167,14 @@ msgstr "Show password"
167msgid "Please enter SIM PIN"
167msgid "Please enter SIM PIN"
168msgstr "Please enter SIM PIN"
168msgstr "Please enter SIM PIN"
169
169
170+#: qml/Panel/ActiveCallHint.qml:77
171+msgid "Tap to return to call..."
172+msgstr "Tap to return to call..."
173+
174+#: qml/Panel/ActiveCallHint.qml:90
175+msgid "Conference"
176+msgstr "Conference"
177+
170#: qml/Panel/Indicators/MenuItemFactory.qml:583
178#: qml/Panel/Indicators/MenuItemFactory.qml:583
171msgid "In queue…"
179msgid "In queue…"
172msgstr "In queue…"
180msgstr "In queue…"
po/en_GB.po+20−12
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11−"PO-Revision-Date: 2014-07-10 10:59+0000\n"
11+"PO-Revision-Date: 2014-07-27 14:09+0000\n"
12"Last-Translator: Alan Pope ㋛ <alan@ubuntu.com>\n"
12"Last-Translator: Alan Pope ㋛ <alan@ubuntu.com>\n"
13"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
13"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-11 06:15+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-28 06:44+0000\n"
18−"X-Generator: Launchpad (build 17111)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -82,10 +82,6 @@ msgstr "Emergency Call"
82msgid "OK"
82msgid "OK"
83msgstr "OK"
83msgstr "OK"
84
84
85−#: qml/Components/PageHeader.qml:366
86−msgid "Recent searches"
87−msgstr "Recent searches"
88−
89#: qml/Components/PassphraseLockscreen.qml:60
85#: qml/Components/PassphraseLockscreen.qml:60
90#, qt-format
86#, qt-format
91msgid "Hello %1"
87msgid "Hello %1"
@@ -107,7 +103,7 @@ msgstr "DONE"
107msgid "See more"
103msgid "See more"
108msgstr "See more"
104msgstr "See more"
109
105
110−#: qml/Components/SeeMore.qml:58
106+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
111msgid "See less"
107msgid "See less"
112msgstr "See less"
108msgstr "See less"
113
109
@@ -115,6 +111,10 @@ msgstr "See less"
115msgid "Recent"
111msgid "Recent"
116msgstr "Recent"
112msgstr "Recent"
117
113
114+#: qml/Dash/GenericScopeView.qml:330
115+msgid "See all"
116+msgstr "See all"
117+
118#: qml/Dash/Previews/PreviewActionCombo.qml:34
118#: qml/Dash/Previews/PreviewActionCombo.qml:34
119msgid "More..."
119msgid "More..."
120msgstr "More..."
120msgstr "More..."
@@ -123,15 +123,15 @@ msgstr "More..."
123msgid "Less..."
123msgid "Less..."
124msgstr "Less..."
124msgstr "Less..."
125
125
126−#: qml/Dash/Previews/PreviewRatingInput.qml:82
126+#: qml/Dash/Previews/PreviewRatingInput.qml:81
127msgid "Rate this"
127msgid "Rate this"
128msgstr "Rate this"
128msgstr "Rate this"
129
129
130−#: qml/Dash/Previews/PreviewRatingInput.qml:128
130+#: qml/Dash/Previews/PreviewRatingInput.qml:126
131msgid "Add a review"
131msgid "Add a review"
132msgstr "Add a review"
132msgstr "Add a review"
133
133
134−#: qml/Dash/Previews/PreviewRatingInput.qml:168
134+#: qml/Dash/Previews/PreviewRatingInput.qml:166
135msgid "Send"
135msgid "Send"
136msgstr "Send"
136msgstr "Send"
137
137
@@ -167,6 +167,14 @@ msgstr "Show password"
167msgid "Please enter SIM PIN"
167msgid "Please enter SIM PIN"
168msgstr "Please enter SIM PIN"
168msgstr "Please enter SIM PIN"
169
169
170+#: qml/Panel/ActiveCallHint.qml:77
171+msgid "Tap to return to call..."
172+msgstr "Tap to return to call..."
173+
174+#: qml/Panel/ActiveCallHint.qml:90
175+msgid "Conference"
176+msgstr "Conference"
177+
170#: qml/Panel/Indicators/MenuItemFactory.qml:583
178#: qml/Panel/Indicators/MenuItemFactory.qml:583
171msgid "In queue…"
179msgid "In queue…"
172msgstr "In queue…"
180msgstr "In queue…"
po/eo.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2013-06-26 22:35+0000\n"
11"PO-Revision-Date: 2013-06-26 22:35+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Esperanto <eo@li.org>\n"
13"Language-Team: Esperanto <eo@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:16+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -80,10 +80,6 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr ""
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr ""
105msgid "See more"
101msgid "See more"
106msgstr ""
102msgstr ""
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr ""
106msgstr ""
111
107
@@ -113,6 +109,10 @@ msgstr ""
113msgid "Recent"
109msgid "Recent"
114msgstr ""
110msgstr ""
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr ""
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr ""
118msgstr ""
@@ -121,15 +121,15 @@ msgstr ""
121msgid "Less..."
121msgid "Less..."
122msgstr ""
122msgstr ""
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr ""
126msgstr ""
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr ""
130msgstr ""
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr ""
134msgstr ""
135
135
@@ -165,6 +165,14 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr ""
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr ""
178msgstr ""
po/es.po+21−13
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11−"PO-Revision-Date: 2014-07-12 05:24+0000\n"
11+"PO-Revision-Date: 2014-07-26 06:22+0000\n"
12−"Last-Translator: Adolfo Jayme <fitoschido@gmail.com>\n"
12+"Last-Translator: Paco Molinero <paco@byasl.com>\n"
13"Language-Team: Spanish <es@li.org>\n"
13"Language-Team: Spanish <es@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-13 06:33+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-27 06:35+0000\n"
18−"X-Generator: Launchpad (build 17111)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -85,10 +85,6 @@ msgstr "Llamada de emergencia"
85msgid "OK"
85msgid "OK"
86msgstr "Aceptar"
86msgstr "Aceptar"
87
87
88−#: qml/Components/PageHeader.qml:366
89−msgid "Recent searches"
90−msgstr "Búsquedas recientes"
91−
92#: qml/Components/PassphraseLockscreen.qml:60
88#: qml/Components/PassphraseLockscreen.qml:60
93#, qt-format
89#, qt-format
94msgid "Hello %1"
90msgid "Hello %1"
@@ -110,7 +106,7 @@ msgstr "HECHO"
110msgid "See more"
106msgid "See more"
111msgstr "Ver más"
107msgstr "Ver más"
112
108
113−#: qml/Components/SeeMore.qml:58
109+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
114msgid "See less"
110msgid "See less"
115msgstr "Ver menos"
111msgstr "Ver menos"
116
112
@@ -118,6 +114,10 @@ msgstr "Ver menos"
118msgid "Recent"
114msgid "Recent"
119msgstr "Recientes"
115msgstr "Recientes"
120
116
117+#: qml/Dash/GenericScopeView.qml:330
118+msgid "See all"
119+msgstr "Ver todo"
120+
121#: qml/Dash/Previews/PreviewActionCombo.qml:34
121#: qml/Dash/Previews/PreviewActionCombo.qml:34
122msgid "More..."
122msgid "More..."
123msgstr "Más…"
123msgstr "Más…"
@@ -126,15 +126,15 @@ msgstr "Más…"
126msgid "Less..."
126msgid "Less..."
127msgstr "Menos…"
127msgstr "Menos…"
128
128
129−#: qml/Dash/Previews/PreviewRatingInput.qml:82
129+#: qml/Dash/Previews/PreviewRatingInput.qml:81
130msgid "Rate this"
130msgid "Rate this"
131msgstr "Valorar esto"
131msgstr "Valorar esto"
132
132
133−#: qml/Dash/Previews/PreviewRatingInput.qml:128
133+#: qml/Dash/Previews/PreviewRatingInput.qml:126
134msgid "Add a review"
134msgid "Add a review"
135msgstr "Añadir una reseña"
135msgstr "Añadir una reseña"
136
136
137−#: qml/Dash/Previews/PreviewRatingInput.qml:168
137+#: qml/Dash/Previews/PreviewRatingInput.qml:166
138msgid "Send"
138msgid "Send"
139msgstr "Enviar"
139msgstr "Enviar"
140
140
@@ -170,6 +170,14 @@ msgstr "Mostrar contraseña"
170msgid "Please enter SIM PIN"
170msgid "Please enter SIM PIN"
171msgstr "Escriba el PIN de la SIM"
171msgstr "Escriba el PIN de la SIM"
172
172
173+#: qml/Panel/ActiveCallHint.qml:77
174+msgid "Tap to return to call..."
175+msgstr "Toque para volver a llamar..."
176+
177+#: qml/Panel/ActiveCallHint.qml:90
178+msgid "Conference"
179+msgstr "Conferencia"
180+
173#: qml/Panel/Indicators/MenuItemFactory.qml:583
181#: qml/Panel/Indicators/MenuItemFactory.qml:583
174msgid "In queue…"
182msgid "In queue…"
175msgstr "En espera…"
183msgstr "En espera…"
po/eu.po+20−12
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11−"PO-Revision-Date: 2014-07-16 18:11+0000\n"
11+"PO-Revision-Date: 2014-07-25 12:38+0000\n"
12"Last-Translator: Ibai Oihanguren Sala <Unknown>\n"
12"Last-Translator: Ibai Oihanguren Sala <Unknown>\n"
13"Language-Team: Basque <eu@li.org>\n"
13"Language-Team: Basque <eu@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-17 06:38+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:16+0000\n"
18−"X-Generator: Launchpad (build 17114)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -84,10 +84,6 @@ msgstr "Larrialdi-deia"
84msgid "OK"
84msgid "OK"
85msgstr "Ados"
85msgstr "Ados"
86
86
87−#: qml/Components/PageHeader.qml:366
88−msgid "Recent searches"
89−msgstr "Azken bilaketak"
90−
91#: qml/Components/PassphraseLockscreen.qml:60
87#: qml/Components/PassphraseLockscreen.qml:60
92#, qt-format
88#, qt-format
93msgid "Hello %1"
89msgid "Hello %1"
@@ -109,7 +105,7 @@ msgstr "EGINDA"
109msgid "See more"
105msgid "See more"
110msgstr "Ikusi gehiago"
106msgstr "Ikusi gehiago"
111
107
112−#: qml/Components/SeeMore.qml:58
108+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
113msgid "See less"
109msgid "See less"
114msgstr "Ikusi gutxiago"
110msgstr "Ikusi gutxiago"
115
111
@@ -117,6 +113,10 @@ msgstr "Ikusi gutxiago"
117msgid "Recent"
113msgid "Recent"
118msgstr "Azkenak"
114msgstr "Azkenak"
119
115
116+#: qml/Dash/GenericScopeView.qml:330
117+msgid "See all"
118+msgstr "Ikusi guztiak"
119+
120#: qml/Dash/Previews/PreviewActionCombo.qml:34
120#: qml/Dash/Previews/PreviewActionCombo.qml:34
121msgid "More..."
121msgid "More..."
122msgstr "Gehiago..."
122msgstr "Gehiago..."
@@ -125,15 +125,15 @@ msgstr "Gehiago..."
125msgid "Less..."
125msgid "Less..."
126msgstr "Gutxiago..."
126msgstr "Gutxiago..."
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:82
128+#: qml/Dash/Previews/PreviewRatingInput.qml:81
129msgid "Rate this"
129msgid "Rate this"
130msgstr "Puntuatu hau"
130msgstr "Puntuatu hau"
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:128
132+#: qml/Dash/Previews/PreviewRatingInput.qml:126
133msgid "Add a review"
133msgid "Add a review"
134msgstr "Gehitu kritika"
134msgstr "Gehitu kritika"
135
135
136−#: qml/Dash/Previews/PreviewRatingInput.qml:168
136+#: qml/Dash/Previews/PreviewRatingInput.qml:166
137msgid "Send"
137msgid "Send"
138msgstr "Bidali"
138msgstr "Bidali"
139
139
@@ -169,6 +169,14 @@ msgstr "Erakutsi pasahitza"
169msgid "Please enter SIM PIN"
169msgid "Please enter SIM PIN"
170msgstr "Sartu SIMaren PINa"
170msgstr "Sartu SIMaren PINa"
171
171
172+#: qml/Panel/ActiveCallHint.qml:77
173+msgid "Tap to return to call..."
174+msgstr "Sakatu deia itzultzeko..."
175+
176+#: qml/Panel/ActiveCallHint.qml:90
177+msgid "Conference"
178+msgstr "Konferentzia"
179+
172#: qml/Panel/Indicators/MenuItemFactory.qml:583
180#: qml/Panel/Indicators/MenuItemFactory.qml:583
173msgid "In queue…"
181msgid "In queue…"
174msgstr "Ilaran..."
182msgstr "Ilaran..."
po/fa.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2013-10-31 19:02+0000\n"
11"PO-Revision-Date: 2013-10-31 19:02+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Persian <fa@li.org>\n"
13"Language-Team: Persian <fa@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:17+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -80,10 +80,6 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr ""
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr ""
105msgid "See more"
101msgid "See more"
106msgstr ""
102msgstr ""
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr ""
106msgstr ""
111
107
@@ -113,6 +109,10 @@ msgstr ""
113msgid "Recent"
109msgid "Recent"
114msgstr ""
110msgstr ""
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr ""
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr ""
118msgstr ""
@@ -121,15 +121,15 @@ msgstr ""
121msgid "Less..."
121msgid "Less..."
122msgstr ""
122msgstr ""
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr ""
126msgstr ""
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr ""
130msgstr ""
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr ""
134msgstr ""
135
135
@@ -165,6 +165,14 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr ""
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr ""
178msgstr ""
po/fi.po+20−12
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11−"PO-Revision-Date: 2014-07-09 17:26+0000\n"
11+"PO-Revision-Date: 2014-07-25 16:07+0000\n"
12"Last-Translator: Jiri Grönroos <Unknown>\n"
12"Last-Translator: Jiri Grönroos <Unknown>\n"
13"Language-Team: Finnish <fi@li.org>\n"
13"Language-Team: Finnish <fi@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-10 07:29+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:16+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -82,10 +82,6 @@ msgstr "Hätäpuhelu"
82msgid "OK"
82msgid "OK"
83msgstr "OK"
83msgstr "OK"
84
84
85−#: qml/Components/PageHeader.qml:366
86−msgid "Recent searches"
87−msgstr "Viimeisimmät haut"
88−
89#: qml/Components/PassphraseLockscreen.qml:60
85#: qml/Components/PassphraseLockscreen.qml:60
90#, qt-format
86#, qt-format
91msgid "Hello %1"
87msgid "Hello %1"
@@ -107,7 +103,7 @@ msgstr "VALMIS"
107msgid "See more"
103msgid "See more"
108msgstr "Näytä lisää"
104msgstr "Näytä lisää"
109
105
110−#: qml/Components/SeeMore.qml:58
106+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
111msgid "See less"
107msgid "See less"
112msgstr "Näytä vähemmän"
108msgstr "Näytä vähemmän"
113
109
@@ -115,6 +111,10 @@ msgstr "Näytä vähemmän"
115msgid "Recent"
111msgid "Recent"
116msgstr "Viimeisimmät"
112msgstr "Viimeisimmät"
117
113
114+#: qml/Dash/GenericScopeView.qml:330
115+msgid "See all"
116+msgstr "Näytä kaikki"
117+
118#: qml/Dash/Previews/PreviewActionCombo.qml:34
118#: qml/Dash/Previews/PreviewActionCombo.qml:34
119msgid "More..."
119msgid "More..."
120msgstr "Lisää..."
120msgstr "Lisää..."
@@ -123,15 +123,15 @@ msgstr "Lisää..."
123msgid "Less..."
123msgid "Less..."
124msgstr "Vähemmän..."
124msgstr "Vähemmän..."
125
125
126−#: qml/Dash/Previews/PreviewRatingInput.qml:82
126+#: qml/Dash/Previews/PreviewRatingInput.qml:81
127msgid "Rate this"
127msgid "Rate this"
128msgstr "Arvioi tämä"
128msgstr "Arvioi tämä"
129
129
130−#: qml/Dash/Previews/PreviewRatingInput.qml:128
130+#: qml/Dash/Previews/PreviewRatingInput.qml:126
131msgid "Add a review"
131msgid "Add a review"
132msgstr "Lisää arvostelu"
132msgstr "Lisää arvostelu"
133
133
134−#: qml/Dash/Previews/PreviewRatingInput.qml:168
134+#: qml/Dash/Previews/PreviewRatingInput.qml:166
135msgid "Send"
135msgid "Send"
136msgstr "Lähetä"
136msgstr "Lähetä"
137
137
@@ -167,6 +167,14 @@ msgstr "Näytä salasana"
167msgid "Please enter SIM PIN"
167msgid "Please enter SIM PIN"
168msgstr "Anna SIM-kortin PIN-koodi"
168msgstr "Anna SIM-kortin PIN-koodi"
169
169
170+#: qml/Panel/ActiveCallHint.qml:77
171+msgid "Tap to return to call..."
172+msgstr "Napauta palataksesi puheluun..."
173+
174+#: qml/Panel/ActiveCallHint.qml:90
175+msgid "Conference"
176+msgstr "Ryhmäpuhelu"
177+
170#: qml/Panel/Indicators/MenuItemFactory.qml:583
178#: qml/Panel/Indicators/MenuItemFactory.qml:583
171msgid "In queue…"
179msgid "In queue…"
172msgstr "Jonossa…"
180msgstr "Jonossa…"
po/fo.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2014-01-14 20:08+0000\n"
11"PO-Revision-Date: 2014-01-14 20:08+0000\n"
12"Last-Translator: Jógvan Olsen <jeggy@jebster.net>\n"
12"Last-Translator: Jógvan Olsen <jeggy@jebster.net>\n"
13"Language-Team: Faroese <fo@li.org>\n"
13"Language-Team: Faroese <fo@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:16+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -80,10 +80,6 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr ""
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr ""
105msgid "See more"
101msgid "See more"
106msgstr ""
102msgstr ""
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr ""
106msgstr ""
111
107
@@ -113,6 +109,10 @@ msgstr ""
113msgid "Recent"
109msgid "Recent"
114msgstr ""
110msgstr ""
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr ""
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr ""
118msgstr ""
@@ -121,15 +121,15 @@ msgstr ""
121msgid "Less..."
121msgid "Less..."
122msgstr ""
122msgstr ""
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr ""
126msgstr ""
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr ""
130msgstr ""
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr ""
134msgstr ""
135
135
@@ -165,6 +165,14 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr ""
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr ""
178msgstr ""
po/fr.po+21−13
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11−"PO-Revision-Date: 2014-07-18 18:31+0000\n"
11+"PO-Revision-Date: 2014-07-26 20:52+0000\n"
12−"Last-Translator: Nicolas Delvaux <Unknown>\n"
12+"Last-Translator: Anne <anneonyme017@gmail.com>\n"
13"Language-Team: French <fr@li.org>\n"
13"Language-Team: French <fr@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-19 06:19+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-27 06:35+0000\n"
18−"X-Generator: Launchpad (build 17114)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -89,10 +89,6 @@ msgstr "Appel d'urgence"
89msgid "OK"
89msgid "OK"
90msgstr "OK"
90msgstr "OK"
91
91
92−#: qml/Components/PageHeader.qml:366
93−msgid "Recent searches"
94−msgstr "Recherches récentes"
95−
96#: qml/Components/PassphraseLockscreen.qml:60
92#: qml/Components/PassphraseLockscreen.qml:60
97#, qt-format
93#, qt-format
98msgid "Hello %1"
94msgid "Hello %1"
@@ -114,7 +110,7 @@ msgstr "VALIDER"
114msgid "See more"
110msgid "See more"
115msgstr "Voir plus"
111msgstr "Voir plus"
116
112
117−#: qml/Components/SeeMore.qml:58
113+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
118msgid "See less"
114msgid "See less"
119msgstr "Voir moins"
115msgstr "Voir moins"
120
116
@@ -122,6 +118,10 @@ msgstr "Voir moins"
122msgid "Recent"
118msgid "Recent"
123msgstr "Récent"
119msgstr "Récent"
124
120
121+#: qml/Dash/GenericScopeView.qml:330
122+msgid "See all"
123+msgstr "Tout voir"
124+
125#: qml/Dash/Previews/PreviewActionCombo.qml:34
125#: qml/Dash/Previews/PreviewActionCombo.qml:34
126msgid "More..."
126msgid "More..."
127msgstr "Plus..."
127msgstr "Plus..."
@@ -130,15 +130,15 @@ msgstr "Plus..."
130msgid "Less..."
130msgid "Less..."
131msgstr "Moins..."
131msgstr "Moins..."
132
132
133−#: qml/Dash/Previews/PreviewRatingInput.qml:82
133+#: qml/Dash/Previews/PreviewRatingInput.qml:81
134msgid "Rate this"
134msgid "Rate this"
135msgstr "Evaluez ceci"
135msgstr "Evaluez ceci"
136
136
137−#: qml/Dash/Previews/PreviewRatingInput.qml:128
137+#: qml/Dash/Previews/PreviewRatingInput.qml:126
138msgid "Add a review"
138msgid "Add a review"
139msgstr "Ajouter un avis"
139msgstr "Ajouter un avis"
140
140
141−#: qml/Dash/Previews/PreviewRatingInput.qml:168
141+#: qml/Dash/Previews/PreviewRatingInput.qml:166
142msgid "Send"
142msgid "Send"
143msgstr "Envoyer"
143msgstr "Envoyer"
144
144
@@ -174,6 +174,14 @@ msgstr "Afficher le mot de passe"
174msgid "Please enter SIM PIN"
174msgid "Please enter SIM PIN"
175msgstr "Entrez le code PIN"
175msgstr "Entrez le code PIN"
176
176
177+#: qml/Panel/ActiveCallHint.qml:77
178+msgid "Tap to return to call..."
179+msgstr "Appuyez pour revenir à l'appel…"
180+
181+#: qml/Panel/ActiveCallHint.qml:90
182+msgid "Conference"
183+msgstr "Conférence"
184+
177#: qml/Panel/Indicators/MenuItemFactory.qml:583
185#: qml/Panel/Indicators/MenuItemFactory.qml:583
178msgid "In queue…"
186msgid "In queue…"
179msgstr "Dans la file d'attente..."
187msgstr "Dans la file d'attente..."
po/gd.po+21−13
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11−"PO-Revision-Date: 2014-07-16 14:48+0000\n"
11+"PO-Revision-Date: 2014-07-25 22:02+0000\n"
12"Last-Translator: GunChleoc <Unknown>\n"
12"Last-Translator: GunChleoc <Unknown>\n"
13"Language-Team: Fòram na Gàidhlig http://www.foramnagaidhlig.net\n"
13"Language-Team: Fòram na Gàidhlig http://www.foramnagaidhlig.net\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-17 06:38+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:16+0000\n"
18−"X-Generator: Launchpad (build 17114)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19"Language: gd\n"
19"Language: gd\n"
20
20
21#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:43
@@ -87,11 +87,7 @@ msgstr "Gairm èiginn"
87
87
88#: qml/Components/Lockscreen.qml:231
88#: qml/Components/Lockscreen.qml:231
89msgid "OK"
89msgid "OK"
90−msgstr "Ceart ma-hà"
90+msgstr "Ceart ma-thà"
91−
92−#: qml/Components/PageHeader.qml:366
93−msgid "Recent searches"
94−msgstr "Na lorg thu o chionn goirid"
95
91
96#: qml/Components/PassphraseLockscreen.qml:60
92#: qml/Components/PassphraseLockscreen.qml:60
97#, qt-format
93#, qt-format
@@ -114,7 +110,7 @@ msgstr "DÈANTA"
114msgid "See more"
110msgid "See more"
115msgstr "Seall barrachd"
111msgstr "Seall barrachd"
116
112
117−#: qml/Components/SeeMore.qml:58
113+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
118msgid "See less"
114msgid "See less"
119msgstr "Seall nas lugha"
115msgstr "Seall nas lugha"
120
116
@@ -122,6 +118,10 @@ msgstr "Seall nas lugha"
122msgid "Recent"
118msgid "Recent"
123msgstr "O chionn goirid"
119msgstr "O chionn goirid"
124
120
121+#: qml/Dash/GenericScopeView.qml:330
122+msgid "See all"
123+msgstr "Seall na h-uile"
124+
125#: qml/Dash/Previews/PreviewActionCombo.qml:34
125#: qml/Dash/Previews/PreviewActionCombo.qml:34
126msgid "More..."
126msgid "More..."
127msgstr "Barrachd..."
127msgstr "Barrachd..."
@@ -130,15 +130,15 @@ msgstr "Barrachd..."
130msgid "Less..."
130msgid "Less..."
131msgstr "Nas lugha..."
131msgstr "Nas lugha..."
132
132
133−#: qml/Dash/Previews/PreviewRatingInput.qml:82
133+#: qml/Dash/Previews/PreviewRatingInput.qml:81
134msgid "Rate this"
134msgid "Rate this"
135msgstr "Rangaich seo"
135msgstr "Rangaich seo"
136
136
137−#: qml/Dash/Previews/PreviewRatingInput.qml:128
137+#: qml/Dash/Previews/PreviewRatingInput.qml:126
138msgid "Add a review"
138msgid "Add a review"
139msgstr "Cuir lèirmheas ris"
139msgstr "Cuir lèirmheas ris"
140
140
141−#: qml/Dash/Previews/PreviewRatingInput.qml:168
141+#: qml/Dash/Previews/PreviewRatingInput.qml:166
142msgid "Send"
142msgid "Send"
143msgstr "Cuir"
143msgstr "Cuir"
144
144
@@ -174,6 +174,14 @@ msgstr "Seall am facal-faire"
174msgid "Please enter SIM PIN"
174msgid "Please enter SIM PIN"
175msgstr "Cuir a-steach SIM PIN"
175msgstr "Cuir a-steach SIM PIN"
176
176
177+#: qml/Panel/ActiveCallHint.qml:77
178+msgid "Tap to return to call..."
179+msgstr "Gnog gus tilleadh dhan ghairm..."
180+
181+#: qml/Panel/ActiveCallHint.qml:90
182+msgid "Conference"
183+msgstr "Gairm co-labhairt"
184+
177#: qml/Panel/Indicators/MenuItemFactory.qml:583
185#: qml/Panel/Indicators/MenuItemFactory.qml:583
178msgid "In queue…"
186msgid "In queue…"
179msgstr "Air a' chiudha…"
187msgstr "Air a' chiudha…"
po/gl.po+20−12
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11−"PO-Revision-Date: 2014-07-21 16:08+0000\n"
11+"PO-Revision-Date: 2014-07-25 17:22+0000\n"
12"Last-Translator: Marcos Lans <Unknown>\n"
12"Last-Translator: Marcos Lans <Unknown>\n"
13"Language-Team: Galician <gl@li.org>\n"
13"Language-Team: Galician <gl@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-22 07:17+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:16+0000\n"
18−"X-Generator: Launchpad (build 17114)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -84,10 +84,6 @@ msgstr "Chamada de emerxencia"
84msgid "OK"
84msgid "OK"
85msgstr "Aceptar"
85msgstr "Aceptar"
86
86
87−#: qml/Components/PageHeader.qml:366
88−msgid "Recent searches"
89−msgstr "Buscas recentes"
90−
91#: qml/Components/PassphraseLockscreen.qml:60
87#: qml/Components/PassphraseLockscreen.qml:60
92#, qt-format
88#, qt-format
93msgid "Hello %1"
89msgid "Hello %1"
@@ -109,7 +105,7 @@ msgstr "FEITO"
109msgid "See more"
105msgid "See more"
110msgstr "Ver máis"
106msgstr "Ver máis"
111
107
112−#: qml/Components/SeeMore.qml:58
108+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
113msgid "See less"
109msgid "See less"
114msgstr "Ver menos"
110msgstr "Ver menos"
115
111
@@ -117,6 +113,10 @@ msgstr "Ver menos"
117msgid "Recent"
113msgid "Recent"
118msgstr "Recentes"
114msgstr "Recentes"
119
115
116+#: qml/Dash/GenericScopeView.qml:330
117+msgid "See all"
118+msgstr "Ver todo"
119+
120#: qml/Dash/Previews/PreviewActionCombo.qml:34
120#: qml/Dash/Previews/PreviewActionCombo.qml:34
121msgid "More..."
121msgid "More..."
122msgstr "Máis…"
122msgstr "Máis…"
@@ -125,15 +125,15 @@ msgstr "Máis…"
125msgid "Less..."
125msgid "Less..."
126msgstr "Menos..."
126msgstr "Menos..."
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:82
128+#: qml/Dash/Previews/PreviewRatingInput.qml:81
129msgid "Rate this"
129msgid "Rate this"
130msgstr "Valore isto"
130msgstr "Valore isto"
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:128
132+#: qml/Dash/Previews/PreviewRatingInput.qml:126
133msgid "Add a review"
133msgid "Add a review"
134msgstr "Engadir unha opinión"
134msgstr "Engadir unha opinión"
135
135
136−#: qml/Dash/Previews/PreviewRatingInput.qml:168
136+#: qml/Dash/Previews/PreviewRatingInput.qml:166
137msgid "Send"
137msgid "Send"
138msgstr "Enviar"
138msgstr "Enviar"
139
139
@@ -169,6 +169,14 @@ msgstr "Mostrar contrasinal"
169msgid "Please enter SIM PIN"
169msgid "Please enter SIM PIN"
170msgstr "Introduza o PIN da SIM"
170msgstr "Introduza o PIN da SIM"
171
171
172+#: qml/Panel/ActiveCallHint.qml:77
173+msgid "Tap to return to call..."
174+msgstr "Toque para volver a chamar..."
175+
176+#: qml/Panel/ActiveCallHint.qml:90
177+msgid "Conference"
178+msgstr "Conferencia"
179+
172#: qml/Panel/Indicators/MenuItemFactory.qml:583
180#: qml/Panel/Indicators/MenuItemFactory.qml:583
173msgid "In queue…"
181msgid "In queue…"
174msgstr "Na cola..."
182msgstr "Na cola..."
po/he.po+20−12
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11−"PO-Revision-Date: 2014-07-15 13:20+0000\n"
11+"PO-Revision-Date: 2014-07-25 16:26+0000\n"
12"Last-Translator: Yaron <sh.yaron@gmail.com>\n"
12"Last-Translator: Yaron <sh.yaron@gmail.com>\n"
13"Language-Team: Hebrew <he@li.org>\n"
13"Language-Team: Hebrew <he@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-16 07:27+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:16+0000\n"
18−"X-Generator: Launchpad (build 17112)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -82,10 +82,6 @@ msgstr "שיחת חירום"
82msgid "OK"
82msgid "OK"
83msgstr "אישור"
83msgstr "אישור"
84
84
85−#: qml/Components/PageHeader.qml:366
86−msgid "Recent searches"
87−msgstr "חיפושים אחרונים"
88−
89#: qml/Components/PassphraseLockscreen.qml:60
85#: qml/Components/PassphraseLockscreen.qml:60
90#, qt-format
86#, qt-format
91msgid "Hello %1"
87msgid "Hello %1"
@@ -107,7 +103,7 @@ msgstr "בוצע"
107msgid "See more"
103msgid "See more"
108msgstr "לראות עוד"
104msgstr "לראות עוד"
109
105
110−#: qml/Components/SeeMore.qml:58
106+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
111msgid "See less"
107msgid "See less"
112msgstr "לראות פחות"
108msgstr "לראות פחות"
113
109
@@ -115,6 +111,10 @@ msgstr "לראות פחות"
115msgid "Recent"
111msgid "Recent"
116msgstr "בשימוש לאחרונה"
112msgstr "בשימוש לאחרונה"
117
113
114+#: qml/Dash/GenericScopeView.qml:330
115+msgid "See all"
116+msgstr "להציג הכול"
117+
118#: qml/Dash/Previews/PreviewActionCombo.qml:34
118#: qml/Dash/Previews/PreviewActionCombo.qml:34
119msgid "More..."
119msgid "More..."
120msgstr "עוד…"
120msgstr "עוד…"
@@ -123,15 +123,15 @@ msgstr "עוד…"
123msgid "Less..."
123msgid "Less..."
124msgstr "פחות…"
124msgstr "פחות…"
125
125
126−#: qml/Dash/Previews/PreviewRatingInput.qml:82
126+#: qml/Dash/Previews/PreviewRatingInput.qml:81
127msgid "Rate this"
127msgid "Rate this"
128msgstr "דירוג היישום"
128msgstr "דירוג היישום"
129
129
130−#: qml/Dash/Previews/PreviewRatingInput.qml:128
130+#: qml/Dash/Previews/PreviewRatingInput.qml:126
131msgid "Add a review"
131msgid "Add a review"
132msgstr "הוספת סקירה"
132msgstr "הוספת סקירה"
133
133
134−#: qml/Dash/Previews/PreviewRatingInput.qml:168
134+#: qml/Dash/Previews/PreviewRatingInput.qml:166
135msgid "Send"
135msgid "Send"
136msgstr "שליחה"
136msgstr "שליחה"
137
137
@@ -167,6 +167,14 @@ msgstr "הצגת הססמה"
167msgid "Please enter SIM PIN"
167msgid "Please enter SIM PIN"
168msgstr "נא להזין את קוד ה־<U+200F>SIM"
168msgstr "נא להזין את קוד ה־<U+200F>SIM"
169
169
170+#: qml/Panel/ActiveCallHint.qml:77
171+msgid "Tap to return to call..."
172+msgstr "יש לגעת כדי להחזיר שיחה…"
173+
174+#: qml/Panel/ActiveCallHint.qml:90
175+msgid "Conference"
176+msgstr "ועידה"
177+
170#: qml/Panel/Indicators/MenuItemFactory.qml:583
178#: qml/Panel/Indicators/MenuItemFactory.qml:583
171msgid "In queue…"
179msgid "In queue…"
172msgstr "בתור…"
180msgstr "בתור…"
po/hi.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2014-01-15 01:49+0000\n"
11"PO-Revision-Date: 2014-01-15 01:49+0000\n"
12"Last-Translator: Siddhanathan S. <Unknown>\n"
12"Last-Translator: Siddhanathan S. <Unknown>\n"
13"Language-Team: Hindi <hi@li.org>\n"
13"Language-Team: Hindi <hi@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:16+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -80,10 +80,6 @@ msgstr "आपातकालीन कॉल"
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr "पिछले खोजों"
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr ""
105msgid "See more"
101msgid "See more"
106msgstr ""
102msgstr ""
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr ""
106msgstr ""
111
107
@@ -113,6 +109,10 @@ msgstr ""
113msgid "Recent"
109msgid "Recent"
114msgstr ""
110msgstr ""
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr ""
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr ""
118msgstr ""
@@ -121,15 +121,15 @@ msgstr ""
121msgid "Less..."
121msgid "Less..."
122msgstr ""
122msgstr ""
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr ""
126msgstr ""
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr "समीक्षा दे"
130msgstr "समीक्षा दे"
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr "भेजें"
134msgstr "भेजें"
135
135
@@ -165,6 +165,14 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr ""
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr ""
178msgstr ""
po/hr.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2013-06-27 04:14+0000\n"
11"PO-Revision-Date: 2013-06-27 04:14+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: Croatian <hr@li.org>\n"
13"Language-Team: Croatian <hr@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:17+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -80,10 +80,6 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr "Nedavne pretrage"
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr ""
105msgid "See more"
101msgid "See more"
106msgstr ""
102msgstr ""
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr ""
106msgstr ""
111
107
@@ -113,6 +109,10 @@ msgstr ""
113msgid "Recent"
109msgid "Recent"
114msgstr ""
110msgstr ""
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr ""
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr ""
118msgstr ""
@@ -121,15 +121,15 @@ msgstr ""
121msgid "Less..."
121msgid "Less..."
122msgstr ""
122msgstr ""
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr ""
126msgstr ""
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr ""
130msgstr ""
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr ""
134msgstr ""
135
135
@@ -165,6 +165,14 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr ""
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr ""
178msgstr ""
po/hu.po+29−19
@@ -7,24 +7,24 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11−"PO-Revision-Date: 2014-07-23 10:07+0000\n"
11+"PO-Revision-Date: 2014-07-27 15:04+0000\n"
12−"Last-Translator: Úr Balázs <urbalazs@gmail.com>\n"
12+"Last-Translator: Richard Somlói <ricsipontaz@gmail.com>\n"
13"Language-Team: Hungarian <hu@li.org>\n"
13"Language-Team: Hungarian <hu@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-24 06:32+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-28 06:44+0000\n"
18−"X-Generator: Launchpad (build 17114)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
22msgid "Pin shortcut"
22msgid "Pin shortcut"
23−msgstr ""
23+msgstr "Indító rögzítése"
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26msgid "Unpin shortcut"
26msgid "Unpin shortcut"
27−msgstr ""
27+msgstr "Indító feloldása"
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -73,6 +73,8 @@ msgid ""
73"You have now mastered the edge gestures and can start using the "
73"You have now mastered the edge gestures and can start using the "
74"phone<br><br>Tap on the screen to start"
74"phone<br><br>Tap on the screen to start"
75msgstr ""
75msgstr ""
76+"Elsajátította a gesztusokat, és megkezdheti a telefon "
77+"használatát.<br><br>Koppintson a képernyőre a kezdéshez."
76
78
77#: qml/Components/Lockscreen.qml:214
79#: qml/Components/Lockscreen.qml:214
78msgid "Emergency Call"
80msgid "Emergency Call"
@@ -82,10 +84,6 @@ msgstr "Vészhívás"
82msgid "OK"
84msgid "OK"
83msgstr "OK"
85msgstr "OK"
84
86
85−#: qml/Components/PageHeader.qml:366
86−msgid "Recent searches"
87−msgstr "Legutóbbi keresések"
88−
89#: qml/Components/PassphraseLockscreen.qml:60
87#: qml/Components/PassphraseLockscreen.qml:60
90#, qt-format
88#, qt-format
91msgid "Hello %1"
89msgid "Hello %1"
@@ -105,16 +103,20 @@ msgstr "KÉSZ"
105
103
106#: qml/Components/SeeMore.qml:35
104#: qml/Components/SeeMore.qml:35
107msgid "See more"
105msgid "See more"
108−msgstr ""
106+msgstr "Több"
109
107
110−#: qml/Components/SeeMore.qml:58
108+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
111msgid "See less"
109msgid "See less"
112−msgstr ""
110+msgstr "Kevesebb"
113
111
114#: qml/Dash/DashApps.qml:37
112#: qml/Dash/DashApps.qml:37
115msgid "Recent"
113msgid "Recent"
116msgstr "Legutóbbi"
114msgstr "Legutóbbi"
117
115
116+#: qml/Dash/GenericScopeView.qml:330
117+msgid "See all"
118+msgstr "Összes megtekintése"
119+
118#: qml/Dash/Previews/PreviewActionCombo.qml:34
120#: qml/Dash/Previews/PreviewActionCombo.qml:34
119msgid "More..."
121msgid "More..."
120msgstr "Több…"
122msgstr "Több…"
@@ -123,21 +125,21 @@ msgstr "Több…"
123msgid "Less..."
125msgid "Less..."
124msgstr "Kevesebb…"
126msgstr "Kevesebb…"
125
127
126−#: qml/Dash/Previews/PreviewRatingInput.qml:82
128+#: qml/Dash/Previews/PreviewRatingInput.qml:81
127msgid "Rate this"
129msgid "Rate this"
128msgstr "Osztályzás"
130msgstr "Osztályzás"
129
131
130−#: qml/Dash/Previews/PreviewRatingInput.qml:128
132+#: qml/Dash/Previews/PreviewRatingInput.qml:126
131msgid "Add a review"
133msgid "Add a review"
132msgstr "Értékelés hozzáadása"
134msgstr "Értékelés hozzáadása"
133
135
134−#: qml/Dash/Previews/PreviewRatingInput.qml:168
136+#: qml/Dash/Previews/PreviewRatingInput.qml:166
135msgid "Send"
137msgid "Send"
136msgstr "Küldés"
138msgstr "Küldés"
137
139
138#: qml/Greeter/Greeter.qml:157
140#: qml/Greeter/Greeter.qml:157
139msgid "Swipe to unlock"
141msgid "Swipe to unlock"
140−msgstr ""
142+msgstr "Csúsztasson a feloldáshoz"
141
143
142#: qml/Hud/HudParametrizedActionsPage.qml:132
144#: qml/Hud/HudParametrizedActionsPage.qml:132
143msgid "Confirm"
145msgid "Confirm"
@@ -167,9 +169,17 @@ msgstr "Jelszó megjelenítése"
167msgid "Please enter SIM PIN"
169msgid "Please enter SIM PIN"
168msgstr "Adja meg a SIM PIN kódját"
170msgstr "Adja meg a SIM PIN kódját"
169
171
172+#: qml/Panel/ActiveCallHint.qml:77
173+msgid "Tap to return to call..."
174+msgstr "Érintse meg, hogy visszatérjen a híváshoz..."
175+
176+#: qml/Panel/ActiveCallHint.qml:90
177+msgid "Conference"
178+msgstr "Konferencia"
179+
170#: qml/Panel/Indicators/MenuItemFactory.qml:583
180#: qml/Panel/Indicators/MenuItemFactory.qml:583
171msgid "In queue…"
181msgid "In queue…"
172−msgstr ""
182+msgstr "Sorban…"
173
183
174#: qml/Panel/Indicators/MenuItemFactory.qml:587
184#: qml/Panel/Indicators/MenuItemFactory.qml:587
175msgid "Downloading"
185msgid "Downloading"
po/hy.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2013-06-27 04:43+0000\n"
11"PO-Revision-Date: 2013-06-27 04:43+0000\n"
12"Last-Translator: iAbaS <sosabazyan@yandex.ru>\n"
12"Last-Translator: iAbaS <sosabazyan@yandex.ru>\n"
13"Language-Team: Armenian <hy@li.org>\n"
13"Language-Team: Armenian <hy@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:36+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:16+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -80,10 +80,6 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr "Վերջին որոնումներ"
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr ""
105msgid "See more"
101msgid "See more"
106msgstr ""
102msgstr ""
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr ""
106msgstr ""
111
107
@@ -113,6 +109,10 @@ msgstr ""
113msgid "Recent"
109msgid "Recent"
114msgstr ""
110msgstr ""
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr ""
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr ""
118msgstr ""
@@ -121,15 +121,15 @@ msgstr ""
121msgid "Less..."
121msgid "Less..."
122msgstr ""
122msgstr ""
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr ""
126msgstr ""
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr ""
130msgstr ""
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr ""
134msgstr ""
135
135
@@ -165,6 +165,14 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr ""
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr ""
178msgstr ""
po/id.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2013-06-26 22:35+0000\n"
11"PO-Revision-Date: 2013-06-26 22:35+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Indonesian <id@li.org>\n"
13"Language-Team: Indonesian <id@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:16+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -80,10 +80,6 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr ""
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr ""
105msgid "See more"
101msgid "See more"
106msgstr ""
102msgstr ""
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr ""
106msgstr ""
111
107
@@ -113,6 +109,10 @@ msgstr ""
113msgid "Recent"
109msgid "Recent"
114msgstr ""
110msgstr ""
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr ""
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr ""
118msgstr ""
@@ -121,15 +121,15 @@ msgstr ""
121msgid "Less..."
121msgid "Less..."
122msgstr ""
122msgstr ""
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr ""
126msgstr ""
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr ""
130msgstr ""
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr ""
134msgstr ""
135
135
@@ -165,6 +165,14 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr ""
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr ""
178msgstr ""
po/is.po+19−11
@@ -9,15 +9,15 @@ msgid ""
9msgstr ""
9msgstr ""
10"Project-Id-Version: po_unity8-is\n"
10"Project-Id-Version: po_unity8-is\n"
11"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
11"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
12−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
12+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
13"PO-Revision-Date: 2014-07-23 05:57+0000\n"
13"PO-Revision-Date: 2014-07-23 05:57+0000\n"
14"Last-Translator: Sveinn í Felli <sv1@fellsnet.is>\n"
14"Last-Translator: Sveinn í Felli <sv1@fellsnet.is>\n"
15"Language-Team: Icelandic <translation-team-is@lists.sourceforge.net>\n"
15"Language-Team: Icelandic <translation-team-is@lists.sourceforge.net>\n"
16"MIME-Version: 1.0\n"
16"MIME-Version: 1.0\n"
17"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Type: text/plain; charset=UTF-8\n"
18"Content-Transfer-Encoding: 8bit\n"
18"Content-Transfer-Encoding: 8bit\n"
19−"X-Launchpad-Export-Date: 2014-07-24 06:32+0000\n"
19+"X-Launchpad-Export-Date: 2014-07-26 07:16+0000\n"
20−"X-Generator: Launchpad (build 17114)\n"
20+"X-Generator: Launchpad (build 17131)\n"
21"Language: is\n"
21"Language: is\n"
22
22
23#: plugins/Unity/Launcher/launcheritem.cpp:43
23#: plugins/Unity/Launcher/launcheritem.cpp:43
@@ -86,10 +86,6 @@ msgstr "Neyðarsímtal"
86msgid "OK"
86msgid "OK"
87msgstr "Í lagi"
87msgstr "Í lagi"
88
88
89−#: qml/Components/PageHeader.qml:366
90−msgid "Recent searches"
91−msgstr "Nýlegar leitir"
92−
93#: qml/Components/PassphraseLockscreen.qml:60
89#: qml/Components/PassphraseLockscreen.qml:60
94#, qt-format
90#, qt-format
95msgid "Hello %1"
91msgid "Hello %1"
@@ -111,7 +107,7 @@ msgstr "BÚIÐ"
111msgid "See more"
107msgid "See more"
112msgstr "Sjá meira"
108msgstr "Sjá meira"
113
109
114−#: qml/Components/SeeMore.qml:58
110+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
115msgid "See less"
111msgid "See less"
116msgstr "Sjá minna"
112msgstr "Sjá minna"
117
113
@@ -119,6 +115,10 @@ msgstr "Sjá minna"
119msgid "Recent"
115msgid "Recent"
120msgstr "Nýlegt"
116msgstr "Nýlegt"
121
117
118+#: qml/Dash/GenericScopeView.qml:330
119+msgid "See all"
120+msgstr ""
121+
122#: qml/Dash/Previews/PreviewActionCombo.qml:34
122#: qml/Dash/Previews/PreviewActionCombo.qml:34
123msgid "More..."
123msgid "More..."
124msgstr "Meira..."
124msgstr "Meira..."
@@ -127,15 +127,15 @@ msgstr "Meira..."
127msgid "Less..."
127msgid "Less..."
128msgstr "Minna..."
128msgstr "Minna..."
129
129
130−#: qml/Dash/Previews/PreviewRatingInput.qml:82
130+#: qml/Dash/Previews/PreviewRatingInput.qml:81
131msgid "Rate this"
131msgid "Rate this"
132msgstr "Gefa þessu einkunn"
132msgstr "Gefa þessu einkunn"
133
133
134−#: qml/Dash/Previews/PreviewRatingInput.qml:128
134+#: qml/Dash/Previews/PreviewRatingInput.qml:126
135msgid "Add a review"
135msgid "Add a review"
136msgstr "Gefa umsögn"
136msgstr "Gefa umsögn"
137
137
138−#: qml/Dash/Previews/PreviewRatingInput.qml:168
138+#: qml/Dash/Previews/PreviewRatingInput.qml:166
139msgid "Send"
139msgid "Send"
140msgstr "Senda"
140msgstr "Senda"
141
141
@@ -171,6 +171,14 @@ msgstr "Birta lykilorð"
171msgid "Please enter SIM PIN"
171msgid "Please enter SIM PIN"
172msgstr "Settu inn PIN fyrir SIM"
172msgstr "Settu inn PIN fyrir SIM"
173
173
174+#: qml/Panel/ActiveCallHint.qml:77
175+msgid "Tap to return to call..."
176+msgstr ""
177+
178+#: qml/Panel/ActiveCallHint.qml:90
179+msgid "Conference"
180+msgstr ""
181+
174#: qml/Panel/Indicators/MenuItemFactory.qml:583
182#: qml/Panel/Indicators/MenuItemFactory.qml:583
175msgid "In queue…"
183msgid "In queue…"
176msgstr "Í biðröð..."
184msgstr "Í biðröð..."
po/it.po+20−12
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11−"PO-Revision-Date: 2014-07-09 07:07+0000\n"
11+"PO-Revision-Date: 2014-07-25 16:09+0000\n"
12"Last-Translator: Claudio Arseni <claudio.arseni@gmail.com>\n"
12"Last-Translator: Claudio Arseni <claudio.arseni@gmail.com>\n"
13"Language-Team: Italian <it@li.org>\n"
13"Language-Team: Italian <it@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-10 07:29+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:16+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -87,10 +87,6 @@ msgstr "Chiamata di emergenza"
87msgid "OK"
87msgid "OK"
88msgstr "OK"
88msgstr "OK"
89
89
90−#: qml/Components/PageHeader.qml:366
91−msgid "Recent searches"
92−msgstr "Ricerche recenti"
93−
94#: qml/Components/PassphraseLockscreen.qml:60
90#: qml/Components/PassphraseLockscreen.qml:60
95#, qt-format
91#, qt-format
96msgid "Hello %1"
92msgid "Hello %1"
@@ -112,7 +108,7 @@ msgstr "Fatto"
112msgid "See more"
108msgid "See more"
113msgstr "Mostra di più"
109msgstr "Mostra di più"
114
110
115−#: qml/Components/SeeMore.qml:58
111+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
116msgid "See less"
112msgid "See less"
117msgstr "Mostra meno"
113msgstr "Mostra meno"
118
114
@@ -120,6 +116,10 @@ msgstr "Mostra meno"
120msgid "Recent"
116msgid "Recent"
121msgstr "Recenti"
117msgstr "Recenti"
122
118
119+#: qml/Dash/GenericScopeView.qml:330
120+msgid "See all"
121+msgstr "Mostra tutto"
122+
123#: qml/Dash/Previews/PreviewActionCombo.qml:34
123#: qml/Dash/Previews/PreviewActionCombo.qml:34
124msgid "More..."
124msgid "More..."
125msgstr "Altro..."
125msgstr "Altro..."
@@ -128,15 +128,15 @@ msgstr "Altro..."
128msgid "Less..."
128msgid "Less..."
129msgstr "Meno..."
129msgstr "Meno..."
130
130
131−#: qml/Dash/Previews/PreviewRatingInput.qml:82
131+#: qml/Dash/Previews/PreviewRatingInput.qml:81
132msgid "Rate this"
132msgid "Rate this"
133msgstr "Valuta"
133msgstr "Valuta"
134
134
135−#: qml/Dash/Previews/PreviewRatingInput.qml:128
135+#: qml/Dash/Previews/PreviewRatingInput.qml:126
136msgid "Add a review"
136msgid "Add a review"
137msgstr "Aggiungi una recensione"
137msgstr "Aggiungi una recensione"
138
138
139−#: qml/Dash/Previews/PreviewRatingInput.qml:168
139+#: qml/Dash/Previews/PreviewRatingInput.qml:166
140msgid "Send"
140msgid "Send"
141msgstr "Invia"
141msgstr "Invia"
142
142
@@ -172,6 +172,14 @@ msgstr "Mostra password"
172msgid "Please enter SIM PIN"
172msgid "Please enter SIM PIN"
173msgstr "Inserire il codice PIN"
173msgstr "Inserire il codice PIN"
174
174
175+#: qml/Panel/ActiveCallHint.qml:77
176+msgid "Tap to return to call..."
177+msgstr "Tocca per tornare alla chiamata..."
178+
179+#: qml/Panel/ActiveCallHint.qml:90
180+msgid "Conference"
181+msgstr "Conferenza"
182+
175#: qml/Panel/Indicators/MenuItemFactory.qml:583
183#: qml/Panel/Indicators/MenuItemFactory.qml:583
176msgid "In queue…"
184msgid "In queue…"
177msgstr "In coda..."
185msgstr "In coda..."
po/ja.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2014-01-18 07:01+0000\n"
11"PO-Revision-Date: 2014-01-18 07:01+0000\n"
12"Last-Translator: Shushi Kurose <md81bird@hitaki.net>\n"
12"Last-Translator: Shushi Kurose <md81bird@hitaki.net>\n"
13"Language-Team: Japanese <ja@li.org>\n"
13"Language-Team: Japanese <ja@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:16+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -80,10 +80,6 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr "最近の検索"
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr ""
105msgid "See more"
101msgid "See more"
106msgstr ""
102msgstr ""
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr ""
106msgstr ""
111
107
@@ -113,6 +109,10 @@ msgstr ""
113msgid "Recent"
109msgid "Recent"
114msgstr ""
110msgstr ""
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr ""
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr ""
118msgstr ""
@@ -121,15 +121,15 @@ msgstr ""
121msgid "Less..."
121msgid "Less..."
122msgstr ""
122msgstr ""
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr ""
126msgstr ""
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr ""
130msgstr ""
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr "送信"
134msgstr "送信"
135
135
@@ -165,6 +165,14 @@ msgstr "パスワードを表示"
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr ""
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr ""
178msgstr ""
po/km.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2014-07-16 01:37+0000\n"
11"PO-Revision-Date: 2014-07-16 01:37+0000\n"
12"Last-Translator: Khoem Sokhem <khoemsokhem@khmeros.info>\n"
12"Last-Translator: Khoem Sokhem <khoemsokhem@khmeros.info>\n"
13"Language-Team: Khmer <km@li.org>\n"
13"Language-Team: Khmer <km@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-17 06:38+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:16+0000\n"
18−"X-Generator: Launchpad (build 17114)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -84,10 +84,6 @@ msgstr "ការ​ហៅ​ពេល​អាសន្ន"
84msgid "OK"
84msgid "OK"
85msgstr "យល់ព្រម"
85msgstr "យល់ព្រម"
86
86
87−#: qml/Components/PageHeader.qml:366
88−msgid "Recent searches"
89−msgstr "ការ​ស្វែងរក​ថ្មី"
90−
91#: qml/Components/PassphraseLockscreen.qml:60
87#: qml/Components/PassphraseLockscreen.qml:60
92#, qt-format
88#, qt-format
93msgid "Hello %1"
89msgid "Hello %1"
@@ -109,7 +105,7 @@ msgstr "រួចរាល់"
109msgid "See more"
105msgid "See more"
110msgstr "មើល​ច្រើន​ទៀត"
106msgstr "មើល​ច្រើន​ទៀត"
111
107
112−#: qml/Components/SeeMore.qml:58
108+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
113msgid "See less"
109msgid "See less"
114msgstr "មើល​តិច​ជាង"
110msgstr "មើល​តិច​ជាង"
115
111
@@ -117,6 +113,10 @@ msgstr "មើល​តិច​ជាង"
117msgid "Recent"
113msgid "Recent"
118msgstr "បច្ចុប្បន្ន"
114msgstr "បច្ចុប្បន្ន"
119
115
116+#: qml/Dash/GenericScopeView.qml:330
117+msgid "See all"
118+msgstr ""
119+
120#: qml/Dash/Previews/PreviewActionCombo.qml:34
120#: qml/Dash/Previews/PreviewActionCombo.qml:34
121msgid "More..."
121msgid "More..."
122msgstr "ច្រើនជាង​..."
122msgstr "ច្រើនជាង​..."
@@ -125,15 +125,15 @@ msgstr "ច្រើនជាង​..."
125msgid "Less..."
125msgid "Less..."
126msgstr "តិច​ជាង..."
126msgstr "តិច​ជាង..."
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:82
128+#: qml/Dash/Previews/PreviewRatingInput.qml:81
129msgid "Rate this"
129msgid "Rate this"
130msgstr "វាយតម្លៃ​វា"
130msgstr "វាយតម្លៃ​វា"
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:128
132+#: qml/Dash/Previews/PreviewRatingInput.qml:126
133msgid "Add a review"
133msgid "Add a review"
134msgstr "បន្ថែម​ការ​ពិនិត្យ"
134msgstr "បន្ថែម​ការ​ពិនិត្យ"
135
135
136−#: qml/Dash/Previews/PreviewRatingInput.qml:168
136+#: qml/Dash/Previews/PreviewRatingInput.qml:166
137msgid "Send"
137msgid "Send"
138msgstr "ផ្ញើ"
138msgstr "ផ្ញើ"
139
139
@@ -169,6 +169,14 @@ msgstr "បង្ហាញ​ពាក្យ​សម្ងាត់"
169msgid "Please enter SIM PIN"
169msgid "Please enter SIM PIN"
170msgstr "បញ្ចូល​កូដ PIN របស់​ស៊ីមកាត"
170msgstr "បញ្ចូល​កូដ PIN របស់​ស៊ីមកាត"
171
171
172+#: qml/Panel/ActiveCallHint.qml:77
173+msgid "Tap to return to call..."
174+msgstr ""
175+
176+#: qml/Panel/ActiveCallHint.qml:90
177+msgid "Conference"
178+msgstr ""
179+
172#: qml/Panel/Indicators/MenuItemFactory.qml:583
180#: qml/Panel/Indicators/MenuItemFactory.qml:583
173msgid "In queue…"
181msgid "In queue…"
174msgstr "ក្នុងជួរ…"
182msgstr "ក្នុងជួរ…"
po/kn.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2013-06-27 05:43+0000\n"
11"PO-Revision-Date: 2013-06-27 05:43+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: Kannada <kn@li.org>\n"
13"Language-Team: Kannada <kn@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:16+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -80,10 +80,6 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr "ಇತ್ತೀಚಿನ ಹುಡುಕಾಟಗಳು"
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr ""
105msgid "See more"
101msgid "See more"
106msgstr ""
102msgstr ""
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr ""
106msgstr ""
111
107
@@ -113,6 +109,10 @@ msgstr ""
113msgid "Recent"
109msgid "Recent"
114msgstr ""
110msgstr ""
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr ""
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr ""
118msgstr ""
@@ -121,15 +121,15 @@ msgstr ""
121msgid "Less..."
121msgid "Less..."
122msgstr ""
122msgstr ""
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr ""
126msgstr ""
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr ""
130msgstr ""
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr ""
134msgstr ""
135
135
@@ -165,6 +165,14 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr ""
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr ""
178msgstr ""
po/ko.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2014-07-17 03:56+0000\n"
11"PO-Revision-Date: 2014-07-17 03:56+0000\n"
12"Last-Translator: MinSik CHO <Unknown>\n"
12"Last-Translator: MinSik CHO <Unknown>\n"
13"Language-Team: Korean <ko@li.org>\n"
13"Language-Team: Korean <ko@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-18 05:28+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:16+0000\n"
18−"X-Generator: Launchpad (build 17114)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -82,10 +82,6 @@ msgstr "긴급 통화"
82msgid "OK"
82msgid "OK"
83msgstr "확인"
83msgstr "확인"
84
84
85−#: qml/Components/PageHeader.qml:366
86−msgid "Recent searches"
87−msgstr "최근 검색"
88−
89#: qml/Components/PassphraseLockscreen.qml:60
85#: qml/Components/PassphraseLockscreen.qml:60
90#, qt-format
86#, qt-format
91msgid "Hello %1"
87msgid "Hello %1"
@@ -107,7 +103,7 @@ msgstr "완료"
107msgid "See more"
103msgid "See more"
108msgstr "더 보기"
104msgstr "더 보기"
109
105
110−#: qml/Components/SeeMore.qml:58
106+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
111msgid "See less"
107msgid "See less"
112msgstr "간단히 표시하기"
108msgstr "간단히 표시하기"
113
109
@@ -115,6 +111,10 @@ msgstr "간단히 표시하기"
115msgid "Recent"
111msgid "Recent"
116msgstr "최근"
112msgstr "최근"
117
113
114+#: qml/Dash/GenericScopeView.qml:330
115+msgid "See all"
116+msgstr ""
117+
118#: qml/Dash/Previews/PreviewActionCombo.qml:34
118#: qml/Dash/Previews/PreviewActionCombo.qml:34
119msgid "More..."
119msgid "More..."
120msgstr "더 보기..."
120msgstr "더 보기..."
@@ -123,15 +123,15 @@ msgstr "더 보기..."
123msgid "Less..."
123msgid "Less..."
124msgstr "간단하게..."
124msgstr "간단하게..."
125
125
126−#: qml/Dash/Previews/PreviewRatingInput.qml:82
126+#: qml/Dash/Previews/PreviewRatingInput.qml:81
127msgid "Rate this"
127msgid "Rate this"
128msgstr "이 애플리케이션 평가하기"
128msgstr "이 애플리케이션 평가하기"
129
129
130−#: qml/Dash/Previews/PreviewRatingInput.qml:128
130+#: qml/Dash/Previews/PreviewRatingInput.qml:126
131msgid "Add a review"
131msgid "Add a review"
132msgstr "평가 제출하기"
132msgstr "평가 제출하기"
133
133
134−#: qml/Dash/Previews/PreviewRatingInput.qml:168
134+#: qml/Dash/Previews/PreviewRatingInput.qml:166
135msgid "Send"
135msgid "Send"
136msgstr "보내기"
136msgstr "보내기"
137
137
@@ -167,6 +167,14 @@ msgstr "비밀 번호 보기"
167msgid "Please enter SIM PIN"
167msgid "Please enter SIM PIN"
168msgstr "심카드의 PIN 번호를 입력하세요."
168msgstr "심카드의 PIN 번호를 입력하세요."
169
169
170+#: qml/Panel/ActiveCallHint.qml:77
171+msgid "Tap to return to call..."
172+msgstr ""
173+
174+#: qml/Panel/ActiveCallHint.qml:90
175+msgid "Conference"
176+msgstr ""
177+
170#: qml/Panel/Indicators/MenuItemFactory.qml:583
178#: qml/Panel/Indicators/MenuItemFactory.qml:583
171msgid "In queue…"
179msgid "In queue…"
172msgstr "재생 중..."
180msgstr "재생 중..."
po/ky.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2013-06-27 06:17+0000\n"
11"PO-Revision-Date: 2013-06-27 06:17+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: Kirghiz <ky@li.org>\n"
13"Language-Team: Kirghiz <ky@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:16+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -80,10 +80,6 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr "Соңку издөөлөр"
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr ""
105msgid "See more"
101msgid "See more"
106msgstr ""
102msgstr ""
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr ""
106msgstr ""
111
107
@@ -113,6 +109,10 @@ msgstr ""
113msgid "Recent"
109msgid "Recent"
114msgstr ""
110msgstr ""
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr ""
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr ""
118msgstr ""
@@ -121,15 +121,15 @@ msgstr ""
121msgid "Less..."
121msgid "Less..."
122msgstr ""
122msgstr ""
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr ""
126msgstr ""
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr ""
130msgstr ""
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr ""
134msgstr ""
135
135
@@ -165,6 +165,14 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr ""
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr ""
178msgstr ""
po/lo.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2013-10-02 10:00+0000\n"
11"PO-Revision-Date: 2013-10-02 10:00+0000\n"
12"Last-Translator: Anousak <anousak@gmail.com>\n"
12"Last-Translator: Anousak <anousak@gmail.com>\n"
13"Language-Team: Lao <lo@li.org>\n"
13"Language-Team: Lao <lo@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:16+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -80,10 +80,6 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr ""
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr ""
105msgid "See more"
101msgid "See more"
106msgstr ""
102msgstr ""
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr ""
106msgstr ""
111
107
@@ -113,6 +109,10 @@ msgstr ""
113msgid "Recent"
109msgid "Recent"
114msgstr ""
110msgstr ""
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr ""
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr ""
118msgstr ""
@@ -121,15 +121,15 @@ msgstr ""
121msgid "Less..."
121msgid "Less..."
122msgstr ""
122msgstr ""
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr ""
126msgstr ""
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr ""
130msgstr ""
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr "ສົ່ງ"
134msgstr "ສົ່ງ"
135
135
@@ -165,6 +165,14 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr ""
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr ""
178msgstr ""
po/lt.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2014-05-19 17:15+0000\n"
11"PO-Revision-Date: 2014-05-19 17:15+0000\n"
12"Last-Translator: Mantas Kriaučiūnas <mantas@akl.lt>\n"
12"Last-Translator: Mantas Kriaučiūnas <mantas@akl.lt>\n"
13"Language-Team: Lithuanian <lt@li.org>\n"
13"Language-Team: Lithuanian <lt@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:17+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -83,10 +83,6 @@ msgstr "Pagalbos skambutis"
83msgid "OK"
83msgid "OK"
84msgstr ""
84msgstr ""
85
85
86−#: qml/Components/PageHeader.qml:366
87−msgid "Recent searches"
88−msgstr "Paskiausios paieškos"
89−
90#: qml/Components/PassphraseLockscreen.qml:60
86#: qml/Components/PassphraseLockscreen.qml:60
91#, qt-format
87#, qt-format
92msgid "Hello %1"
88msgid "Hello %1"
@@ -108,7 +104,7 @@ msgstr ""
108msgid "See more"
104msgid "See more"
109msgstr ""
105msgstr ""
110
106
111−#: qml/Components/SeeMore.qml:58
107+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
112msgid "See less"
108msgid "See less"
113msgstr ""
109msgstr ""
114
110
@@ -116,6 +112,10 @@ msgstr ""
116msgid "Recent"
112msgid "Recent"
117msgstr "Paskiausieji"
113msgstr "Paskiausieji"
118
114
115+#: qml/Dash/GenericScopeView.qml:330
116+msgid "See all"
117+msgstr ""
118+
119#: qml/Dash/Previews/PreviewActionCombo.qml:34
119#: qml/Dash/Previews/PreviewActionCombo.qml:34
120msgid "More..."
120msgid "More..."
121msgstr "Daugiau..."
121msgstr "Daugiau..."
@@ -124,15 +124,15 @@ msgstr "Daugiau..."
124msgid "Less..."
124msgid "Less..."
125msgstr "Mažiau..."
125msgstr "Mažiau..."
126
126
127−#: qml/Dash/Previews/PreviewRatingInput.qml:82
127+#: qml/Dash/Previews/PreviewRatingInput.qml:81
128msgid "Rate this"
128msgid "Rate this"
129msgstr "Įvertinkite tai"
129msgstr "Įvertinkite tai"
130
130
131−#: qml/Dash/Previews/PreviewRatingInput.qml:128
131+#: qml/Dash/Previews/PreviewRatingInput.qml:126
132msgid "Add a review"
132msgid "Add a review"
133msgstr "Pridėkite apžvalgą"
133msgstr "Pridėkite apžvalgą"
134
134
135−#: qml/Dash/Previews/PreviewRatingInput.qml:168
135+#: qml/Dash/Previews/PreviewRatingInput.qml:166
136msgid "Send"
136msgid "Send"
137msgstr "Siųsti"
137msgstr "Siųsti"
138
138
@@ -168,6 +168,14 @@ msgstr "Rodyti slaptažodį"
168msgid "Please enter SIM PIN"
168msgid "Please enter SIM PIN"
169msgstr "Įveskite SIM kortelės PIN kodą"
169msgstr "Įveskite SIM kortelės PIN kodą"
170
170
171+#: qml/Panel/ActiveCallHint.qml:77
172+msgid "Tap to return to call..."
173+msgstr ""
174+
175+#: qml/Panel/ActiveCallHint.qml:90
176+msgid "Conference"
177+msgstr ""
178+
171#: qml/Panel/Indicators/MenuItemFactory.qml:583
179#: qml/Panel/Indicators/MenuItemFactory.qml:583
172msgid "In queue…"
180msgid "In queue…"
173msgstr ""
181msgstr ""
po/lv.po+23−15
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11−"PO-Revision-Date: 2014-07-15 12:13+0000\n"
11+"PO-Revision-Date: 2014-07-26 16:21+0000\n"
12"Last-Translator: Jānis-Marks Gailis <jm-gailis@fai-vianet.fr>\n"
12"Last-Translator: Jānis-Marks Gailis <jm-gailis@fai-vianet.fr>\n"
13"Language-Team: Latvian <lv@li.org>\n"
13"Language-Team: Latvian <lv@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-16 07:27+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-27 06:35+0000\n"
18−"X-Generator: Launchpad (build 17112)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -80,10 +80,6 @@ msgstr "Neatliekamās Palīdzības zvans"
80msgid "OK"
80msgid "OK"
81msgstr "LABI"
81msgstr "LABI"
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr "Nesen veiktās meklēšanas"
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr "IZDARĪTS"
105msgid "See more"
101msgid "See more"
106msgstr "Redzēt vairāk"
102msgstr "Redzēt vairāk"
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr "Redzēt mazāk"
106msgstr "Redzēt mazāk"
111
107
@@ -113,6 +109,10 @@ msgstr "Redzēt mazāk"
113msgid "Recent"
109msgid "Recent"
114msgstr "Nesens"
110msgstr "Nesens"
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr "Skatīt visus"
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr "Vairāk..."
118msgstr "Vairāk..."
@@ -121,15 +121,15 @@ msgstr "Vairāk..."
121msgid "Less..."
121msgid "Less..."
122msgstr "Mazāk..."
122msgstr "Mazāk..."
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr "Novērtēt šo"
126msgstr "Novērtēt šo"
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr "Komentēt"
130msgstr "Komentēt"
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr "Sūtīt"
134msgstr "Sūtīt"
135
135
@@ -165,13 +165,21 @@ msgstr "Rādīt paroli"
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr "Lūdzu ievadiet SIM PIN"
166msgstr "Lūdzu ievadiet SIM PIN"
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr "Konference"
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr ""
178msgstr ""
171
179
172#: qml/Panel/Indicators/MenuItemFactory.qml:587
180#: qml/Panel/Indicators/MenuItemFactory.qml:587
173msgid "Downloading"
181msgid "Downloading"
174−msgstr ""
182+msgstr "Lejupielādē"
175
183
176#: qml/Panel/Indicators/MenuItemFactory.qml:589
184#: qml/Panel/Indicators/MenuItemFactory.qml:589
177msgid "Paused, tap to resume"
185msgid "Paused, tap to resume"
@@ -179,11 +187,11 @@ msgstr ""
179
187
180#: qml/Panel/Indicators/MenuItemFactory.qml:591
188#: qml/Panel/Indicators/MenuItemFactory.qml:591
181msgid "Canceled"
189msgid "Canceled"
182−msgstr ""
190+msgstr "Atcelts"
183
191
184#: qml/Panel/Indicators/MenuItemFactory.qml:593
192#: qml/Panel/Indicators/MenuItemFactory.qml:593
185msgid "Finished"
193msgid "Finished"
186−msgstr ""
194+msgstr "Pabeigts"
187
195
188#: qml/Panel/Indicators/MenuItemFactory.qml:595
196#: qml/Panel/Indicators/MenuItemFactory.qml:595
189msgid "Failed, tap to retry"
197msgid "Failed, tap to retry"
po/ml.po+20−12
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2013-11-23 11:44+0000\n"
11"PO-Revision-Date: 2013-11-23 11:44+0000\n"
12−"Last-Translator: Stym alfaZ <Unknown>\n"
12+"Last-Translator: ST Alfas <Unknown>\n"
13"Language-Team: Malayalam <ml@li.org>\n"
13"Language-Team: Malayalam <ml@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:17+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -82,10 +82,6 @@ msgstr "അടിയന്തിര വിളി"
82msgid "OK"
82msgid "OK"
83msgstr ""
83msgstr ""
84
84
85−#: qml/Components/PageHeader.qml:366
86−msgid "Recent searches"
87−msgstr "സമീപകാല തിരയലുകള്‍"
88−
89#: qml/Components/PassphraseLockscreen.qml:60
85#: qml/Components/PassphraseLockscreen.qml:60
90#, qt-format
86#, qt-format
91msgid "Hello %1"
87msgid "Hello %1"
@@ -107,7 +103,7 @@ msgstr ""
107msgid "See more"
103msgid "See more"
108msgstr ""
104msgstr ""
109
105
110−#: qml/Components/SeeMore.qml:58
106+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
111msgid "See less"
107msgid "See less"
112msgstr ""
108msgstr ""
113
109
@@ -115,6 +111,10 @@ msgstr ""
115msgid "Recent"
111msgid "Recent"
116msgstr ""
112msgstr ""
117
113
114+#: qml/Dash/GenericScopeView.qml:330
115+msgid "See all"
116+msgstr ""
117+
118#: qml/Dash/Previews/PreviewActionCombo.qml:34
118#: qml/Dash/Previews/PreviewActionCombo.qml:34
119msgid "More..."
119msgid "More..."
120msgstr ""
120msgstr ""
@@ -123,15 +123,15 @@ msgstr ""
123msgid "Less..."
123msgid "Less..."
124msgstr ""
124msgstr ""
125
125
126−#: qml/Dash/Previews/PreviewRatingInput.qml:82
126+#: qml/Dash/Previews/PreviewRatingInput.qml:81
127msgid "Rate this"
127msgid "Rate this"
128msgstr "ഇത് അവലോകനം ചെയ്യുക"
128msgstr "ഇത് അവലോകനം ചെയ്യുക"
129
129
130−#: qml/Dash/Previews/PreviewRatingInput.qml:128
130+#: qml/Dash/Previews/PreviewRatingInput.qml:126
131msgid "Add a review"
131msgid "Add a review"
132msgstr "ഒരു അവലോകനം ചേര്‍ക്കുക"
132msgstr "ഒരു അവലോകനം ചേര്‍ക്കുക"
133
133
134−#: qml/Dash/Previews/PreviewRatingInput.qml:168
134+#: qml/Dash/Previews/PreviewRatingInput.qml:166
135msgid "Send"
135msgid "Send"
136msgstr "അയയ്‌ക്കുക"
136msgstr "അയയ്‌ക്കുക"
137
137
@@ -167,6 +167,14 @@ msgstr "രഹസ്യവാക്ക് കാണിക്കുക"
167msgid "Please enter SIM PIN"
167msgid "Please enter SIM PIN"
168msgstr ""
168msgstr ""
169
169
170+#: qml/Panel/ActiveCallHint.qml:77
171+msgid "Tap to return to call..."
172+msgstr ""
173+
174+#: qml/Panel/ActiveCallHint.qml:90
175+msgid "Conference"
176+msgstr ""
177+
170#: qml/Panel/Indicators/MenuItemFactory.qml:583
178#: qml/Panel/Indicators/MenuItemFactory.qml:583
171msgid "In queue…"
179msgid "In queue…"
172msgstr ""
180msgstr ""
po/mr.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2014-01-14 19:54+0000\n"
11"PO-Revision-Date: 2014-01-14 19:54+0000\n"
12"Last-Translator: Rohan Deshmukh <Unknown>\n"
12"Last-Translator: Rohan Deshmukh <Unknown>\n"
13"Language-Team: Marathi <mr@li.org>\n"
13"Language-Team: Marathi <mr@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:17+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -80,10 +80,6 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr ""
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr ""
105msgid "See more"
101msgid "See more"
106msgstr ""
102msgstr ""
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr ""
106msgstr ""
111
107
@@ -113,6 +109,10 @@ msgstr ""
113msgid "Recent"
109msgid "Recent"
114msgstr ""
110msgstr ""
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr ""
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr ""
118msgstr ""
@@ -121,15 +121,15 @@ msgstr ""
121msgid "Less..."
121msgid "Less..."
122msgstr ""
122msgstr ""
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr ""
126msgstr ""
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr ""
130msgstr ""
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr ""
134msgstr ""
135
135
@@ -165,6 +165,14 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr ""
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr ""
178msgstr ""
po/ms.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2014-01-17 09:05+0000\n"
11"PO-Revision-Date: 2014-01-17 09:05+0000\n"
12"Last-Translator: abuyop <Unknown>\n"
12"Last-Translator: abuyop <Unknown>\n"
13"Language-Team: Malay <ms@li.org>\n"
13"Language-Team: Malay <ms@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:17+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -80,10 +80,6 @@ msgstr "panggilan Kecemasan"
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr "Gelintar baru-baru ini"
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr ""
105msgid "See more"
101msgid "See more"
106msgstr ""
102msgstr ""
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr ""
106msgstr ""
111
107
@@ -113,6 +109,10 @@ msgstr ""
113msgid "Recent"
109msgid "Recent"
114msgstr ""
110msgstr ""
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr ""
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr ""
118msgstr ""
@@ -121,15 +121,15 @@ msgstr ""
121msgid "Less..."
121msgid "Less..."
122msgstr ""
122msgstr ""
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr "Kadar ini"
126msgstr "Kadar ini"
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr "Tambah ulasan"
130msgstr "Tambah ulasan"
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr "Hantar"
134msgstr "Hantar"
135
135
@@ -165,6 +165,14 @@ msgstr "Tunjuk kata laluan"
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr ""
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr ""
178msgstr ""
po/my.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2013-12-12 11:12+0000\n"
11"PO-Revision-Date: 2013-12-12 11:12+0000\n"
12"Last-Translator: Pyae Sone <Unknown>\n"
12"Last-Translator: Pyae Sone <Unknown>\n"
13"Language-Team: Burmese <my@li.org>\n"
13"Language-Team: Burmese <my@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:36+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:16+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -80,10 +80,6 @@ msgstr "အရေးပေါ်ခေါ်မည်"
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr "မကြာသေးခင်က ရှာဖွေခြင်း"
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr ""
105msgid "See more"
101msgid "See more"
106msgstr ""
102msgstr ""
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr ""
106msgstr ""
111
107
@@ -113,6 +109,10 @@ msgstr ""
113msgid "Recent"
109msgid "Recent"
114msgstr ""
110msgstr ""
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr ""
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr ""
118msgstr ""
@@ -121,15 +121,15 @@ msgstr ""
121msgid "Less..."
121msgid "Less..."
122msgstr ""
122msgstr ""
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr "ဒီဟာကိုအမှတ်ပေးမည်"
126msgstr "ဒီဟာကိုအမှတ်ပေးမည်"
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr ""
130msgstr ""
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr "ပို့မည်"
134msgstr "ပို့မည်"
135
135
@@ -165,6 +165,14 @@ msgstr "စကားဝှက်ကိုပြ"
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr ""
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr ""
178msgstr ""
po/nb.po+20−12
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11−"PO-Revision-Date: 2014-07-11 07:01+0000\n"
11+"PO-Revision-Date: 2014-07-26 12:05+0000\n"
12"Last-Translator: Åka Sikrom <Unknown>\n"
12"Last-Translator: Åka Sikrom <Unknown>\n"
13"Language-Team: Norwegian Bokmal <nb@li.org>\n"
13"Language-Team: Norwegian Bokmal <nb@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-12 06:58+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-27 06:35+0000\n"
18−"X-Generator: Launchpad (build 17111)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -82,10 +82,6 @@ msgstr "Nødanrop"
82msgid "OK"
82msgid "OK"
83msgstr "OK"
83msgstr "OK"
84
84
85−#: qml/Components/PageHeader.qml:366
86−msgid "Recent searches"
87−msgstr "Nylige søk"
88−
89#: qml/Components/PassphraseLockscreen.qml:60
85#: qml/Components/PassphraseLockscreen.qml:60
90#, qt-format
86#, qt-format
91msgid "Hello %1"
87msgid "Hello %1"
@@ -107,7 +103,7 @@ msgstr "FERDIG"
107msgid "See more"
103msgid "See more"
108msgstr "Vis mer"
104msgstr "Vis mer"
109
105
110−#: qml/Components/SeeMore.qml:58
106+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
111msgid "See less"
107msgid "See less"
112msgstr "Vis mindre"
108msgstr "Vis mindre"
113
109
@@ -115,6 +111,10 @@ msgstr "Vis mindre"
115msgid "Recent"
111msgid "Recent"
116msgstr "Nylig"
112msgstr "Nylig"
117
113
114+#: qml/Dash/GenericScopeView.qml:330
115+msgid "See all"
116+msgstr "Vis alt"
117+
118#: qml/Dash/Previews/PreviewActionCombo.qml:34
118#: qml/Dash/Previews/PreviewActionCombo.qml:34
119msgid "More..."
119msgid "More..."
120msgstr "Mer …"
120msgstr "Mer …"
@@ -123,15 +123,15 @@ msgstr "Mer …"
123msgid "Less..."
123msgid "Less..."
124msgstr "Mindre …"
124msgstr "Mindre …"
125
125
126−#: qml/Dash/Previews/PreviewRatingInput.qml:82
126+#: qml/Dash/Previews/PreviewRatingInput.qml:81
127msgid "Rate this"
127msgid "Rate this"
128msgstr "Vurder dette"
128msgstr "Vurder dette"
129
129
130−#: qml/Dash/Previews/PreviewRatingInput.qml:128
130+#: qml/Dash/Previews/PreviewRatingInput.qml:126
131msgid "Add a review"
131msgid "Add a review"
132msgstr "Skriv en anmeldelse"
132msgstr "Skriv en anmeldelse"
133
133
134−#: qml/Dash/Previews/PreviewRatingInput.qml:168
134+#: qml/Dash/Previews/PreviewRatingInput.qml:166
135msgid "Send"
135msgid "Send"
136msgstr "Send"
136msgstr "Send"
137
137
@@ -167,6 +167,14 @@ msgstr "Vis passord"
167msgid "Please enter SIM PIN"
167msgid "Please enter SIM PIN"
168msgstr "Skriv inn PIN-koden til SIM-kortet"
168msgstr "Skriv inn PIN-koden til SIM-kortet"
169
169
170+#: qml/Panel/ActiveCallHint.qml:77
171+msgid "Tap to return to call..."
172+msgstr "Trykk for å gå tilbake til anrop …"
173+
174+#: qml/Panel/ActiveCallHint.qml:90
175+msgid "Conference"
176+msgstr "Konferanse"
177+
170#: qml/Panel/Indicators/MenuItemFactory.qml:583
178#: qml/Panel/Indicators/MenuItemFactory.qml:583
171msgid "In queue…"
179msgid "In queue…"
172msgstr "I kø …"
180msgstr "I kø …"
po/nl.po+21−13
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11−"PO-Revision-Date: 2014-07-20 17:25+0000\n"
11+"PO-Revision-Date: 2014-07-27 19:12+0000\n"
12−"Last-Translator: Hannie Dumoleyn <Unknown>\n"
12+"Last-Translator: rob <linuxned@gmail.com>\n"
13"Language-Team: Dutch <nl@li.org>\n"
13"Language-Team: Dutch <nl@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-21 07:05+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-28 06:44+0000\n"
18−"X-Generator: Launchpad (build 17114)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -82,10 +82,6 @@ msgstr "Noodoproep"
82msgid "OK"
82msgid "OK"
83msgstr "Ok"
83msgstr "Ok"
84
84
85−#: qml/Components/PageHeader.qml:366
86−msgid "Recent searches"
87−msgstr "Recente zoekopdrachten"
88−
89#: qml/Components/PassphraseLockscreen.qml:60
85#: qml/Components/PassphraseLockscreen.qml:60
90#, qt-format
86#, qt-format
91msgid "Hello %1"
87msgid "Hello %1"
@@ -107,7 +103,7 @@ msgstr "KLAAR"
107msgid "See more"
103msgid "See more"
108msgstr "Meer zien"
104msgstr "Meer zien"
109
105
110−#: qml/Components/SeeMore.qml:58
106+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
111msgid "See less"
107msgid "See less"
112msgstr "Minder zien"
108msgstr "Minder zien"
113
109
@@ -115,6 +111,10 @@ msgstr "Minder zien"
115msgid "Recent"
111msgid "Recent"
116msgstr "Recent"
112msgstr "Recent"
117
113
114+#: qml/Dash/GenericScopeView.qml:330
115+msgid "See all"
116+msgstr "Alles zien"
117+
118#: qml/Dash/Previews/PreviewActionCombo.qml:34
118#: qml/Dash/Previews/PreviewActionCombo.qml:34
119msgid "More..."
119msgid "More..."
120msgstr "Meer…"
120msgstr "Meer…"
@@ -123,15 +123,15 @@ msgstr "Meer…"
123msgid "Less..."
123msgid "Less..."
124msgstr "Minder…"
124msgstr "Minder…"
125
125
126−#: qml/Dash/Previews/PreviewRatingInput.qml:82
126+#: qml/Dash/Previews/PreviewRatingInput.qml:81
127msgid "Rate this"
127msgid "Rate this"
128msgstr "Beoordeel dit"
128msgstr "Beoordeel dit"
129
129
130−#: qml/Dash/Previews/PreviewRatingInput.qml:128
130+#: qml/Dash/Previews/PreviewRatingInput.qml:126
131msgid "Add a review"
131msgid "Add a review"
132msgstr "Voeg recensie toe"
132msgstr "Voeg recensie toe"
133
133
134−#: qml/Dash/Previews/PreviewRatingInput.qml:168
134+#: qml/Dash/Previews/PreviewRatingInput.qml:166
135msgid "Send"
135msgid "Send"
136msgstr "Versturen"
136msgstr "Versturen"
137
137
@@ -167,6 +167,14 @@ msgstr "Wachtwoord tonen"
167msgid "Please enter SIM PIN"
167msgid "Please enter SIM PIN"
168msgstr "Voer SIM-pincode in"
168msgstr "Voer SIM-pincode in"
169
169
170+#: qml/Panel/ActiveCallHint.qml:77
171+msgid "Tap to return to call..."
172+msgstr "Tik om terug te keren naar gesprek…"
173+
174+#: qml/Panel/ActiveCallHint.qml:90
175+msgid "Conference"
176+msgstr "Groepsgesprek"
177+
170#: qml/Panel/Indicators/MenuItemFactory.qml:583
178#: qml/Panel/Indicators/MenuItemFactory.qml:583
171msgid "In queue…"
179msgid "In queue…"
172msgstr "In wachtrij…"
180msgstr "In wachtrij…"
po/pl.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2014-07-19 14:10+0000\n"
11"PO-Revision-Date: 2014-07-19 14:10+0000\n"
12"Last-Translator: GTriderXC <gtriderxc@yahoo.com>\n"
12"Last-Translator: GTriderXC <gtriderxc@yahoo.com>\n"
13"Language-Team: Polish <pl@li.org>\n"
13"Language-Team: Polish <pl@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-20 06:18+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:17+0000\n"
18−"X-Generator: Launchpad (build 17114)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -84,10 +84,6 @@ msgstr "Telefon ratunkowy"
84msgid "OK"
84msgid "OK"
85msgstr "OK"
85msgstr "OK"
86
86
87−#: qml/Components/PageHeader.qml:366
88−msgid "Recent searches"
89−msgstr "Ostatnie wyszukiwania"
90−
91#: qml/Components/PassphraseLockscreen.qml:60
87#: qml/Components/PassphraseLockscreen.qml:60
92#, qt-format
88#, qt-format
93msgid "Hello %1"
89msgid "Hello %1"
@@ -109,7 +105,7 @@ msgstr "ZROBIONE"
109msgid "See more"
105msgid "See more"
110msgstr "Zobacz więcej"
106msgstr "Zobacz więcej"
111
107
112−#: qml/Components/SeeMore.qml:58
108+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
113msgid "See less"
109msgid "See less"
114msgstr "Zobacz mniej"
110msgstr "Zobacz mniej"
115
111
@@ -117,6 +113,10 @@ msgstr "Zobacz mniej"
117msgid "Recent"
113msgid "Recent"
118msgstr "Ostatnio używane"
114msgstr "Ostatnio używane"
119
115
116+#: qml/Dash/GenericScopeView.qml:330
117+msgid "See all"
118+msgstr ""
119+
120#: qml/Dash/Previews/PreviewActionCombo.qml:34
120#: qml/Dash/Previews/PreviewActionCombo.qml:34
121msgid "More..."
121msgid "More..."
122msgstr "Więcej..."
122msgstr "Więcej..."
@@ -125,15 +125,15 @@ msgstr "Więcej..."
125msgid "Less..."
125msgid "Less..."
126msgstr "Mniej..."
126msgstr "Mniej..."
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:82
128+#: qml/Dash/Previews/PreviewRatingInput.qml:81
129msgid "Rate this"
129msgid "Rate this"
130msgstr "Oceń to"
130msgstr "Oceń to"
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:128
132+#: qml/Dash/Previews/PreviewRatingInput.qml:126
133msgid "Add a review"
133msgid "Add a review"
134msgstr "Dodaj recenzję"
134msgstr "Dodaj recenzję"
135
135
136−#: qml/Dash/Previews/PreviewRatingInput.qml:168
136+#: qml/Dash/Previews/PreviewRatingInput.qml:166
137msgid "Send"
137msgid "Send"
138msgstr "Wyślij"
138msgstr "Wyślij"
139
139
@@ -169,6 +169,14 @@ msgstr "Wyświetl hasło"
169msgid "Please enter SIM PIN"
169msgid "Please enter SIM PIN"
170msgstr "Wprowadź kod PIN karty SIM"
170msgstr "Wprowadź kod PIN karty SIM"
171
171
172+#: qml/Panel/ActiveCallHint.qml:77
173+msgid "Tap to return to call..."
174+msgstr ""
175+
176+#: qml/Panel/ActiveCallHint.qml:90
177+msgid "Conference"
178+msgstr ""
179+
172#: qml/Panel/Indicators/MenuItemFactory.qml:583
180#: qml/Panel/Indicators/MenuItemFactory.qml:583
173msgid "In queue…"
181msgid "In queue…"
174msgstr "W kolejce..."
182msgstr "W kolejce..."
po/pt.po+21−13
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11−"PO-Revision-Date: 2014-07-18 22:56+0000\n"
11+"PO-Revision-Date: 2014-07-25 12:04+0000\n"
12−"Last-Translator: Hugo Cardoso <hugocardoso94@gmail.com>\n"
12+"Last-Translator: Ivo Xavier <ivofernandes12@gmail.com>\n"
13"Language-Team: Portuguese <pt@li.org>\n"
13"Language-Team: Portuguese <pt@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-19 06:19+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:17+0000\n"
18−"X-Generator: Launchpad (build 17114)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -83,10 +83,6 @@ msgstr "Chamada de emergência"
83msgid "OK"
83msgid "OK"
84msgstr "OK"
84msgstr "OK"
85
85
86−#: qml/Components/PageHeader.qml:366
87−msgid "Recent searches"
88−msgstr "Pesquisas recentes"
89−
90#: qml/Components/PassphraseLockscreen.qml:60
86#: qml/Components/PassphraseLockscreen.qml:60
91#, qt-format
87#, qt-format
92msgid "Hello %1"
88msgid "Hello %1"
@@ -108,7 +104,7 @@ msgstr "FEITO"
108msgid "See more"
104msgid "See more"
109msgstr "Ver mais"
105msgstr "Ver mais"
110
106
111−#: qml/Components/SeeMore.qml:58
107+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
112msgid "See less"
108msgid "See less"
113msgstr "Ver menos"
109msgstr "Ver menos"
114
110
@@ -116,6 +112,10 @@ msgstr "Ver menos"
116msgid "Recent"
112msgid "Recent"
117msgstr "Recentes"
113msgstr "Recentes"
118
114
115+#: qml/Dash/GenericScopeView.qml:330
116+msgid "See all"
117+msgstr "Ver todos"
118+
119#: qml/Dash/Previews/PreviewActionCombo.qml:34
119#: qml/Dash/Previews/PreviewActionCombo.qml:34
120msgid "More..."
120msgid "More..."
121msgstr "Mais..."
121msgstr "Mais..."
@@ -124,15 +124,15 @@ msgstr "Mais..."
124msgid "Less..."
124msgid "Less..."
125msgstr "Menos..."
125msgstr "Menos..."
126
126
127−#: qml/Dash/Previews/PreviewRatingInput.qml:82
127+#: qml/Dash/Previews/PreviewRatingInput.qml:81
128msgid "Rate this"
128msgid "Rate this"
129msgstr "Classifique isto"
129msgstr "Classifique isto"
130
130
131−#: qml/Dash/Previews/PreviewRatingInput.qml:128
131+#: qml/Dash/Previews/PreviewRatingInput.qml:126
132msgid "Add a review"
132msgid "Add a review"
133msgstr "Adicione uma crítica"
133msgstr "Adicione uma crítica"
134
134
135−#: qml/Dash/Previews/PreviewRatingInput.qml:168
135+#: qml/Dash/Previews/PreviewRatingInput.qml:166
136msgid "Send"
136msgid "Send"
137msgstr "Enviar"
137msgstr "Enviar"
138
138
@@ -168,6 +168,14 @@ msgstr "Mostrar palavra-passe"
168msgid "Please enter SIM PIN"
168msgid "Please enter SIM PIN"
169msgstr "Por favor insira o PIN"
169msgstr "Por favor insira o PIN"
170
170
171+#: qml/Panel/ActiveCallHint.qml:77
172+msgid "Tap to return to call..."
173+msgstr "Tocar para ligar de volta..."
174+
175+#: qml/Panel/ActiveCallHint.qml:90
176+msgid "Conference"
177+msgstr "Conferência"
178+
171#: qml/Panel/Indicators/MenuItemFactory.qml:583
179#: qml/Panel/Indicators/MenuItemFactory.qml:583
172msgid "In queue…"
180msgid "In queue…"
173msgstr "Em fila..."
181msgstr "Em fila..."
po/pt_BR.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2014-07-17 05:46+0000\n"
11"PO-Revision-Date: 2014-07-17 05:46+0000\n"
12"Last-Translator: Tiago Hillebrandt <tiagohillebrandt@gmail.com>\n"
12"Last-Translator: Tiago Hillebrandt <tiagohillebrandt@gmail.com>\n"
13"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
13"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-18 05:28+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:17+0000\n"
18−"X-Generator: Launchpad (build 17114)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -84,10 +84,6 @@ msgstr "Chamada de emergência"
84msgid "OK"
84msgid "OK"
85msgstr "OK"
85msgstr "OK"
86
86
87−#: qml/Components/PageHeader.qml:366
88−msgid "Recent searches"
89−msgstr "Pesquisas recentes"
90−
91#: qml/Components/PassphraseLockscreen.qml:60
87#: qml/Components/PassphraseLockscreen.qml:60
92#, qt-format
88#, qt-format
93msgid "Hello %1"
89msgid "Hello %1"
@@ -109,7 +105,7 @@ msgstr ""
109msgid "See more"
105msgid "See more"
110msgstr "Ver mais"
106msgstr "Ver mais"
111
107
112−#: qml/Components/SeeMore.qml:58
108+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
113msgid "See less"
109msgid "See less"
114msgstr "Ver menos"
110msgstr "Ver menos"
115
111
@@ -117,6 +113,10 @@ msgstr "Ver menos"
117msgid "Recent"
113msgid "Recent"
118msgstr "Recentes"
114msgstr "Recentes"
119
115
116+#: qml/Dash/GenericScopeView.qml:330
117+msgid "See all"
118+msgstr ""
119+
120#: qml/Dash/Previews/PreviewActionCombo.qml:34
120#: qml/Dash/Previews/PreviewActionCombo.qml:34
121msgid "More..."
121msgid "More..."
122msgstr "Mais..."
122msgstr "Mais..."
@@ -125,15 +125,15 @@ msgstr "Mais..."
125msgid "Less..."
125msgid "Less..."
126msgstr "Menos..."
126msgstr "Menos..."
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:82
128+#: qml/Dash/Previews/PreviewRatingInput.qml:81
129msgid "Rate this"
129msgid "Rate this"
130msgstr "Avaliar isto"
130msgstr "Avaliar isto"
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:128
132+#: qml/Dash/Previews/PreviewRatingInput.qml:126
133msgid "Add a review"
133msgid "Add a review"
134msgstr "Adicionar uma análise"
134msgstr "Adicionar uma análise"
135
135
136−#: qml/Dash/Previews/PreviewRatingInput.qml:168
136+#: qml/Dash/Previews/PreviewRatingInput.qml:166
137msgid "Send"
137msgid "Send"
138msgstr "Enviar"
138msgstr "Enviar"
139
139
@@ -169,6 +169,14 @@ msgstr "Exibir senha"
169msgid "Please enter SIM PIN"
169msgid "Please enter SIM PIN"
170msgstr "Por favor, digite o PIN do cartão SIM"
170msgstr "Por favor, digite o PIN do cartão SIM"
171
171
172+#: qml/Panel/ActiveCallHint.qml:77
173+msgid "Tap to return to call..."
174+msgstr ""
175+
176+#: qml/Panel/ActiveCallHint.qml:90
177+msgid "Conference"
178+msgstr ""
179+
172#: qml/Panel/Indicators/MenuItemFactory.qml:583
180#: qml/Panel/Indicators/MenuItemFactory.qml:583
173msgid "In queue…"
181msgid "In queue…"
174msgstr ""
182msgstr ""
po/ro.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2013-06-27 07:53+0000\n"
11"PO-Revision-Date: 2013-06-27 07:53+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: Romanian <ro@li.org>\n"
13"Language-Team: Romanian <ro@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:17+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -80,10 +80,6 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr "Căutări recente"
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr ""
105msgid "See more"
101msgid "See more"
106msgstr ""
102msgstr ""
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr ""
106msgstr ""
111
107
@@ -113,6 +109,10 @@ msgstr ""
113msgid "Recent"
109msgid "Recent"
114msgstr ""
110msgstr ""
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr ""
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr ""
118msgstr ""
@@ -121,15 +121,15 @@ msgstr ""
121msgid "Less..."
121msgid "Less..."
122msgstr ""
122msgstr ""
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr ""
126msgstr ""
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr ""
130msgstr ""
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr ""
134msgstr ""
135
135
@@ -165,6 +165,14 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr ""
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr ""
178msgstr ""
po/ru.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2014-05-15 12:57+0000\n"
11"PO-Revision-Date: 2014-05-15 12:57+0000\n"
12"Last-Translator: Zonov Roman <Unknown>\n"
12"Last-Translator: Zonov Roman <Unknown>\n"
13"Language-Team: Russian <ru@li.org>\n"
13"Language-Team: Russian <ru@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:17+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -87,10 +87,6 @@ msgstr "Экстренный вызов"
87msgid "OK"
87msgid "OK"
88msgstr ""
88msgstr ""
89
89
90−#: qml/Components/PageHeader.qml:366
91−msgid "Recent searches"
92−msgstr "Последние поисковые запросы"
93−
94#: qml/Components/PassphraseLockscreen.qml:60
90#: qml/Components/PassphraseLockscreen.qml:60
95#, qt-format
91#, qt-format
96msgid "Hello %1"
92msgid "Hello %1"
@@ -112,7 +108,7 @@ msgstr ""
112msgid "See more"
108msgid "See more"
113msgstr "Подробнее"
109msgstr "Подробнее"
114
110
115−#: qml/Components/SeeMore.qml:58
111+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
116msgid "See less"
112msgid "See less"
117msgstr "Вкратце"
113msgstr "Вкратце"
118
114
@@ -120,6 +116,10 @@ msgstr "Вкратце"
120msgid "Recent"
116msgid "Recent"
121msgstr "Недавние"
117msgstr "Недавние"
122
118
119+#: qml/Dash/GenericScopeView.qml:330
120+msgid "See all"
121+msgstr ""
122+
123#: qml/Dash/Previews/PreviewActionCombo.qml:34
123#: qml/Dash/Previews/PreviewActionCombo.qml:34
124msgid "More..."
124msgid "More..."
125msgstr "Ещё..."
125msgstr "Ещё..."
@@ -128,15 +128,15 @@ msgstr "Ещё..."
128msgid "Less..."
128msgid "Less..."
129msgstr "Меньше..."
129msgstr "Меньше..."
130
130
131−#: qml/Dash/Previews/PreviewRatingInput.qml:82
131+#: qml/Dash/Previews/PreviewRatingInput.qml:81
132msgid "Rate this"
132msgid "Rate this"
133msgstr "Оцените это"
133msgstr "Оцените это"
134
134
135−#: qml/Dash/Previews/PreviewRatingInput.qml:128
135+#: qml/Dash/Previews/PreviewRatingInput.qml:126
136msgid "Add a review"
136msgid "Add a review"
137msgstr "Добавьте отзыв"
137msgstr "Добавьте отзыв"
138
138
139−#: qml/Dash/Previews/PreviewRatingInput.qml:168
139+#: qml/Dash/Previews/PreviewRatingInput.qml:166
140msgid "Send"
140msgid "Send"
141msgstr "Отправить"
141msgstr "Отправить"
142
142
@@ -172,6 +172,14 @@ msgstr "Показать пароль"
172msgid "Please enter SIM PIN"
172msgid "Please enter SIM PIN"
173msgstr "Введите PIN код"
173msgstr "Введите PIN код"
174
174
175+#: qml/Panel/ActiveCallHint.qml:77
176+msgid "Tap to return to call..."
177+msgstr ""
178+
179+#: qml/Panel/ActiveCallHint.qml:90
180+msgid "Conference"
181+msgstr ""
182+
175#: qml/Panel/Indicators/MenuItemFactory.qml:583
183#: qml/Panel/Indicators/MenuItemFactory.qml:583
176msgid "In queue…"
184msgid "In queue…"
177msgstr ""
185msgstr ""
po/shn.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2013-10-07 11:46+0000\n"
11"PO-Revision-Date: 2013-10-07 11:46+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Shan <shn@li.org>\n"
13"Language-Team: Shan <shn@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:17+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -80,10 +80,6 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr ""
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr ""
105msgid "See more"
101msgid "See more"
106msgstr ""
102msgstr ""
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr ""
106msgstr ""
111
107
@@ -113,6 +109,10 @@ msgstr ""
113msgid "Recent"
109msgid "Recent"
114msgstr ""
110msgstr ""
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr ""
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr ""
118msgstr ""
@@ -121,15 +121,15 @@ msgstr ""
121msgid "Less..."
121msgid "Less..."
122msgstr ""
122msgstr ""
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr ""
126msgstr ""
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr ""
130msgstr ""
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr ""
134msgstr ""
135
135
@@ -165,6 +165,14 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr ""
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr ""
178msgstr ""
po/si.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2013-06-26 22:36+0000\n"
11"PO-Revision-Date: 2013-06-26 22:36+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Sinhalese <si@li.org>\n"
13"Language-Team: Sinhalese <si@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:17+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -80,10 +80,6 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr ""
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr ""
105msgid "See more"
101msgid "See more"
106msgstr ""
102msgstr ""
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr ""
106msgstr ""
111
107
@@ -113,6 +109,10 @@ msgstr ""
113msgid "Recent"
109msgid "Recent"
114msgstr ""
110msgstr ""
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr ""
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr ""
118msgstr ""
@@ -121,15 +121,15 @@ msgstr ""
121msgid "Less..."
121msgid "Less..."
122msgstr ""
122msgstr ""
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr ""
126msgstr ""
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr ""
130msgstr ""
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr ""
134msgstr ""
135
135
@@ -165,6 +165,14 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr ""
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr ""
178msgstr ""
po/sl.po+28−20
@@ -7,24 +7,24 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11−"PO-Revision-Date: 2014-06-23 09:29+0000\n"
11+"PO-Revision-Date: 2014-07-28 12:32+0000\n"
12"Last-Translator: Damir Jerovšek <Unknown>\n"
12"Last-Translator: Damir Jerovšek <Unknown>\n"
13"Language-Team: Slovenian <sl@li.org>\n"
13"Language-Team: Slovenian <sl@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-29 06:54+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
22msgid "Pin shortcut"
22msgid "Pin shortcut"
23−msgstr ""
23+msgstr "Pripni bližnjico"
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26msgid "Unpin shortcut"
26msgid "Unpin shortcut"
27−msgstr ""
27+msgstr "Odpni bližnjico"
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -84,10 +84,6 @@ msgstr "Klic v sili"
84msgid "OK"
84msgid "OK"
85msgstr "V REDU"
85msgstr "V REDU"
86
86
87−#: qml/Components/PageHeader.qml:366
88−msgid "Recent searches"
89−msgstr "Nedavna iskanja"
90−
91#: qml/Components/PassphraseLockscreen.qml:60
87#: qml/Components/PassphraseLockscreen.qml:60
92#, qt-format
88#, qt-format
93msgid "Hello %1"
89msgid "Hello %1"
@@ -109,7 +105,7 @@ msgstr "KONČANO"
109msgid "See more"
105msgid "See more"
110msgstr "Pokaži več"
106msgstr "Pokaži več"
111
107
112−#: qml/Components/SeeMore.qml:58
108+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
113msgid "See less"
109msgid "See less"
114msgstr "Pokaži manj"
110msgstr "Pokaži manj"
115
111
@@ -117,6 +113,10 @@ msgstr "Pokaži manj"
117msgid "Recent"
113msgid "Recent"
118msgstr "Nedavno"
114msgstr "Nedavno"
119
115
116+#: qml/Dash/GenericScopeView.qml:330
117+msgid "See all"
118+msgstr ""
119+
120#: qml/Dash/Previews/PreviewActionCombo.qml:34
120#: qml/Dash/Previews/PreviewActionCombo.qml:34
121msgid "More..."
121msgid "More..."
122msgstr "Več ..."
122msgstr "Več ..."
@@ -125,15 +125,15 @@ msgstr "Več ..."
125msgid "Less..."
125msgid "Less..."
126msgstr "Manj ..."
126msgstr "Manj ..."
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:82
128+#: qml/Dash/Previews/PreviewRatingInput.qml:81
129msgid "Rate this"
129msgid "Rate this"
130msgstr "Ocenite"
130msgstr "Ocenite"
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:128
132+#: qml/Dash/Previews/PreviewRatingInput.qml:126
133msgid "Add a review"
133msgid "Add a review"
134msgstr "Dodaj oceno"
134msgstr "Dodaj oceno"
135
135
136−#: qml/Dash/Previews/PreviewRatingInput.qml:168
136+#: qml/Dash/Previews/PreviewRatingInput.qml:166
137msgid "Send"
137msgid "Send"
138msgstr "Pošlji"
138msgstr "Pošlji"
139
139
@@ -169,29 +169,37 @@ msgstr "Pokaži geslo"
169msgid "Please enter SIM PIN"
169msgid "Please enter SIM PIN"
170msgstr "Vnesite PIN kartice SIM"
170msgstr "Vnesite PIN kartice SIM"
171
171
172+#: qml/Panel/ActiveCallHint.qml:77
173+msgid "Tap to return to call..."
174+msgstr "Tapnite za vrnitev v klic ..."
175+
176+#: qml/Panel/ActiveCallHint.qml:90
177+msgid "Conference"
178+msgstr "Konferenca"
179+
172#: qml/Panel/Indicators/MenuItemFactory.qml:583
180#: qml/Panel/Indicators/MenuItemFactory.qml:583
173msgid "In queue…"
181msgid "In queue…"
174−msgstr ""
182+msgstr "V vrsti ..."
175
183
176#: qml/Panel/Indicators/MenuItemFactory.qml:587
184#: qml/Panel/Indicators/MenuItemFactory.qml:587
177msgid "Downloading"
185msgid "Downloading"
178−msgstr ""
186+msgstr "Prejemanje"
179
187
180#: qml/Panel/Indicators/MenuItemFactory.qml:589
188#: qml/Panel/Indicators/MenuItemFactory.qml:589
181msgid "Paused, tap to resume"
189msgid "Paused, tap to resume"
182−msgstr ""
190+msgstr "Premor, tapnite za nadaljevanje"
183
191
184#: qml/Panel/Indicators/MenuItemFactory.qml:591
192#: qml/Panel/Indicators/MenuItemFactory.qml:591
185msgid "Canceled"
193msgid "Canceled"
186−msgstr ""
194+msgstr "Preklicano"
187
195
188#: qml/Panel/Indicators/MenuItemFactory.qml:593
196#: qml/Panel/Indicators/MenuItemFactory.qml:593
189msgid "Finished"
197msgid "Finished"
190−msgstr ""
198+msgstr "Končano"
191
199
192#: qml/Panel/Indicators/MenuItemFactory.qml:595
200#: qml/Panel/Indicators/MenuItemFactory.qml:595
193msgid "Failed, tap to retry"
201msgid "Failed, tap to retry"
194−msgstr ""
202+msgstr "Spodletelo, tapnite za ponovni poskus"
195
203
196#: qml/Panel/SearchIndicator.qml:27
204#: qml/Panel/SearchIndicator.qml:27
197msgid "Search"
205msgid "Search"
po/sq.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2014-01-15 13:51+0000\n"
11"PO-Revision-Date: 2014-01-15 13:51+0000\n"
12"Last-Translator: Besmir Zanaj <besmirzanaj@gmail.com>\n"
12"Last-Translator: Besmir Zanaj <besmirzanaj@gmail.com>\n"
13"Language-Team: Albanian <sq@li.org>\n"
13"Language-Team: Albanian <sq@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:36+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:16+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -81,10 +81,6 @@ msgstr ""
81msgid "OK"
81msgid "OK"
82msgstr ""
82msgstr ""
83
83
84−#: qml/Components/PageHeader.qml:366
85−msgid "Recent searches"
86−msgstr ""
87−
88#: qml/Components/PassphraseLockscreen.qml:60
84#: qml/Components/PassphraseLockscreen.qml:60
89#, qt-format
85#, qt-format
90msgid "Hello %1"
86msgid "Hello %1"
@@ -106,7 +102,7 @@ msgstr ""
106msgid "See more"
102msgid "See more"
107msgstr ""
103msgstr ""
108
104
109−#: qml/Components/SeeMore.qml:58
105+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
110msgid "See less"
106msgid "See less"
111msgstr ""
107msgstr ""
112
108
@@ -114,6 +110,10 @@ msgstr ""
114msgid "Recent"
110msgid "Recent"
115msgstr ""
111msgstr ""
116
112
113+#: qml/Dash/GenericScopeView.qml:330
114+msgid "See all"
115+msgstr ""
116+
117#: qml/Dash/Previews/PreviewActionCombo.qml:34
117#: qml/Dash/Previews/PreviewActionCombo.qml:34
118msgid "More..."
118msgid "More..."
119msgstr ""
119msgstr ""
@@ -122,15 +122,15 @@ msgstr ""
122msgid "Less..."
122msgid "Less..."
123msgstr ""
123msgstr ""
124
124
125−#: qml/Dash/Previews/PreviewRatingInput.qml:82
125+#: qml/Dash/Previews/PreviewRatingInput.qml:81
126msgid "Rate this"
126msgid "Rate this"
127msgstr "Vlerësoje këtë"
127msgstr "Vlerësoje këtë"
128
128
129−#: qml/Dash/Previews/PreviewRatingInput.qml:128
129+#: qml/Dash/Previews/PreviewRatingInput.qml:126
130msgid "Add a review"
130msgid "Add a review"
131msgstr "Shto një rishikim"
131msgstr "Shto një rishikim"
132
132
133−#: qml/Dash/Previews/PreviewRatingInput.qml:168
133+#: qml/Dash/Previews/PreviewRatingInput.qml:166
134msgid "Send"
134msgid "Send"
135msgstr ""
135msgstr ""
136
136
@@ -166,6 +166,14 @@ msgstr ""
166msgid "Please enter SIM PIN"
166msgid "Please enter SIM PIN"
167msgstr ""
167msgstr ""
168
168
169+#: qml/Panel/ActiveCallHint.qml:77
170+msgid "Tap to return to call..."
171+msgstr ""
172+
173+#: qml/Panel/ActiveCallHint.qml:90
174+msgid "Conference"
175+msgstr ""
176+
169#: qml/Panel/Indicators/MenuItemFactory.qml:583
177#: qml/Panel/Indicators/MenuItemFactory.qml:583
170msgid "In queue…"
178msgid "In queue…"
171msgstr ""
179msgstr ""
po/sr.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2013-06-27 09:19+0000\n"
11"PO-Revision-Date: 2013-06-27 09:19+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: Serbian <sr@li.org>\n"
13"Language-Team: Serbian <sr@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:17+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -80,10 +80,6 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr "Скорашње претраге"
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr ""
105msgid "See more"
101msgid "See more"
106msgstr ""
102msgstr ""
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr ""
106msgstr ""
111
107
@@ -113,6 +109,10 @@ msgstr ""
113msgid "Recent"
109msgid "Recent"
114msgstr ""
110msgstr ""
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr ""
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr ""
118msgstr ""
@@ -121,15 +121,15 @@ msgstr ""
121msgid "Less..."
121msgid "Less..."
122msgstr ""
122msgstr ""
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr ""
126msgstr ""
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr ""
130msgstr ""
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr ""
134msgstr ""
135
135
@@ -165,6 +165,14 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr ""
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr ""
178msgstr ""
po/sv.po+37−28
@@ -1,21 +1,22 @@
1# Swedish translation for unity
1# Swedish translation for unity
2−# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
2+# Copyright © 2013-2014 Rosetta Contributors and Canonical Ltd 2013-2014
3# This file is distributed under the same license as the unity package.
3# This file is distributed under the same license as the unity package.
4−# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
4+# Josef Andersson <josef.andersson@fripost.org>, 2014.
5#
5#
6msgid ""
6msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11−"PO-Revision-Date: 2014-07-20 19:14+0000\n"
11+"PO-Revision-Date: 2014-07-25 14:27+0000\n"
12−"Last-Translator: Gunnar Hjalmarsson <Unknown>\n"
12+"Last-Translator: Josef Andersson <Unknown>\n"
13−"Language-Team: Swedish <sv@li.org>\n"
13+"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-21 07:05+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:17+0000\n"
18−"X-Generator: Launchpad (build 17114)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19+"Language: sv\n"
19
20
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
22#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -28,7 +29,7 @@ msgstr "Släpp genväg"
28
29
29#: qml/Components/EdgeDemoOverlay.qml:151
30#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
31msgid "Skip intro"
31−msgstr "Skippa intro"
32+msgstr "Hoppa över introduktion"
32
33
33#: qml/Components/EdgeDemo.qml:113
34#: qml/Components/EdgeDemo.qml:113
34msgid "Right edge"
35msgid "Right edge"
@@ -36,7 +37,7 @@ msgstr "Högerkant"
36
37
37#: qml/Components/EdgeDemo.qml:114
38#: qml/Components/EdgeDemo.qml:114
38msgid "Try swiping from the right edge to unlock the phone"
39msgid "Try swiping from the right edge to unlock the phone"
39−msgstr "Dra med fingret från höger för att låsa upp telefonen"
40+msgstr "Svep från höger för att låsa upp telefonen"
40
41
41#: qml/Components/EdgeDemo.qml:145
42#: qml/Components/EdgeDemo.qml:145
42msgid "Top edge"
43msgid "Top edge"
@@ -71,8 +72,8 @@ msgid ""
71"You have now mastered the edge gestures and can start using the "
72"You have now mastered the edge gestures and can start using the "
72"phone<br><br>Tap on the screen to start"
73"phone<br><br>Tap on the screen to start"
73msgstr ""
74msgstr ""
74−"Du har nu bemästrat kantgesterna och kan börja använda telefonen<br><br>Peka "
75+"Du har nu bemästrat kantgesterna och kan börja använda "
75−"på skärmen för att starta"
76+"telefonen<br><br>Tryck på skärmen för att starta"
76
77
77#: qml/Components/Lockscreen.qml:214
78#: qml/Components/Lockscreen.qml:214
78msgid "Emergency Call"
79msgid "Emergency Call"
@@ -82,10 +83,6 @@ msgstr "Nödsamtal"
82msgid "OK"
83msgid "OK"
83msgstr "Ok"
84msgstr "Ok"
84
85
85−#: qml/Components/PageHeader.qml:366
86−msgid "Recent searches"
87−msgstr "Senaste sökningar"
88−
89#: qml/Components/PassphraseLockscreen.qml:60
86#: qml/Components/PassphraseLockscreen.qml:60
90#, qt-format
87#, qt-format
91msgid "Hello %1"
88msgid "Hello %1"
@@ -107,7 +104,7 @@ msgstr "KLAR"
107msgid "See more"
104msgid "See more"
108msgstr "Se mer"
105msgstr "Se mer"
109
106
110−#: qml/Components/SeeMore.qml:58
107+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
111msgid "See less"
108msgid "See less"
112msgstr "Se mindre"
109msgstr "Se mindre"
113
110
@@ -115,23 +112,27 @@ msgstr "Se mindre"
115msgid "Recent"
112msgid "Recent"
116msgstr "Senaste"
113msgstr "Senaste"
117
114
115+#: qml/Dash/GenericScopeView.qml:330
116+msgid "See all"
117+msgstr "Visa alla"
118+
118#: qml/Dash/Previews/PreviewActionCombo.qml:34
119#: qml/Dash/Previews/PreviewActionCombo.qml:34
119msgid "More..."
120msgid "More..."
120−msgstr "Mer..."
121+msgstr "Mer…"
121
122
122#: qml/Dash/Previews/PreviewActionCombo.qml:34
123#: qml/Dash/Previews/PreviewActionCombo.qml:34
123msgid "Less..."
124msgid "Less..."
124−msgstr "Mindre..."
125+msgstr "Mindre…"
125
126
126−#: qml/Dash/Previews/PreviewRatingInput.qml:82
127+#: qml/Dash/Previews/PreviewRatingInput.qml:81
127msgid "Rate this"
128msgid "Rate this"
128msgstr "Betygsätt detta"
129msgstr "Betygsätt detta"
129
130
130−#: qml/Dash/Previews/PreviewRatingInput.qml:128
131+#: qml/Dash/Previews/PreviewRatingInput.qml:126
131msgid "Add a review"
132msgid "Add a review"
132msgstr "Lägg till en recension"
133msgstr "Lägg till en recension"
133
134
134−#: qml/Dash/Previews/PreviewRatingInput.qml:168
135+#: qml/Dash/Previews/PreviewRatingInput.qml:166
135msgid "Send"
136msgid "Send"
136msgstr "Skicka"
137msgstr "Skicka"
137
138
@@ -149,15 +150,15 @@ msgstr "Skriv eller tala in ett kommando"
149
150
150#: qml/Hud/Hud.qml:84
151#: qml/Hud/Hud.qml:84
151msgid "Loading. Please Wait..."
152msgid "Loading. Please Wait..."
152−msgstr "Laddar. Var god vänta..."
153+msgstr "Läser in. Var god vänta…"
153
154
154#: qml/Hud/Hud.qml:89
155#: qml/Hud/Hud.qml:89
155msgid "Speak Now..."
156msgid "Speak Now..."
156−msgstr "Tala nu..."
157+msgstr "Tala nu…"
157
158
158#: qml/Hud/Hud.qml:94
159#: qml/Hud/Hud.qml:94
159msgid "Speaking..."
160msgid "Speaking..."
160−msgstr "Talar..."
161+msgstr "Talar…"
161
162
162#: qml/Notifications/NotificationMenuItemFactory.qml:91
163#: qml/Notifications/NotificationMenuItemFactory.qml:91
163msgid "Show password"
164msgid "Show password"
@@ -167,9 +168,17 @@ msgstr "Visa lösenord"
167msgid "Please enter SIM PIN"
168msgid "Please enter SIM PIN"
168msgstr "Ange SIM PIN-kod"
169msgstr "Ange SIM PIN-kod"
169
170
171+#: qml/Panel/ActiveCallHint.qml:77
172+msgid "Tap to return to call..."
173+msgstr "Tryck för att återgå till samtal..."
174+
175+#: qml/Panel/ActiveCallHint.qml:90
176+msgid "Conference"
177+msgstr "Konferens"
178+
170#: qml/Panel/Indicators/MenuItemFactory.qml:583
179#: qml/Panel/Indicators/MenuItemFactory.qml:583
171msgid "In queue…"
180msgid "In queue…"
172−msgstr "I kö..."
181+msgstr "I kö…"
173
182
174#: qml/Panel/Indicators/MenuItemFactory.qml:587
183#: qml/Panel/Indicators/MenuItemFactory.qml:587
175msgid "Downloading"
184msgid "Downloading"
@@ -177,7 +186,7 @@ msgstr "Hämtar"
177
186
178#: qml/Panel/Indicators/MenuItemFactory.qml:589
187#: qml/Panel/Indicators/MenuItemFactory.qml:589
179msgid "Paused, tap to resume"
188msgid "Paused, tap to resume"
180−msgstr "Pausad, peka för att fortsätta"
189+msgstr "Pausad, tryck för att fortsätta"
181
190
182#: qml/Panel/Indicators/MenuItemFactory.qml:591
191#: qml/Panel/Indicators/MenuItemFactory.qml:591
183msgid "Canceled"
192msgid "Canceled"
@@ -189,7 +198,7 @@ msgstr "Klart"
189
198
190#: qml/Panel/Indicators/MenuItemFactory.qml:595
199#: qml/Panel/Indicators/MenuItemFactory.qml:595
191msgid "Failed, tap to retry"
200msgid "Failed, tap to retry"
192−msgstr "Misslyckades, peka för att försöka igen"
201+msgstr "Misslyckades, tryck för att försöka igen"
193
202
194#: qml/Panel/SearchIndicator.qml:27
203#: qml/Panel/SearchIndicator.qml:27
195msgid "Search"
204msgid "Search"
po/sw.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2014-01-14 19:28+0000\n"
11"PO-Revision-Date: 2014-01-14 19:28+0000\n"
12"Last-Translator: Damas <Unknown>\n"
12"Last-Translator: Damas <Unknown>\n"
13"Language-Team: Swahili <sw@li.org>\n"
13"Language-Team: Swahili <sw@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:17+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -80,10 +80,6 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr ""
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr ""
105msgid "See more"
101msgid "See more"
106msgstr ""
102msgstr ""
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr ""
106msgstr ""
111
107
@@ -113,6 +109,10 @@ msgstr ""
113msgid "Recent"
109msgid "Recent"
114msgstr ""
110msgstr ""
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr ""
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr ""
118msgstr ""
@@ -121,15 +121,15 @@ msgstr ""
121msgid "Less..."
121msgid "Less..."
122msgstr ""
122msgstr ""
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr ""
126msgstr ""
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr ""
130msgstr ""
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr "Tuma"
134msgstr "Tuma"
135
135
@@ -165,6 +165,14 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr ""
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr ""
178msgstr ""
po/ta.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2013-10-24 11:36+0000\n"
11"PO-Revision-Date: 2013-10-24 11:36+0000\n"
12"Last-Translator: Arun Kumar - அருண் குமார் <thangam.arunx@gmail.com>\n"
12"Last-Translator: Arun Kumar - அருண் குமார் <thangam.arunx@gmail.com>\n"
13"Language-Team: Ubuntu Tamil Team/Free Tamil Computing/Thamizha\n"
13"Language-Team: Ubuntu Tamil Team/Free Tamil Computing/Thamizha\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:17+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19"Language: ta\n"
19"Language: ta\n"
20
20
21#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:43
@@ -83,10 +83,6 @@ msgstr "அவசர அழைப்பு"
83msgid "OK"
83msgid "OK"
84msgstr ""
84msgstr ""
85
85
86−#: qml/Components/PageHeader.qml:366
87−msgid "Recent searches"
88−msgstr "கடையாக தேடப்பட்டவைகள்"
89−
90#: qml/Components/PassphraseLockscreen.qml:60
86#: qml/Components/PassphraseLockscreen.qml:60
91#, qt-format
87#, qt-format
92msgid "Hello %1"
88msgid "Hello %1"
@@ -108,7 +104,7 @@ msgstr ""
108msgid "See more"
104msgid "See more"
109msgstr ""
105msgstr ""
110
106
111−#: qml/Components/SeeMore.qml:58
107+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
112msgid "See less"
108msgid "See less"
113msgstr ""
109msgstr ""
114
110
@@ -116,6 +112,10 @@ msgstr ""
116msgid "Recent"
112msgid "Recent"
117msgstr ""
113msgstr ""
118
114
115+#: qml/Dash/GenericScopeView.qml:330
116+msgid "See all"
117+msgstr ""
118+
119#: qml/Dash/Previews/PreviewActionCombo.qml:34
119#: qml/Dash/Previews/PreviewActionCombo.qml:34
120msgid "More..."
120msgid "More..."
121msgstr ""
121msgstr ""
@@ -124,15 +124,15 @@ msgstr ""
124msgid "Less..."
124msgid "Less..."
125msgstr ""
125msgstr ""
126
126
127−#: qml/Dash/Previews/PreviewRatingInput.qml:82
127+#: qml/Dash/Previews/PreviewRatingInput.qml:81
128msgid "Rate this"
128msgid "Rate this"
129msgstr "இதை மதிப்பிடு"
129msgstr "இதை மதிப்பிடு"
130
130
131−#: qml/Dash/Previews/PreviewRatingInput.qml:128
131+#: qml/Dash/Previews/PreviewRatingInput.qml:126
132msgid "Add a review"
132msgid "Add a review"
133msgstr "ஒரு பரிசீலனையை சேர்"
133msgstr "ஒரு பரிசீலனையை சேர்"
134
134
135−#: qml/Dash/Previews/PreviewRatingInput.qml:168
135+#: qml/Dash/Previews/PreviewRatingInput.qml:166
136msgid "Send"
136msgid "Send"
137msgstr "அனுப்பு"
137msgstr "அனுப்பு"
138
138
@@ -168,6 +168,14 @@ msgstr ""
168msgid "Please enter SIM PIN"
168msgid "Please enter SIM PIN"
169msgstr ""
169msgstr ""
170
170
171+#: qml/Panel/ActiveCallHint.qml:77
172+msgid "Tap to return to call..."
173+msgstr ""
174+
175+#: qml/Panel/ActiveCallHint.qml:90
176+msgid "Conference"
177+msgstr ""
178+
171#: qml/Panel/Indicators/MenuItemFactory.qml:583
179#: qml/Panel/Indicators/MenuItemFactory.qml:583
172msgid "In queue…"
180msgid "In queue…"
173msgstr ""
181msgstr ""
po/te.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2014-07-19 10:04+0000\n"
11"PO-Revision-Date: 2014-07-19 10:04+0000\n"
12"Last-Translator: Praveen Illa <mail2ipn@gmail.com>\n"
12"Last-Translator: Praveen Illa <mail2ipn@gmail.com>\n"
13"Language-Team: Telugu <te@li.org>\n"
13"Language-Team: Telugu <te@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-20 06:18+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:17+0000\n"
18−"X-Generator: Launchpad (build 17114)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -80,10 +80,6 @@ msgstr "అత్యవసర పిలుపు"
80msgid "OK"
80msgid "OK"
81msgstr "సరే"
81msgstr "సరే"
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr "ఇటీవలి వెతుకులాటలు"
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr "పూర్తయ్యింది"
105msgid "See more"
101msgid "See more"
106msgstr "మరింత చూడండి"
102msgstr "మరింత చూడండి"
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr ""
106msgstr ""
111
107
@@ -113,6 +109,10 @@ msgstr ""
113msgid "Recent"
109msgid "Recent"
114msgstr "ఇటీవలివి"
110msgstr "ఇటీవలివి"
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr ""
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr "మరిన్ని..."
118msgstr "మరిన్ని..."
@@ -121,15 +121,15 @@ msgstr "మరిన్ని..."
121msgid "Less..."
121msgid "Less..."
122msgstr ""
122msgstr ""
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr ""
126msgstr ""
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr "ఒక సమీక్షను వ్రాయండి"
130msgstr "ఒక సమీక్షను వ్రాయండి"
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr "పంపు"
134msgstr "పంపు"
135
135
@@ -165,6 +165,14 @@ msgstr "సంకేతపదాన్ని చూపించు"
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr "దయచేసి సిమ్ పిన్ ఇవ్వండి"
166msgstr "దయచేసి సిమ్ పిన్ ఇవ్వండి"
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr ""
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr ""
178msgstr ""
po/tr.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2014-07-16 17:58+0000\n"
11"PO-Revision-Date: 2014-07-16 17:58+0000\n"
12"Last-Translator: Volkan Gezer <Unknown>\n"
12"Last-Translator: Volkan Gezer <Unknown>\n"
13"Language-Team: Turkish <tr@li.org>\n"
13"Language-Team: Turkish <tr@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-17 06:38+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:17+0000\n"
18−"X-Generator: Launchpad (build 17114)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -83,10 +83,6 @@ msgstr "Acil Arama"
83msgid "OK"
83msgid "OK"
84msgstr "Tamam"
84msgstr "Tamam"
85
85
86−#: qml/Components/PageHeader.qml:366
87−msgid "Recent searches"
88−msgstr "Son aramalar"
89−
90#: qml/Components/PassphraseLockscreen.qml:60
86#: qml/Components/PassphraseLockscreen.qml:60
91#, qt-format
87#, qt-format
92msgid "Hello %1"
88msgid "Hello %1"
@@ -108,7 +104,7 @@ msgstr "BİTTİ"
108msgid "See more"
104msgid "See more"
109msgstr "Daha fazlası"
105msgstr "Daha fazlası"
110
106
111−#: qml/Components/SeeMore.qml:58
107+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
112msgid "See less"
108msgid "See less"
113msgstr "Daha azını gör"
109msgstr "Daha azını gör"
114
110
@@ -116,6 +112,10 @@ msgstr "Daha azını gör"
116msgid "Recent"
112msgid "Recent"
117msgstr "En son"
113msgstr "En son"
118
114
115+#: qml/Dash/GenericScopeView.qml:330
116+msgid "See all"
117+msgstr ""
118+
119#: qml/Dash/Previews/PreviewActionCombo.qml:34
119#: qml/Dash/Previews/PreviewActionCombo.qml:34
120msgid "More..."
120msgid "More..."
121msgstr "Daha fazlası..."
121msgstr "Daha fazlası..."
@@ -124,15 +124,15 @@ msgstr "Daha fazlası..."
124msgid "Less..."
124msgid "Less..."
125msgstr "Daha az.."
125msgstr "Daha az.."
126
126
127−#: qml/Dash/Previews/PreviewRatingInput.qml:82
127+#: qml/Dash/Previews/PreviewRatingInput.qml:81
128msgid "Rate this"
128msgid "Rate this"
129msgstr "Oyla"
129msgstr "Oyla"
130
130
131−#: qml/Dash/Previews/PreviewRatingInput.qml:128
131+#: qml/Dash/Previews/PreviewRatingInput.qml:126
132msgid "Add a review"
132msgid "Add a review"
133msgstr "Bir inceleme ekle"
133msgstr "Bir inceleme ekle"
134
134
135−#: qml/Dash/Previews/PreviewRatingInput.qml:168
135+#: qml/Dash/Previews/PreviewRatingInput.qml:166
136msgid "Send"
136msgid "Send"
137msgstr "Gönder"
137msgstr "Gönder"
138
138
@@ -168,6 +168,14 @@ msgstr "Parolayı göster"
168msgid "Please enter SIM PIN"
168msgid "Please enter SIM PIN"
169msgstr "Lütfen SIM PIN'inizi girin"
169msgstr "Lütfen SIM PIN'inizi girin"
170
170
171+#: qml/Panel/ActiveCallHint.qml:77
172+msgid "Tap to return to call..."
173+msgstr ""
174+
175+#: qml/Panel/ActiveCallHint.qml:90
176+msgid "Conference"
177+msgstr ""
178+
171#: qml/Panel/Indicators/MenuItemFactory.qml:583
179#: qml/Panel/Indicators/MenuItemFactory.qml:583
172msgid "In queue…"
180msgid "In queue…"
173msgstr "Beklemede..."
181msgstr "Beklemede..."
po/ug.po+20−12
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11−"PO-Revision-Date: 2014-07-21 02:30+0000\n"
11+"PO-Revision-Date: 2014-07-29 04:06+0000\n"
12"Last-Translator: Gheyret T.Kenji <Unknown>\n"
12"Last-Translator: Gheyret T.Kenji <Unknown>\n"
13"Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\n"
13"Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-22 07:17+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-30 07:08+0000\n"
18−"X-Generator: Launchpad (build 17114)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -82,10 +82,6 @@ msgstr "جىددىي تېلېفون"
82msgid "OK"
82msgid "OK"
83msgstr "تامام"
83msgstr "تامام"
84
84
85−#: qml/Components/PageHeader.qml:366
86−msgid "Recent searches"
87−msgstr "يېقىنقى ئىزدەشلەر"
88−
89#: qml/Components/PassphraseLockscreen.qml:60
85#: qml/Components/PassphraseLockscreen.qml:60
90#, qt-format
86#, qt-format
91msgid "Hello %1"
87msgid "Hello %1"
@@ -107,7 +103,7 @@ msgstr "تامام"
107msgid "See more"
103msgid "See more"
108msgstr "جىقراق كۆرۈش"
104msgstr "جىقراق كۆرۈش"
109
105
110−#: qml/Components/SeeMore.qml:58
106+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
111msgid "See less"
107msgid "See less"
112msgstr "ئازراق كۆرۈش"
108msgstr "ئازراق كۆرۈش"
113
109
@@ -115,6 +111,10 @@ msgstr "ئازراق كۆرۈش"
115msgid "Recent"
111msgid "Recent"
116msgstr "يېقىنقى"
112msgstr "يېقىنقى"
117
113
114+#: qml/Dash/GenericScopeView.qml:330
115+msgid "See all"
116+msgstr "ھەممىنى كۆرۈش…"
117+
118#: qml/Dash/Previews/PreviewActionCombo.qml:34
118#: qml/Dash/Previews/PreviewActionCombo.qml:34
119msgid "More..."
119msgid "More..."
120msgstr "تېخىمۇ كۆپ…"
120msgstr "تېخىمۇ كۆپ…"
@@ -123,15 +123,15 @@ msgstr "تېخىمۇ كۆپ…"
123msgid "Less..."
123msgid "Less..."
124msgstr "ئازراق..."
124msgstr "ئازراق..."
125
125
126−#: qml/Dash/Previews/PreviewRatingInput.qml:82
126+#: qml/Dash/Previews/PreviewRatingInput.qml:81
127msgid "Rate this"
127msgid "Rate this"
128msgstr "بۇنى باھالاڭ"
128msgstr "بۇنى باھالاڭ"
129
129
130−#: qml/Dash/Previews/PreviewRatingInput.qml:128
130+#: qml/Dash/Previews/PreviewRatingInput.qml:126
131msgid "Add a review"
131msgid "Add a review"
132msgstr "باھا قوشۇش"
132msgstr "باھا قوشۇش"
133
133
134−#: qml/Dash/Previews/PreviewRatingInput.qml:168
134+#: qml/Dash/Previews/PreviewRatingInput.qml:166
135msgid "Send"
135msgid "Send"
136msgstr "ئەۋەت"
136msgstr "ئەۋەت"
137
137
@@ -167,6 +167,14 @@ msgstr "ئىم كۆرسەت"
167msgid "Please enter SIM PIN"
167msgid "Please enter SIM PIN"
168msgstr "سىم(SIM) كارتىڭىزنىڭ PIN نومۇرىنى كىرگۈزۈڭ"
168msgstr "سىم(SIM) كارتىڭىزنىڭ PIN نومۇرىنى كىرگۈزۈڭ"
169
169
170+#: qml/Panel/ActiveCallHint.qml:77
171+msgid "Tap to return to call..."
172+msgstr "سۆزلىشىشكە قايتىش ئۈچۈن چېكىڭ…"
173+
174+#: qml/Panel/ActiveCallHint.qml:90
175+msgid "Conference"
176+msgstr "يىغىن"
177+
170#: qml/Panel/Indicators/MenuItemFactory.qml:583
178#: qml/Panel/Indicators/MenuItemFactory.qml:583
171msgid "In queue…"
179msgid "In queue…"
172msgstr "قاتاردا…"
180msgstr "قاتاردا…"
po/uk.po+20−12
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11−"PO-Revision-Date: 2014-07-13 17:03+0000\n"
11+"PO-Revision-Date: 2014-07-29 07:53+0000\n"
12"Last-Translator: Yuri Chornoivan <yurchor@gmail.com>\n"
12"Last-Translator: Yuri Chornoivan <yurchor@gmail.com>\n"
13"Language-Team: Ukrainian <uk@li.org>\n"
13"Language-Team: Ukrainian <uk@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-14 07:10+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-30 07:08+0000\n"
18−"X-Generator: Launchpad (build 17111)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -85,10 +85,6 @@ msgstr "Терміновий виклик"
85msgid "OK"
85msgid "OK"
86msgstr "Гаразд"
86msgstr "Гаразд"
87
87
88−#: qml/Components/PageHeader.qml:366
89−msgid "Recent searches"
90−msgstr "Нещодавні пошуки"
91−
92#: qml/Components/PassphraseLockscreen.qml:60
88#: qml/Components/PassphraseLockscreen.qml:60
93#, qt-format
89#, qt-format
94msgid "Hello %1"
90msgid "Hello %1"
@@ -110,7 +106,7 @@ msgstr "Виконано"
110msgid "See more"
106msgid "See more"
111msgstr "Докладніше"
107msgstr "Докладніше"
112
108
113−#: qml/Components/SeeMore.qml:58
109+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
114msgid "See less"
110msgid "See less"
115msgstr "Стисліше"
111msgstr "Стисліше"
116
112
@@ -118,6 +114,10 @@ msgstr "Стисліше"
118msgid "Recent"
114msgid "Recent"
119msgstr "Нещодавні"
115msgstr "Нещодавні"
120
116
117+#: qml/Dash/GenericScopeView.qml:330
118+msgid "See all"
119+msgstr "Детальніше"
120+
121#: qml/Dash/Previews/PreviewActionCombo.qml:34
121#: qml/Dash/Previews/PreviewActionCombo.qml:34
122msgid "More..."
122msgid "More..."
123msgstr "Більше…"
123msgstr "Більше…"
@@ -126,15 +126,15 @@ msgstr "Більше…"
126msgid "Less..."
126msgid "Less..."
127msgstr "Менше..."
127msgstr "Менше..."
128
128
129−#: qml/Dash/Previews/PreviewRatingInput.qml:82
129+#: qml/Dash/Previews/PreviewRatingInput.qml:81
130msgid "Rate this"
130msgid "Rate this"
131msgstr "Оцінити"
131msgstr "Оцінити"
132
132
133−#: qml/Dash/Previews/PreviewRatingInput.qml:128
133+#: qml/Dash/Previews/PreviewRatingInput.qml:126
134msgid "Add a review"
134msgid "Add a review"
135msgstr "Додати рецензію"
135msgstr "Додати рецензію"
136
136
137−#: qml/Dash/Previews/PreviewRatingInput.qml:168
137+#: qml/Dash/Previews/PreviewRatingInput.qml:166
138msgid "Send"
138msgid "Send"
139msgstr "Надіслати"
139msgstr "Надіслати"
140
140
@@ -170,6 +170,14 @@ msgstr "Показати пароль"
170msgid "Please enter SIM PIN"
170msgid "Please enter SIM PIN"
171msgstr "Введіть PIN-код SIM-картки"
171msgstr "Введіть PIN-код SIM-картки"
172
172
173+#: qml/Panel/ActiveCallHint.qml:77
174+msgid "Tap to return to call..."
175+msgstr "Торкніться, щоб повернутися до дзвінка…"
176+
177+#: qml/Panel/ActiveCallHint.qml:90
178+msgid "Conference"
179+msgstr "Конференція"
180+
173#: qml/Panel/Indicators/MenuItemFactory.qml:583
181#: qml/Panel/Indicators/MenuItemFactory.qml:583
174msgid "In queue…"
182msgid "In queue…"
175msgstr "У черзі…"
183msgstr "У черзі…"
po/unity8.pot+17−9
@@ -8,7 +8,7 @@ msgid ""
8msgstr ""
8msgstr ""
9"Project-Id-Version: unity8\n"
9"Project-Id-Version: unity8\n"
10"Report-Msgid-Bugs-To: \n"
10"Report-Msgid-Bugs-To: \n"
11−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -80,10 +80,6 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr ""
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr ""
105msgid "See more"
101msgid "See more"
106msgstr ""
102msgstr ""
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr ""
106msgstr ""
111
107
@@ -113,6 +109,10 @@ msgstr ""
113msgid "Recent"
109msgid "Recent"
114msgstr ""
110msgstr ""
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr ""
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr ""
118msgstr ""
@@ -121,15 +121,15 @@ msgstr ""
121msgid "Less..."
121msgid "Less..."
122msgstr ""
122msgstr ""
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr ""
126msgstr ""
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr ""
130msgstr ""
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr ""
134msgstr ""
135
135
@@ -165,6 +165,14 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr ""
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr ""
178msgstr ""
po/vi.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2014-01-15 01:19+0000\n"
11"PO-Revision-Date: 2014-01-15 01:19+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Vietnamese <vi@li.org>\n"
13"Language-Team: Vietnamese <vi@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:17+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -80,10 +80,6 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr ""
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr ""
105msgid "See more"
101msgid "See more"
106msgstr ""
102msgstr ""
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr ""
106msgstr ""
111
107
@@ -113,6 +109,10 @@ msgstr ""
113msgid "Recent"
109msgid "Recent"
114msgstr ""
110msgstr ""
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr ""
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr ""
118msgstr ""
@@ -121,15 +121,15 @@ msgstr ""
121msgid "Less..."
121msgid "Less..."
122msgstr ""
122msgstr ""
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr ""
126msgstr ""
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr ""
130msgstr ""
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr ""
134msgstr ""
135
135
@@ -165,6 +165,14 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr ""
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr ""
178msgstr ""
po/xh.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2013-09-28 13:20+0000\n"
11"PO-Revision-Date: 2013-09-28 13:20+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Xhosa <xh@li.org>\n"
13"Language-Team: Xhosa <xh@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:17+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -80,10 +80,6 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr ""
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr ""
105msgid "See more"
101msgid "See more"
106msgstr ""
102msgstr ""
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr ""
106msgstr ""
111
107
@@ -113,6 +109,10 @@ msgstr ""
113msgid "Recent"
109msgid "Recent"
114msgstr ""
110msgstr ""
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr ""
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr ""
118msgstr ""
@@ -121,15 +121,15 @@ msgstr ""
121msgid "Less..."
121msgid "Less..."
122msgstr ""
122msgstr ""
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr ""
126msgstr ""
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr ""
130msgstr ""
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr ""
134msgstr ""
135
135
@@ -165,6 +165,14 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr ""
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr ""
178msgstr ""
po/zh_CN.po+29−21
@@ -7,24 +7,24 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11−"PO-Revision-Date: 2014-06-12 08:55+0000\n"
11+"PO-Revision-Date: 2014-07-29 02:48+0000\n"
12−"Last-Translator: Shengjing Zhu <Unknown>\n"
12+"Last-Translator: Luo Lei <luolei@ubuntukylin.com>\n"
13"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
13"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-30 07:08+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
22msgid "Pin shortcut"
22msgid "Pin shortcut"
23−msgstr ""
23+msgstr "固定快捷方式"
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26msgid "Unpin shortcut"
26msgid "Unpin shortcut"
27−msgstr ""
27+msgstr "取消固定快捷方式"
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -80,10 +80,6 @@ msgstr "紧急电话"
80msgid "OK"
80msgid "OK"
81msgstr "确定"
81msgstr "确定"
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr "近期搜索"
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr "完成"
105msgid "See more"
101msgid "See more"
106msgstr "了解更多"
102msgstr "了解更多"
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr "显示更少"
106msgstr "显示更少"
111
107
@@ -113,6 +109,10 @@ msgstr "显示更少"
113msgid "Recent"
109msgid "Recent"
114msgstr "最近使用过的"
110msgstr "最近使用过的"
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr "查看全部"
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr "更多..."
118msgstr "更多..."
@@ -121,15 +121,15 @@ msgstr "更多..."
121msgid "Less..."
121msgid "Less..."
122msgstr "更少..."
122msgstr "更少..."
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr "评分"
126msgstr "评分"
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr "添加评论"
130msgstr "添加评论"
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr "发送"
134msgstr "发送"
135
135
@@ -165,29 +165,37 @@ msgstr "显示密码"
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr "请输入 SIM PIN"
166msgstr "请输入 SIM PIN"
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr "点击回到通话..."
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr "会议"
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170−msgstr ""
178+msgstr "排队中..."
171
179
172#: qml/Panel/Indicators/MenuItemFactory.qml:587
180#: qml/Panel/Indicators/MenuItemFactory.qml:587
173msgid "Downloading"
181msgid "Downloading"
174−msgstr ""
182+msgstr "正在下载"
175
183
176#: qml/Panel/Indicators/MenuItemFactory.qml:589
184#: qml/Panel/Indicators/MenuItemFactory.qml:589
177msgid "Paused, tap to resume"
185msgid "Paused, tap to resume"
178−msgstr ""
186+msgstr "已暂停,点击继续"
179
187
180#: qml/Panel/Indicators/MenuItemFactory.qml:591
188#: qml/Panel/Indicators/MenuItemFactory.qml:591
181msgid "Canceled"
189msgid "Canceled"
182−msgstr ""
190+msgstr "已取消"
183
191
184#: qml/Panel/Indicators/MenuItemFactory.qml:593
192#: qml/Panel/Indicators/MenuItemFactory.qml:593
185msgid "Finished"
193msgid "Finished"
186−msgstr ""
194+msgstr "已完成"
187
195
188#: qml/Panel/Indicators/MenuItemFactory.qml:595
196#: qml/Panel/Indicators/MenuItemFactory.qml:595
189msgid "Failed, tap to retry"
197msgid "Failed, tap to retry"
190−msgstr ""
198+msgstr "下载失败,请点击重试"
191
199
192#: qml/Panel/SearchIndicator.qml:27
200#: qml/Panel/SearchIndicator.qml:27
193msgid "Search"
201msgid "Search"
po/zh_HK.po+19−11
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11"PO-Revision-Date: 2014-01-25 13:32+0000\n"
11"PO-Revision-Date: 2014-01-25 13:32+0000\n"
12"Last-Translator: Daniel Cheung <daniel.2345@hotmail.com>\n"
12"Last-Translator: Daniel Cheung <daniel.2345@hotmail.com>\n"
13"Language-Team: Chinese (Hong Kong) <zh_HK@li.org>\n"
13"Language-Team: Chinese (Hong Kong) <zh_HK@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-26 07:17+0000\n"
18−"X-Generator: Launchpad (build 17100)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -80,10 +80,6 @@ msgstr "緊急電話"
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr "最近的搜尋"
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr ""
105msgid "See more"
101msgid "See more"
106msgstr ""
102msgstr ""
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr ""
106msgstr ""
111
107
@@ -113,6 +109,10 @@ msgstr ""
113msgid "Recent"
109msgid "Recent"
114msgstr ""
110msgstr ""
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr ""
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr ""
118msgstr ""
@@ -121,15 +121,15 @@ msgstr ""
121msgid "Less..."
121msgid "Less..."
122msgstr ""
122msgstr ""
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr "評價"
126msgstr "評價"
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr "新增評論"
130msgstr "新增評論"
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr "傳送"
134msgstr "傳送"
135
135
@@ -165,6 +165,14 @@ msgstr "顯示密碼"
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr ""
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr ""
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr ""
178msgstr ""
po/zh_TW.po+21−13
@@ -7,15 +7,15 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-07-07 12:15+0100\n"
10+"POT-Creation-Date: 2014-07-11 14:59+0200\n"
11−"PO-Revision-Date: 2014-07-18 10:14+0000\n"
11+"PO-Revision-Date: 2014-07-26 16:21+0000\n"
12−"Last-Translator: Henry Yang <henry9846@hotmail.com>\n"
12+"Last-Translator: Cheng-Chia Tseng <pswo10680@gmail.com>\n"
13"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
13"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-07-19 06:19+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-27 06:35+0000\n"
18−"X-Generator: Launchpad (build 17114)\n"
18+"X-Generator: Launchpad (build 17131)\n"
19
19
20#: plugins/Unity/Launcher/launcheritem.cpp:43
20#: plugins/Unity/Launcher/launcheritem.cpp:43
21#: plugins/Unity/Launcher/launcheritem.cpp:73
21#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -80,10 +80,6 @@ msgstr "緊急通話"
80msgid "OK"
80msgid "OK"
81msgstr "確定"
81msgstr "確定"
82
82
83−#: qml/Components/PageHeader.qml:366
84−msgid "Recent searches"
85−msgstr "最近搜尋"
86−
87#: qml/Components/PassphraseLockscreen.qml:60
83#: qml/Components/PassphraseLockscreen.qml:60
88#, qt-format
84#, qt-format
89msgid "Hello %1"
85msgid "Hello %1"
@@ -105,7 +101,7 @@ msgstr "完成"
105msgid "See more"
101msgid "See more"
106msgstr "查看更多"
102msgstr "查看更多"
107
103
108−#: qml/Components/SeeMore.qml:58
104+#: qml/Components/SeeMore.qml:58 qml/Dash/GenericScopeView.qml:330
109msgid "See less"
105msgid "See less"
110msgstr "縮減查看"
106msgstr "縮減查看"
111
107
@@ -113,6 +109,10 @@ msgstr "縮減查看"
113msgid "Recent"
109msgid "Recent"
114msgstr "最近"
110msgstr "最近"
115
111
112+#: qml/Dash/GenericScopeView.qml:330
113+msgid "See all"
114+msgstr "查看全部"
115+
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
116#: qml/Dash/Previews/PreviewActionCombo.qml:34
117msgid "More..."
117msgid "More..."
118msgstr "更多…"
118msgstr "更多…"
@@ -121,15 +121,15 @@ msgstr "更多…"
121msgid "Less..."
121msgid "Less..."
122msgstr "縮減…"
122msgstr "縮減…"
123
123
124−#: qml/Dash/Previews/PreviewRatingInput.qml:82
124+#: qml/Dash/Previews/PreviewRatingInput.qml:81
125msgid "Rate this"
125msgid "Rate this"
126msgstr "給予評等"
126msgstr "給予評等"
127
127
128−#: qml/Dash/Previews/PreviewRatingInput.qml:128
128+#: qml/Dash/Previews/PreviewRatingInput.qml:126
129msgid "Add a review"
129msgid "Add a review"
130msgstr "新增評論"
130msgstr "新增評論"
131
131
132−#: qml/Dash/Previews/PreviewRatingInput.qml:168
132+#: qml/Dash/Previews/PreviewRatingInput.qml:166
133msgid "Send"
133msgid "Send"
134msgstr "發送"
134msgstr "發送"
135
135
@@ -165,6 +165,14 @@ msgstr "顯示密碼"
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr "請輸入 SIM 卡 PIN 碼"
166msgstr "請輸入 SIM 卡 PIN 碼"
167
167
168+#: qml/Panel/ActiveCallHint.qml:77
169+msgid "Tap to return to call..."
170+msgstr "輕觸可返回通話…"
171+
172+#: qml/Panel/ActiveCallHint.qml:90
173+msgid "Conference"
174+msgstr "會議"
175+
168#: qml/Panel/Indicators/MenuItemFactory.qml:583
176#: qml/Panel/Indicators/MenuItemFactory.qml:583
169msgid "In queue…"
177msgid "In queue…"
170msgstr "佇列中…"
178msgstr "佇列中…"
qml/Components/Background.qmlnew file+77
@@ -0,0 +1,77 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.0
18+
19+Loader {
20+ id: root
21+ anchors.fill: parent
22+
23+ property url style
24+ readonly property var parsedStyle: String(style)
25+ .match(/^(color|gradient):\/\/\/(?:(#(?:[0-9a-f]{3,4}){1,2}|[a-z]{3,}))(?:\/(#(?:[0-9a-f]{3,4}){1,2}|[a-z]{3,}))?\/?$/i)
26+
27+ sourceComponent: {
28+ if (style == "") return null;
29+ if (!parsedStyle) return image;
30+ if (parsedStyle[1] === "color") return solid
31+ if (parsedStyle[1] === "gradient") return gradient
32+ }
33+
34+ onLoaded: if (item.hasOwnProperty("parsedStyle")) {
35+ item.parsedStyle = Qt.binding(function() { return root.parsedStyle } );
36+ }
37+
38+ Component {
39+ id: solid
40+
41+ Rectangle {
42+ objectName: "solid"
43+
44+ property var parsedStyle
45+
46+ color: parsedStyle ? parsedStyle[2] : "#ffffff"
47+ }
48+ }
49+
50+ Component {
51+ id: gradient
52+
53+ Rectangle {
54+ objectName: "gradient"
55+
56+ property var parsedStyle
57+
58+ gradient: Gradient {
59+ GradientStop { position: 0; color: parsedStyle ? parsedStyle[2] : "#000000" }
60+ GradientStop { position: 1; color: parsedStyle ? parsedStyle[3] : "#000000" }
61+ }
62+ }
63+ }
64+
65+ Component {
66+ id: image
67+
68+ Image {
69+ objectName: "image"
70+
71+ source: width > 0 && height > 0 && root.style
72+
73+ sourceSize.width: width
74+ sourceSize.height: height
75+ }
76+ }
77+}
qml/Components/Dialogs.qmlnew file+217
@@ -0,0 +1,217 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.0
18+
19+import Unity.Application 0.1
20+import Unity.Session 0.1
21+import Ubuntu.Components 0.1
22+import Ubuntu.Components.Popups 0.1
23+
24+Item {
25+ id: root
26+
27+ function onPowerKeyPressed() {
28+ if (!powerKeyTimer.running) {
29+ powerKeyTimer.start();
30+ }
31+ }
32+
33+ function onPowerKeyReleased() {
34+ powerKeyTimer.stop();
35+ }
36+
37+ signal powerOffClicked();
38+
39+ QtObject {
40+ id: d // private stuff
41+
42+ property bool dialogShown: false
43+
44+ function showPowerDialog() {
45+ if (!d.dialogShown) {
46+ d.dialogShown = true;
47+ PopupUtils.open(powerDialog, root, {"z": root.z});
48+ }
49+ }
50+ }
51+
52+ Timer {
53+ id: powerKeyTimer
54+ interval: 2000
55+ repeat: false
56+ triggeredOnStart: false
57+
58+ onTriggered: {
59+ d.showPowerDialog();
60+ }
61+ }
62+
63+ Component {
64+ id: logoutDialog
65+ Dialog {
66+ id: dialogueLogout
67+ title: "Logout"
68+ text: "Are you sure that you want to logout?"
69+ Button {
70+ text: "Cancel"
71+ onClicked: {
72+ PopupUtils.close(dialogueLogout);
73+ d.dialogShown = false;
74+ }
75+ }
76+ Button {
77+ text: "Yes"
78+ onClicked: {
79+ DBusUnitySessionService.Logout();
80+ PopupUtils.close(dialogueLogout);
81+ d.dialogShown = false;
82+ }
83+ }
84+ }
85+ }
86+
87+ Component {
88+ id: shutdownDialog
89+ Dialog {
90+ id: dialogueShutdown
91+ title: "Shutdown"
92+ text: "Are you sure that you want to shutdown?"
93+ Button {
94+ text: "Cancel"
95+ onClicked: {
96+ PopupUtils.close(dialogueShutdown);
97+ d.dialogShown = false;
98+ }
99+ }
100+ Button {
101+ text: "Yes"
102+ onClicked: {
103+ dBusUnitySessionServiceConnection.closeAllApps();
104+ DBusUnitySessionService.Shutdown();
105+ PopupUtils.close(dialogueShutdown);
106+ d.dialogShown = false;
107+ }
108+ }
109+ }
110+ }
111+
112+ Component {
113+ id: rebootDialog
114+ Dialog {
115+ id: dialogueReboot
116+ title: "Reboot"
117+ text: "Are you sure that you want to reboot?"
118+ Button {
119+ text: "Cancel"
120+ onClicked: {
121+ PopupUtils.close(dialogueReboot)
122+ d.dialogShown = false;
123+ }
124+ }
125+ Button {
126+ text: "Yes"
127+ onClicked: {
128+ dBusUnitySessionServiceConnection.closeAllApps();
129+ DBusUnitySessionService.Reboot();
130+ PopupUtils.close(dialogueReboot);
131+ d.dialogShown = false;
132+ }
133+ }
134+ }
135+ }
136+
137+ Component {
138+ id: powerDialog
139+ Dialog {
140+ id: dialoguePower
141+ title: "Power"
142+ text: i18n.tr("Are you sure you would like to turn power off?")
143+ Button {
144+ text: i18n.tr("Power off")
145+ onClicked: {
146+ dBusUnitySessionServiceConnection.closeAllApps();
147+ PopupUtils.close(dialoguePower);
148+ d.dialogShown = false;
149+ root.powerOffClicked();
150+ }
151+ }
152+ Button {
153+ text: i18n.tr("Restart")
154+ onClicked: {
155+ dBusUnitySessionServiceConnection.closeAllApps();
156+ DBusUnitySessionService.Reboot();
157+ PopupUtils.close(dialoguePower);
158+ d.dialogShown = false;
159+ }
160+ }
161+ Button {
162+ text: i18n.tr("Cancel")
163+ onClicked: {
164+ PopupUtils.close(dialoguePower);
165+ d.dialogShown = false;
166+ }
167+ }
168+ }
169+ }
170+
171+
172+ Connections {
173+ id: dBusUnitySessionServiceConnection
174+ objectName: "dBusUnitySessionServiceConnection"
175+ target: DBusUnitySessionService
176+
177+ function closeAllApps() {
178+ while (true) {
179+ var app = ApplicationManager.get(0);
180+ if (app === null) {
181+ break;
182+ }
183+ ApplicationManager.stopApplication(app.appId);
184+ }
185+ }
186+
187+ onLogoutRequested: {
188+ // Display a dialog to ask the user to confirm.
189+ if (!d.dialogShown) {
190+ d.dialogShown = true;
191+ PopupUtils.open(logoutDialog, root, {"z": root.z});
192+ }
193+ }
194+
195+ onShutdownRequested: {
196+ // Display a dialog to ask the user to confirm.
197+ if (!d.dialogShown) {
198+ d.dialogShown = true;
199+ PopupUtils.open(shutdownDialog, root, {"z": root.z});
200+ }
201+ }
202+
203+ onRebootRequested: {
204+ // Display a dialog to ask the user to confirm.
205+ if (!d.dialogShown) {
206+ d.dialogShown = true;
207+ PopupUtils.open(rebootDialog, root, {"z": root.z});
208+ }
209+ }
210+
211+ onLogoutReady: {
212+ closeAllApps();
213+ Qt.quit();
214+ }
215+ }
216+
217+}
qml/Components/DraggingArea.qml+4
@@ -117,4 +117,8 @@ MouseArea {
117 dragging = false
117 dragging = false
118 __pressedPosition = Qt.point(mouse.x, mouse.y)
118 __pressedPosition = Qt.point(mouse.x, mouse.y)
119 }
119 }
120+
121+ onCanceled: {
122+ dragging = false
123+ }
120}
124}
qml/Components/FilterGrid.qmldeleted−124
@@ -1,124 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import Ubuntu.Components 0.1
19−import Utils 0.1
20−import "../Components"
21−
22−/*
23− A ResponsiveGridView that can optionally have the number of rows being displayed
24− reduced to collapsedRowCount, in which case a button saying "View all (123)"
25− will be shown at the bottom. If clicked, FilterGrid will them expand vertically
26− to display all rows.
27− */
28−Item {
29− id: root
30−
31− /* Whether, when collapsed, a button should be displayed enabling the user to expand
32− the grid to its full size. */
33− readonly property bool expandable: model.count > rowsWhenCollapsed * iconTileGrid.columns
34−
35− property var model: null
36−
37− /* Maximum number of rows to be show when filter=true. */
38− property int collapsedRowCount: 2
39− property int uncollapsedRowCount: Math.ceil(model.count / columns)
40− /* Never show more rows than model would fill up. */
41− readonly property int rowsWhenCollapsed: Math.min(collapsedRowCount, uncollapsedRowCount)
42− readonly property int collapsedHeight: iconTileGrid.contentHeightForRows(rowsWhenCollapsed)
43− readonly property int uncollapsedHeight: iconTileGrid.contentHeightForRows(uncollapsedRowCount)
44−
45− property alias minimumHorizontalSpacing: iconTileGrid.minimumHorizontalSpacing
46− property alias maximumNumberOfColumns: iconTileGrid.maximumNumberOfColumns
47− property alias columns: iconTileGrid.columns
48− property alias delegateWidth: iconTileGrid.delegateWidth
49− property alias delegateHeight: iconTileGrid.delegateHeight
50− property alias verticalSpacing: iconTileGrid.verticalSpacing
51− readonly property alias margins: iconTileGrid.margins
52− property alias delegate: iconTileGrid.delegate
53− property alias cellWidth: iconTileGrid.cellWidth
54− property alias cellHeight: iconTileGrid.cellHeight
55− property alias displayMarginBeginning: iconTileGrid.displayMarginBeginning
56− property alias displayMarginEnd: iconTileGrid.displayMarginEnd
57− readonly property alias originY: iconTileGrid.originY
58− readonly property alias flicking: iconTileGrid.flicking
59− readonly property alias moving: iconTileGrid.moving
60− readonly property alias pressDelay: iconTileGrid.pressDelay
61− property alias highlightIndex: iconTileGrid.highlightIndex
62− readonly property alias currentItem: iconTileGrid.currentItem
63− readonly property alias filtered: d.filter
64−
65− QtObject {
66− id: d
67− // We do have filter and collapsed properties because we need to decouple
68− // the real filtering with the animation since the closing animation
69− // i.e. setFilter(false. true) we still need to not be filtering until
70− // the animation finishes otherwise we hide the items when the animation
71− // is still running
72− property bool filter: true
73− property bool collapsed: true
74− }
75−
76− height: d.collapsed ? root.collapsedHeight : root.uncollapsedHeight
77− clip: filterAnimation.running
78−
79− Behavior on height {
80− id: heightBehaviour
81− enabled: false
82− NumberAnimation {
83− id: filterAnimation
84− // Duration and easing here match the ListViewWithPageHeader::m_contentYAnimation
85− // otherwise since both animations can run at the same time you'll get
86− // some visual weirdness.
87− duration: 200
88− easing.type: Easing.InOutQuad
89− onRunningChanged: {
90− if (!running) {
91− d.filter = d.collapsed;
92− }
93− heightBehaviour.enabled = false;
94− }
95− }
96− }
97−
98− function setFilter(filter, animate) {
99− heightBehaviour.enabled = animate;
100− d.collapsed = filter;
101− if (!animate || !filter) {
102− d.filter = filter;
103− }
104− }
105−
106− ResponsiveGridView {
107− id: iconTileGrid
108−
109− anchors { left: parent.left; right: parent.right }
110− height: totalContentHeight
111− interactive: false
112−
113− minimumHorizontalSpacing: units.gu(0.5)
114− maximumNumberOfColumns: 6
115− delegateWidth: units.gu(11)
116− delegateHeight: units.gu(9.5)
117− verticalSpacing: units.gu(2)
118−
119− model: LimitProxyModel {
120− model: root.model
121− limit: d.filter ? rowsWhenCollapsed * iconTileGrid.columns : -1
122− }
123− }
124−}
qml/Components/InputMethod.qmlnew file+79
@@ -0,0 +1,79 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.0
18+import Unity.Application 0.1
19+import Ubuntu.Components 0.1
20+
21+Item {
22+ id: root
23+
24+ property var surface: null
25+
26+ property int transitionDuration: UbuntuAnimation.FastDuration
27+
28+ state: {
29+ if (surface && surface.state != MirSurfaceItem.Minimized) {
30+ return "shown";
31+ } else {
32+ return "hidden";
33+ }
34+ }
35+
36+ states: [
37+ State {
38+ name: "shown"
39+ PropertyChanges {
40+ target: root
41+ visible: true
42+ y: 0
43+ }
44+ },
45+ State {
46+ name: "hidden"
47+ PropertyChanges {
48+ target: root
49+ visible: false
50+ // half-way down because the vkb occupies only the lower half of the surface
51+ // TODO: consider keyboard rotation
52+ y: root.parent.height / 2.0
53+ }
54+ }
55+ ]
56+
57+ transitions: [
58+ Transition {
59+ from: "*"; to: "*"
60+ PropertyAction { property: "visible"; value: true }
61+ UbuntuNumberAnimation { property: "y"; duration: transitionDuration }
62+ }
63+ ]
64+
65+ onSurfaceChanged: {
66+ if (surface) {
67+ surface.parent = root;
68+ surface.anchors.fill = root;
69+ }
70+ }
71+
72+ Component.onDestruction: {
73+ if (surface) {
74+ surface.parent = null;
75+ surface.release();
76+ surface = null;
77+ }
78+ }
79+}
qml/Components/ListItems/Header.qml+17−26
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2013,2014 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -15,54 +15,45 @@
15 */
15 */
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18+import QtQuick.Layouts 1.1
18import Ubuntu.Components 0.1
19import Ubuntu.Components 0.1
19
20
20Item {
21Item {
21− /*!
22− \preliminary
23− The text that is shown as the header text.
24− \qmlproperty string text
25− */
26 property alias text: label.text
22 property alias text: label.text
27− property alias textColor: label.color
23+ property alias color: label.color
28− property alias image: image.source
24+ property alias iconName: icon.name
29
25
30 signal clicked(variant mouse)
26 signal clicked(variant mouse)
31
27
32 height: units.gu(5)
28 height: units.gu(5)
33
29
34− Item {
30+ RowLayout {
31+ spacing: units.gu(.5)
35 anchors {
32 anchors {
36 left: parent.left
33 left: parent.left
37 right: parent.right
34 right: parent.right
35+ verticalCenter: parent.verticalCenter
38− rightMargin: units.gu(0.5)
36+ margins: units.gu(1)
39− top: parent.top
40− bottom: parent.bottom
41 }
37 }
42
38
43 Label {
39 Label {
44 id: label
40 id: label
45− anchors {
41+ Layout.fillWidth: true
46− left: parent.left
47− leftMargin: units.gu(2)
48− verticalCenter: parent.verticalCenter
49− }
50
42
51− color: "grey" // TODO karni: Update Ubuntu.Compoonents.Themes.Palette.
52 font.family: "Ubuntu"
43 font.family: "Ubuntu"
53 fontSize: "medium"
44 fontSize: "medium"
54 elide: Text.ElideRight
45 elide: Text.ElideRight
46+ maximumLineCount: 1
55 textFormat: Text.PlainText
47 textFormat: Text.PlainText
56− width: parent.width - image.width - image.leftMargin - anchors.leftMargin
48+ width: Math.min(parent.width - units.gu(4), implicitWidth)
57 }
49 }
58
50
59− Image {
51+ Icon {
60− id: image
52+ id: icon
61− readonly property double leftMargin: units.gu(1)
53+ visible: name != ""
62− x: label.x + label.contentWidth + leftMargin
54+ height: units.gu(2)
63− anchors {
55+ width: height
64− verticalCenter: parent.verticalCenter
56+ color: label.color
65− }
66 }
57 }
67 }
58 }
68
59
qml/Components/PageHeader.qml+9−2
@@ -117,7 +117,7 @@ Item {
117 Flickable {
117 Flickable {
118 id: headerContainer
118 id: headerContainer
119 objectName: "headerContainer"
119 objectName: "headerContainer"
120− clip: true
120+ clip: openSearchAnimation.running
121 anchors { left: parent.left; top: parent.top; right: parent.right }
121 anchors { left: parent.left; top: parent.top; right: parent.right }
122 height: units.gu(6.5)
122 height: units.gu(6.5)
123 contentHeight: headersColumn.height
123 contentHeight: headersColumn.height
@@ -127,6 +127,11 @@ Item {
127 property bool showSearch: false
127 property bool showSearch: false
128 property var popover: null
128 property var popover: null
129
129
130+ Background {
131+ objectName: "headerBackground"
132+ style: scopeStyle.headerBackground
133+ }
134+
130 Behavior on contentY {
135 Behavior on contentY {
131 UbuntuNumberAnimation {
136 UbuntuNumberAnimation {
132 id: openSearchAnimation
137 id: openSearchAnimation
@@ -150,6 +155,7 @@ Item {
150 anchors { left: parent.left; right: parent.right }
155 anchors { left: parent.left; right: parent.right }
151 height: headerContainer.height
156 height: headerContainer.height
152 contentHeight: height
157 contentHeight: height
158+ opacity: headerContainer.clip || headerContainer.showSearch ? 1 : 0 // setting visible false cause column to relayout
153 separatorSource: ""
159 separatorSource: ""
154 // Required to keep PageHeadStyle noise down as it expects the Page's properties around.
160 // Required to keep PageHeadStyle noise down as it expects the Page's properties around.
155 property var styledItem: searchHeader
161 property var styledItem: searchHeader
@@ -224,8 +230,9 @@ Item {
224 anchors { left: parent.left; right: parent.right }
230 anchors { left: parent.left; right: parent.right }
225 height: headerContainer.height
231 height: headerContainer.height
226 contentHeight: height
232 contentHeight: height
233+ opacity: headerContainer.clip || !headerContainer.showSearch ? 1 : 0 // setting visible false cause column to relayout
227 separatorSource: ""
234 separatorSource: ""
228− textColor: root.scopeStyle ? root.scopeStyle.foreground : "grey"
235+ textColor: root.scopeStyle ? root.scopeStyle.headerForeground : "grey"
229 property var styledItem: header
236 property var styledItem: header
230 property string title: root.title
237 property string title: root.title
231 property var config: PageHeadConfiguration {
238 property var config: PageHeadConfiguration {
qml/Components/ResponsiveGridView.qml+2−1
@@ -44,10 +44,11 @@ Item {
44 property alias displayMarginBeginning: gridView.displayMarginBeginning
44 property alias displayMarginBeginning: gridView.displayMarginBeginning
45 property alias displayMarginEnd: gridView.displayMarginEnd
45 property alias displayMarginEnd: gridView.displayMarginEnd
46 property alias highlightIndex: gridView.highlightIndex
46 property alias highlightIndex: gridView.highlightIndex
47+ property alias cacheBuffer: gridView.cacheBuffer
47 readonly property alias currentItem: gridView.currentItem
48 readonly property alias currentItem: gridView.currentItem
48
49
49 function contentHeightForRows(rows) {
50 function contentHeightForRows(rows) {
50− return rows * cellHeight + verticalSpacing
51+ return rows * cellHeight;
51 }
52 }
52
53
53 GridView {
54 GridView {
qml/Dash/Apps/RunningApplicationTile.qml+42−34
@@ -29,11 +29,8 @@ AbstractButton {
29 signal requestedActivationMode()
29 signal requestedActivationMode()
30 signal requestedTerminationMode()
30 signal requestedTerminationMode()
31
31
32− // Was: childrenRect.height
32+ width: thumbnail.width
33− // To avoid "binding loop" warning
34− height: shapedApplicationImage.height + labelContainer.height
33+ height: thumbnail.height + labelContainer.height
35−
36− width: shapedApplicationImage.width <= units.gu(11) ? units.gu(11) : height
37
34
38 property bool terminationModeEnabled: false
35 property bool terminationModeEnabled: false
39
36
@@ -50,42 +47,53 @@ AbstractButton {
50 }
47 }
51 }
48 }
52
49
50+ Item {
51+ id: thumbnail
52+
53+ width: shapedApplicationImage.width
54+ height: shapedApplicationImage.height
55+
53− UbuntuShape {
56+ UbuntuShape {
54− id: shapedApplicationImage
57+ id: shapedApplicationImage
55− anchors { top: parent.top; horizontalCenter: parent.horizontalCenter }
58+ x: 0
56−
59+ y: 0
57− height: units.gu(17)
60+ height: applicationImage.height
58− width: applicationImage.width
61+ width: applicationImage.width
59− radius: "medium"
62+ radius: "medium"
60−
63+
61− image: Image {
64+ image: Image {
62− id: applicationImage
65+ id: applicationImage
63− source: application.screenshot
66+ source: application.screenshot
64− // height : width = ss.height : ss.width
67+ // height : width = ss.height : ss.width
65− height: shapedApplicationImage.height
68+
69+ property bool isLandscape: sourceSize.width > sourceSize.height
70+ property real maxDimension: units.gu(17)
71+
72+ width: isLandscape ? Math.min(sourceSize.width, maxDimension) : height * (sourceSize.width / sourceSize.height)
73+ height: isLandscape ? width * (sourceSize.height / sourceSize.width) : Math.min(sourceSize.height, maxDimension)
66− fillMode: Image.PreserveAspectCrop
74+ fillMode: Image.Stretch
67− width: Math.min(height, height * sourceSize.width / sourceSize.height)
68− }
75+ }
69
76
70− }
77+ }
71
78
72− UbuntuShape {
79+ UbuntuShape {
73− id: borderPressed
80+ id: borderPressed
74
81
75− anchors.fill: shapedApplicationImage
82+ anchors.fill: shapedApplicationImage
76− radius: "medium"
83+ radius: "medium"
77− borderSource: "radius_pressed.sci"
84+ borderSource: "radius_pressed.sci"
78− opacity: root.pressed ? 1.0 : 0.0
85+ opacity: root.pressed ? 1.0 : 0.0
79− Behavior on opacity { NumberAnimation { duration: 200; easing.type: Easing.OutQuint } }
86+ Behavior on opacity { NumberAnimation { duration: 200; easing.type: Easing.OutQuint } }
87+ }
80 }
88 }
81
89
82 // FIXME: label code duplicated with Tile
90 // FIXME: label code duplicated with Tile
83 Item {
91 Item {
84 id: labelContainer
92 id: labelContainer
85 anchors {
93 anchors {
86− left: parent.left
94+ left: thumbnail.left
87− right: parent.right
95+ right: thumbnail.right
88− top: shapedApplicationImage.bottom
96+ top: thumbnail.bottom
89 }
97 }
90 height: units.gu(2)
98 height: units.gu(2)
91
99
@@ -110,9 +118,9 @@ AbstractButton {
110 CloseIcon {
118 CloseIcon {
111 objectName: "closeIcon " + model.name
119 objectName: "closeIcon " + model.name
112 anchors {
120 anchors {
113− left: shapedApplicationImage.left
121+ left: thumbnail.left
114 leftMargin: -units.gu(1)
122 leftMargin: -units.gu(1)
115− top: parent.top
123+ top: thumbnail.top
116 topMargin: -units.gu(1)
124 topMargin: -units.gu(1)
117 }
125 }
118 height: units.gu(6)
126 height: units.gu(6)
qml/Dash/CardCarousel.qml+2−7
@@ -21,13 +21,8 @@ import "../Components"
21DashRenderer {
21DashRenderer {
22 id: cardCarousel
22 id: cardCarousel
23
23
24− property alias cacheBuffer: carousel.cacheBuffer
25− property alias itemComponent: carousel.itemComponent
26− property alias minimumTileWidth: carousel.minimumTileWidth
27− property alias selectedItemScaleFactor: carousel.selectedItemScaleFactor
28− property alias tileAspectRatio: carousel.tileAspectRatio
29−
30− height: carousel.implicitHeight + units.gu(6)
24+ expandedHeight: carousel.implicitHeight + units.gu(6)
25+ collapsedHeight: expandedHeight
31
26
32 Carousel {
27 Carousel {
33 id: carousel
28 id: carousel
qml/Dash/CardFilterGrid.qml → qml/Dash/CardGrid.qmlrenamed+22−22
@@ -18,33 +18,33 @@ import QtQuick 2.0
18import "../Components"
18import "../Components"
19
19
20DashRenderer {
20DashRenderer {
21− id: genericFilterGrid
21+ id: root
22
22
23− expandable: filterGrid.expandable
23+ readonly property int collapsedRows: {
24− collapsedHeight: filterGrid.collapsedHeight
24+ if (!cardTool || !cardTool.template || typeof cardTool.template["collapsed-rows"] != "number") return 2;
25− uncollapsedHeight: filterGrid.uncollapsedHeight
25+ return cardTool.template["collapsed-rows"];
26− originY: filterGrid.originY
27− height: filterGrid.height
28− filtered: filterGrid.filtered
29−
30− function setFilter(filter, animate) {
31− filterGrid.setFilter(filter, animate)
32 }
26 }
33
27
34− FilterGrid {
28+ expandedHeight: grid.totalContentHeight
35− id: filterGrid
29+ collapsedHeight: Math.min(grid.contentHeightForRows(collapsedRows), expandedHeight)
36− width: genericFilterGrid.width
30+ collapsedItemCount: collapsedRows * grid.columns
31+ originY: grid.originY
32+
33+ ResponsiveGridView {
34+ id: grid
35+ anchors.fill: parent
37 minimumHorizontalSpacing: units.gu(1)
36 minimumHorizontalSpacing: units.gu(1)
38 delegateWidth: cardTool.cardWidth
37 delegateWidth: cardTool.cardWidth
39 delegateHeight: cardTool.cardHeight
38 delegateHeight: cardTool.cardHeight
40 verticalSpacing: units.gu(1)
39 verticalSpacing: units.gu(1)
41− model: genericFilterGrid.model
40+ model: root.model
42− collapsedRowCount: Math.min(2, cardTool && cardTool.template && cardTool.template["collapsed-rows"] || 2)
41+ displayMarginBeginning: root.displayMarginBeginning
43− displayMarginBeginning: genericFilterGrid.displayMarginBeginning
42+ displayMarginEnd: root.displayMarginEnd
44− displayMarginEnd: genericFilterGrid.displayMarginEnd
43+ cacheBuffer: 0
44+ interactive: false
45 delegate: Item {
45 delegate: Item {
46− width: filterGrid.cellWidth
46+ width: grid.cellWidth
47− height: filterGrid.cellHeight
47+ height: grid.cellHeight
48 Loader {
48 Loader {
49 id: loader
49 id: loader
50 sourceComponent: cardTool.cardComponent
50 sourceComponent: cardTool.cardComponent
@@ -58,12 +58,12 @@ DashRenderer {
58 item.template = Qt.binding(function() { return cardTool.template; });
58 item.template = Qt.binding(function() { return cardTool.template; });
59 item.components = Qt.binding(function() { return cardTool.components; });
59 item.components = Qt.binding(function() { return cardTool.components; });
60 item.headerAlignment = Qt.binding(function() { return cardTool.headerAlignment; });
60 item.headerAlignment = Qt.binding(function() { return cardTool.headerAlignment; });
61− item.scopeStyle = genericFilterGrid.scopeStyle;
61+ item.scopeStyle = root.scopeStyle;
62 }
62 }
63 Connections {
63 Connections {
64 target: loader.item
64 target: loader.item
65− onClicked: genericFilterGrid.clicked(index, result)
65+ onClicked: root.clicked(index, result)
66− onPressAndHold: genericFilterGrid.pressAndHold(index)
66+ onPressAndHold: root.pressAndHold(index)
67 }
67 }
68 }
68 }
69 }
69 }
qml/Dash/CardVerticalJournal.qml+3−21
@@ -23,33 +23,15 @@ DashRenderer {
23
23
24 readonly property double collapseLimit: units.gu(35)
24 readonly property double collapseLimit: units.gu(35)
25
25
26− uncollapsedHeight: cardVerticalJournal.implicitHeight
26+ expandedHeight: Math.max(cardVerticalJournal.implicitHeight, minHeight)
27− collapsedHeight: Math.min(collapseLimit, cardVerticalJournal.implicitHeight)
27+ collapsedHeight: Math.max(Math.min(collapseLimit, cardVerticalJournal.implicitHeight), minHeight)
28− expandable: uncollapsedHeight > collapseLimit
28+ // TODO: implement collapsedItemCount
29
29
30 // This minHeight is used as bootstrapper for the height. Vertical Journal
30 // This minHeight is used as bootstrapper for the height. Vertical Journal
31 // is special by the fact that it doesn't know how to calculate its implicit height unless we give it
31 // is special by the fact that it doesn't know how to calculate its implicit height unless we give it
32 // enough height that it can start creating its children so we make sure it has enough height for that
32 // enough height that it can start creating its children so we make sure it has enough height for that
33 // in case the model is non empty
33 // in case the model is non empty
34 readonly property double minHeight: root.model.count >= 1 ? cardVerticalJournal.rowSpacing + 1 : 0
34 readonly property double minHeight: root.model.count >= 1 ? cardVerticalJournal.rowSpacing + 1 : 0
35− height: filtered ? Math.max(collapsedHeight, minHeight) : uncollapsedHeight
36−
37− Behavior on height {
38− id: heightBehaviour
39− enabled: false
40− animation: UbuntuNumberAnimation {
41− onRunningChanged: {
42− if (!running) {
43− heightBehaviour.enabled = false
44− }
45− }
46− }
47− }
48−
49− function setFilter(filter, animate) {
50− heightBehaviour.enabled = animate;
51− filtered = filter;
52− }
53
35
54 ResponsiveVerticalJournal {
36 ResponsiveVerticalJournal {
55 id: cardVerticalJournal
37 id: cardVerticalJournal
qml/Dash/DashContent.qml+4
@@ -121,6 +121,10 @@ Item {
121 Loader {
121 Loader {
122 width: ListView.view.width
122 width: ListView.view.width
123 height: ListView.view.height
123 height: ListView.view.height
124+ opacity: { // hide delegate if offscreen
125+ var xPositionRelativetoView = ListView.view.contentX - x
126+ return (xPositionRelativetoView > -width && xPositionRelativetoView < width) ? 1 : 0
127+ }
124 asynchronous: true
128 asynchronous: true
125 // TODO This if will eventually go away since we're killing DashApps.qml
129 // TODO This if will eventually go away since we're killing DashApps.qml
126 // once we move app closing to the spread
130 // once we move app closing to the spread
qml/Dash/DashRenderer.qml+3−10
@@ -17,15 +17,11 @@
17import QtQuick 2.0
17import QtQuick 2.0
18
18
19Item {
19Item {
20− // Can the item be expanded?
20+ property int collapsedHeight
21− property bool expandable: false
22
21
23− // In case it can be expanded, is it filtered
22+ property int expandedHeight
24− property bool filtered: true
25
23
26− property int collapsedHeight: height
24+ property int collapsedItemCount: -1
27−
28− property int uncollapsedHeight: height
29
25
30 property int displayMarginBeginning: 0
26 property int displayMarginBeginning: 0
31
27
@@ -50,7 +46,4 @@ Item {
50 /// Emitted when the user pressed and held on an item
46 /// Emitted when the user pressed and held on an item
51 /// @param index is the index of the held item
47 /// @param index is the index of the held item
52 signal pressAndHold(int index)
48 signal pressAndHold(int index)
53−
54− function setFilter(filter, animate) {
55− }
56}
49}
qml/Dash/GenericScopeView.qml+128−64
@@ -119,6 +119,7 @@ FocusScope {
119
119
120 model: scopeView.categories
120 model: scopeView.categories
121 forceNoClip: previewListView.open
121 forceNoClip: previewListView.open
122+ pixelAligned: true
122
123
123 property string expandedCategoryId: ""
124 property string expandedCategoryId: ""
124
125
@@ -128,11 +129,22 @@ FocusScope {
128 highlightWhenPressed: false
129 highlightWhenPressed: false
129 showDivider: false
130 showDivider: false
130
131
131− readonly property bool expandable: rendererLoader.item ? rendererLoader.item.expandable : false
132+ readonly property bool expandable: {
132− readonly property bool filtered: rendererLoader.item ? rendererLoader.item.filtered : true
133+ if (categoryView.model.count === 1) return false;
134+ if (cardTool.template && cardTool.template["collapsed-rows"] === 0) return false;
135+ if (item && item.expandedHeight > item.collapsedHeight) return true;
136+ return false;
137+ }
138+ property bool expanded: false
133 readonly property string category: categoryId
139 readonly property string category: categoryId
140+ readonly property string headerLink: model.headerLink
134 readonly property var item: rendererLoader.item
141 readonly property var item: rendererLoader.item
135
142
143+ function expand(expand, animate) {
144+ heightBehaviour.enabled = animate;
145+ expanded = expand;
146+ }
147+
136 CardTool {
148 CardTool {
137 id: cardTool
149 id: cardTool
138 objectName: "cardTool"
150 objectName: "cardTool"
@@ -142,22 +154,49 @@ FocusScope {
142 viewWidth: parent.width
154 viewWidth: parent.width
143 }
155 }
144
156
157+ onExpandableChanged: {
158+ // This can happen with the VJ that doesn't know how height it will be on creation
159+ // so doesn't set expandable until a bit too late for onLoaded
160+ if (expandable) {
161+ var shouldExpand = baseItem.category === categoryView.expandedCategoryId;
162+ baseItem.expand(shouldExpand, false /*animate*/);
163+ }
164+ }
165+
166+ onHeightChanged: rendererLoader.updateDelegateCreationRange();
167+ onYChanged: rendererLoader.updateDelegateCreationRange();
168+
145 Loader {
169 Loader {
146 id: rendererLoader
170 id: rendererLoader
147 anchors {
171 anchors {
148 top: parent.top
172 top: parent.top
149 left: parent.left
173 left: parent.left
150 right: parent.right
174 right: parent.right
151− topMargin: hasSectionHeader ? 0 : units.gu(2)
175+ topMargin: name != "" ? 0 : units.gu(2)
176+ }
177+
178+ Behavior on height {
179+ id: heightBehaviour
180+ enabled: false
181+ animation: UbuntuNumberAnimation {
182+ onRunningChanged: {
183+ if (!running) {
184+ heightBehaviour.enabled = false
185+ }
186+ }
187+ }
152 }
188 }
153
189
190+ readonly property bool expanded: baseItem.expanded || !baseItem.expandable
191+ height: expanded ? item.expandedHeight : item.collapsedHeight
192+
154 source: {
193 source: {
155 switch (cardTool.categoryLayout) {
194 switch (cardTool.categoryLayout) {
156 case "carousel": return "CardCarousel.qml";
195 case "carousel": return "CardCarousel.qml";
157 case "vertical-journal": return "CardVerticalJournal.qml";
196 case "vertical-journal": return "CardVerticalJournal.qml";
158 case "running-apps": return "Apps/RunningApplicationsGrid.qml";
197 case "running-apps": return "Apps/RunningApplicationsGrid.qml";
159 case "grid":
198 case "grid":
160− default: return "CardFilterGrid.qml";
199+ default: return "CardGrid.qml";
161 }
200 }
162 }
201 }
163
202
@@ -176,9 +215,9 @@ FocusScope {
176 }
215 }
177 item.objectName = Qt.binding(function() { return categoryId })
216 item.objectName = Qt.binding(function() { return categoryId })
178 item.scopeStyle = scopeView.scopeStyle;
217 item.scopeStyle = scopeView.scopeStyle;
179− if (item.expandable) {
218+ if (baseItem.expandable) {
180− var shouldFilter = categoryId != categoryView.expandedCategoryId;
219+ var shouldExpand = categoryId === categoryView.expandedCategoryId;
181− item.setFilter(shouldFilter, false /*animate*/);
220+ baseItem.expand(shouldExpand, false /*animate*/);
182 }
221 }
183 updateDelegateCreationRange();
222 updateDelegateCreationRange();
184 item.cardTool = cardTool;
223 item.cardTool = cardTool;
@@ -199,25 +238,22 @@ FocusScope {
199 // so it's not implemented
238 // so it's not implemented
200 scopeView.scope.activate(result)
239 scopeView.scope.activate(result)
201 } else {
240 } else {
202− previewListView.model = target.model;
241+ openPreview(index);
203− previewListView.currentIndex = -1
204− previewListView.currentIndex = index;
205− previewListView.open = true
206 }
242 }
207 }
243 }
208− onPressAndHold: {
244+ onPressAndHold: openPreview(index)
209− previewListView.model = target.model;
245+
210− previewListView.currentIndex = -1
246+ function openPreview(index) {
211− previewListView.currentIndex = index;
247+ if (!rendererLoader.expanded && !seeAllLabel.visible && target.collapsedItemCount > 0) {
212− previewListView.open = true
248+ previewLimitModel.model = target.model;
213− }
249+ previewLimitModel.limit = target.collapsedItemCount;
214− onExpandableChanged: {
250+ previewListView.model = previewLimitModel;
215− // This can happen with the VJ that doesn't know how height it will be on creation
251+ } else {
216− // so doesn't set expandable until a bit too late for onLoaded
252+ previewListView.model = target.model;
217− if (rendererLoader.item.expandable) {
218− var shouldFilter = baseItem.category != categoryView.expandedCategoryId;
219− rendererLoader.item.setFilter(shouldFilter, false /*animate*/);
220 }
253 }
254+ previewListView.currentIndex = -1;
255+ previewListView.currentIndex = index;
256+ previewListView.open = true;
221 }
257 }
222 }
258 }
223 Connections {
259 Connections {
@@ -227,17 +263,17 @@ FocusScope {
227 }
263 }
228 function collapseAllButExpandedCategory() {
264 function collapseAllButExpandedCategory() {
229 var item = rendererLoader.item;
265 var item = rendererLoader.item;
230− if (item.expandable) {
266+ if (baseItem.expandable) {
231− var shouldFilter = categoryId != categoryView.expandedCategoryId;
267+ var shouldExpand = categoryId === categoryView.expandedCategoryId;
232− if (shouldFilter != item.filter) {
268+ if (shouldExpand != baseItem.expanded) {
233 // If the filter animation will be seen start it, otherwise, just flip the switch
269 // If the filter animation will be seen start it, otherwise, just flip the switch
234− var shrinkingVisible = shouldFilter && y + item.collapsedHeight < categoryView.height;
270+ var shrinkingVisible = !shouldExpand && y + item.collapsedHeight + seeAll.height < categoryView.height;
235− var growingVisible = !shouldFilter && y + height < categoryView.height;
271+ var growingVisible = shouldExpand && y + height < categoryView.height;
236− if (!previewListView.open || !shouldFilter) {
272+ if (!previewListView.open || shouldExpand) {
237 var animate = shrinkingVisible || growingVisible;
273 var animate = shrinkingVisible || growingVisible;
238− item.setFilter(shouldFilter, animate)
274+ baseItem.expand(shouldExpand, animate)
239− if (!shouldFilter && !previewListView.open) {
275+ if (shouldExpand && !previewListView.open) {
240− categoryView.maximizeVisibleArea(index, item.uncollapsedHeight);
276+ categoryView.maximizeVisibleArea(index, item.expandedHeight + seeAll.height);
241 }
277 }
242 }
278 }
243 }
279 }
@@ -274,58 +310,82 @@ FocusScope {
274 item.displayMarginEnd = -baseItem.height;
310 item.displayMarginEnd = -baseItem.height;
275 } else {
311 } else {
276 item.displayMarginBeginning = -Math.max(-baseItem.y, 0);
312 item.displayMarginBeginning = -Math.max(-baseItem.y, 0);
277− item.displayMarginEnd = -Math.max(baseItem.height - categoryView.height + baseItem.y, 0)
313+ item.displayMarginEnd = -Math.max(baseItem.height - seeAll.height
314+ - categoryView.height + baseItem.y, 0)
278 }
315 }
279 }
316 }
280 }
317 }
318+ }
281
319
282− Image {
320+ AbstractButton {
283− visible: index != 0
321+ id: seeAll
284− anchors {
322+ objectName: "seeAll"
285− top: parent.top
323+ anchors {
286− left: parent.left
324+ top: rendererLoader.bottom
287− right: parent.right
325+ left: parent.left
326+ right: parent.right
327+ }
328+ height: seeAllLabel.visible ? seeAllLabel.font.pixelSize + units.gu(6) : 0
329+
330+ onClicked: {
331+ if (categoryView.expandedCategoryId != baseItem.category) {
332+ categoryView.expandedCategoryId = baseItem.category;
333+ } else {
334+ categoryView.expandedCategoryId = "";
288 }
335 }
289− fillMode: Image.Stretch
290− source: "graphics/dash_divider_top_lightgrad.png"
291− z: -1
292 }
336 }
293
337
294− Image {
338+ Label {
295− // FIXME Should not rely on model.count but view.count, but ListViewWithPageHeader doesn't expose it yet.
339+ id: seeAllLabel
296− visible: index != categoryView.model.count - 1
340+ text: baseItem.expanded ? i18n.tr("See less") : i18n.tr("See all")
297 anchors {
341 anchors {
298− bottom: parent.bottom
342+ centerIn: parent
299− left: parent.left
343+ verticalCenterOffset: units.gu(-0.5)
300− right: parent.right
301 }
344 }
302− fillMode: Image.Stretch
345+ fontSize: "small"
303− source: "graphics/dash_divider_top_darkgrad.png"
346+ font.weight: Font.Bold
304− z: -1
347+ color: scopeStyle ? scopeStyle.foreground : "grey"
348+ visible: baseItem.expandable && !baseItem.headerLink
305 }
349 }
306 }
350 }
307
351
308− onHeightChanged: rendererLoader.updateDelegateCreationRange();
352+ Image {
309− onYChanged: rendererLoader.updateDelegateCreationRange();
353+ visible: index != 0
354+ anchors {
355+ top: parent.top
356+ left: parent.left
357+ right: parent.right
358+ }
359+ fillMode: Image.Stretch
360+ source: "graphics/dash_divider_top_lightgrad.png"
361+ z: -1
362+ }
363+
364+ Image {
365+ // FIXME Should not rely on model.count but view.count, but ListViewWithPageHeader doesn't expose it yet.
366+ visible: index != categoryView.model.count - 1
367+ anchors {
368+ bottom: seeAll.bottom
369+ left: parent.left
370+ right: parent.right
371+ }
372+ fillMode: Image.Stretch
373+ source: "graphics/dash_divider_top_darkgrad.png"
374+ z: -1
375+ }
310 }
376 }
311
377
312 sectionProperty: "name"
378 sectionProperty: "name"
313 sectionDelegate: ListItems.Header {
379 sectionDelegate: ListItems.Header {
314 objectName: "dashSectionHeader" + (delegate ? delegate.category : "")
380 objectName: "dashSectionHeader" + (delegate ? delegate.category : "")
315− property var delegate: categoryView.item(delegateIndex)
381+ readonly property var delegate: categoryView.item(delegateIndex)
316 width: categoryView.width
382 width: categoryView.width
383+ height: section != "" ? units.gu(5) : 0
317 text: section
384 text: section
318− textColor: scopeStyle ? scopeStyle.foreground : "grey"
385+ color: scopeStyle ? scopeStyle.foreground : "grey"
319− image: {
320− if (delegate && delegate.expandable)
386+ iconName: delegate && delegate.headerLink ? "go-next" : ""
321− return delegate.filtered ? "graphics/header_handlearrow.png" : "graphics/header_handlearrow2.png"
322− return "";
323− }
324 onClicked: {
387 onClicked: {
325− if (categoryView.expandedCategoryId != delegate.category)
388+ if (delegate.headerLink) scopeView.scope.performQuery(delegate.headerLink);
326− categoryView.expandedCategoryId = delegate.category;
327− else
328− categoryView.expandedCategoryId = "";
329 }
389 }
330 }
390 }
331
391
@@ -352,6 +412,10 @@ FocusScope {
352 }
412 }
353 }
413 }
354
414
415+ LimitProxyModel {
416+ id: previewLimitModel
417+ }
418+
355 PreviewListView {
419 PreviewListView {
356 id: previewListView
420 id: previewListView
357 objectName: "previewListView"
421 objectName: "previewListView"
qml/Dash/graphics/phone/screenshots/vkb_portrait.pngnew file

Binary file not shown.

qml/Launcher/Launcher.qml+1−1
@@ -181,7 +181,7 @@ Item {
181 bottom: parent.bottom
181 bottom: parent.bottom
182 }
182 }
183 x: -width
183 x: -width
184− opacity: (x == -width && dragArea.status === DirectionalDragArea.WaitingForTouch) ? 0 : 1
184+ visible: x > -width || dragArea.status === DirectionalDragArea.Undecided
185 model: LauncherModel
185 model: LauncherModel
186
186
187 property bool animate: true
187 property bool animate: true
qml/Panel/Indicators.qml+3
@@ -37,6 +37,7 @@ Showable {
37 readonly property int lockThreshold: openedHeight / 2
37 readonly property int lockThreshold: openedHeight / 2
38 property bool fullyOpened: height == openedHeight
38 property bool fullyOpened: height == openedHeight
39 property bool partiallyOpened: height > panelHeight && !fullyOpened
39 property bool partiallyOpened: height > panelHeight && !fullyOpened
40+ property bool fullyClosed: height <= panelHeight
40 property bool contentEnabled: true
41 property bool contentEnabled: true
41 property bool initalizeItem: true
42 property bool initalizeItem: true
42 readonly property alias content: menuContent
43 readonly property alias content: menuContent
@@ -187,6 +188,7 @@ Showable {
187 bottom: handle.top
188 bottom: handle.top
188 }
189 }
189 indicatorsModel: visibleIndicators.model
190 indicatorsModel: visibleIndicators.model
191+ visible: indicators.partiallyOpened || indicators.fullyOpened
190 clip: !indicators.fullyOpened
192 clip: !indicators.fullyOpened
191 activeHeader: indicators.state == "hint" || indicators.state == "reveal"
193 activeHeader: indicators.state == "hint" || indicators.state == "reveal"
192 enabled: contentEnabled
194 enabled: contentEnabled
@@ -219,6 +221,7 @@ Showable {
219 }
221 }
220 height: Math.max(Math.min(handleImage.height, indicators.height - handleImage.height), 0)
222 height: Math.max(Math.min(handleImage.height, indicators.height - handleImage.height), 0)
221 clip: height < handleImage.height
223 clip: height < handleImage.height
224+ visible: menuContent.visible
222
225
223 BorderImage {
226 BorderImage {
224 id: handleImage
227 id: handleImage
qml/Shell.qml+156−378
@@ -19,9 +19,9 @@ import AccountsService 0.1
19import GSettings 1.0
19import GSettings 1.0
20import Unity.Application 0.1
20import Unity.Application 0.1
21import Ubuntu.Components 0.1
21import Ubuntu.Components 0.1
22−import Ubuntu.Components.Popups 0.1
23import Ubuntu.Gestures 0.1
22import Ubuntu.Gestures 0.1
24import Unity.Launcher 0.1
23import Unity.Launcher 0.1
24+import Utils 0.1
25import LightDM 0.1 as LightDM
25import LightDM 0.1 as LightDM
26import Powerd 0.1
26import Powerd 0.1
27import SessionBroadcast 0.1
27import SessionBroadcast 0.1
@@ -31,10 +31,11 @@ import "Launcher"
31import "Panel"
31import "Panel"
32import "Components"
32import "Components"
33import "Notifications"
33import "Notifications"
34+import "Stages"
34import Unity.Notifications 1.0 as NotificationBackend
35import Unity.Notifications 1.0 as NotificationBackend
35import Unity.Session 0.1
36import Unity.Session 0.1
36
37
37−FocusScope {
38+Item {
38 id: shell
39 id: shell
39
40
40 // this is only here to select the width / height of the window if not running fullscreen
41 // this is only here to select the width / height of the window if not running fullscreen
@@ -47,7 +48,7 @@ FocusScope {
47 property url background
48 property url background
48 readonly property real panelHeight: panel.panelHeight
49 readonly property real panelHeight: panel.panelHeight
49
50
50− property bool dashShown: dash.shown
51+ property bool dashShown: dash.shown && dash.available && underlay.visible
51
52
52 property bool sideStageEnabled: shell.width >= units.gu(100)
53 property bool sideStageEnabled: shell.width >= units.gu(100)
53 readonly property string focusedApplicationId: ApplicationManager.focusedApplicationId
54 readonly property string focusedApplicationId: ApplicationManager.focusedApplicationId
@@ -55,14 +56,10 @@ FocusScope {
55 function activateApplication(appId) {
56 function activateApplication(appId) {
56 if (ApplicationManager.findApplication(appId)) {
57 if (ApplicationManager.findApplication(appId)) {
57 ApplicationManager.requestFocusApplication(appId);
58 ApplicationManager.requestFocusApplication(appId);
58− stages.show(true);
59− if (stages.locked && ApplicationManager.focusedApplicationId == appId) {
60− applicationsDisplayLoader.item.select(appId);
61− }
62 } else {
59 } else {
63 var execFlags = shell.sideStageEnabled ? ApplicationManager.NoFlag : ApplicationManager.ForceMainStage;
60 var execFlags = shell.sideStageEnabled ? ApplicationManager.NoFlag : ApplicationManager.ForceMainStage;
64 ApplicationManager.startApplication(appId, execFlags);
61 ApplicationManager.startApplication(appId, execFlags);
65− stages.show(false);
62+ stages.show();
66 }
63 }
67 }
64 }
68
65
@@ -89,82 +86,74 @@ FocusScope {
89 id: volumeControl
86 id: volumeControl
90 }
87 }
91
88
89+ WindowKeysFilter {
90+ // Handle but do not filter out volume keys
92− Keys.onVolumeUpPressed: volumeControl.volumeUp()
91+ Keys.onVolumeUpPressed: { volumeControl.volumeUp(); event.accepted = false; }
93− Keys.onVolumeDownPressed: volumeControl.volumeDown()
92+ Keys.onVolumeDownPressed: { volumeControl.volumeDown(); event.accepted = false; }
94
93
95− Item {
94+ Keys.onPressed: {
96− id: underlayClipper
95+ if (event.key == Qt.Key_PowerOff || event.key == Qt.Key_PowerDown) {
97− anchors.fill: parent
96+ dialogs.onPowerKeyPressed();
98− anchors.rightMargin: stages.overlayWidth
97+ event.accepted = true;
99− clip: stages.overlayMode && !stages.painting
98+ } else {
99+ event.accepted = false;
100+ }
101+ }
100
102
101− InputFilterArea {
103+ Keys.onReleased: {
102− anchors.fill: parent
104+ if (event.key == Qt.Key_PowerOff || event.key == Qt.Key_PowerDown) {
103− blockInput: parent.clip
105+ dialogs.onPowerKeyReleased();
106+ event.accepted = true;
107+ } else {
108+ event.accepted = false;
109+ }
104 }
110 }
111+ }
105
112
106− Item {
113+ Item {
107− id: underlay
114+ id: underlay
108− objectName: "underlay"
115+ objectName: "underlay"
109− anchors.fill: parent
116+ anchors.fill: parent
110− anchors.rightMargin: -parent.anchors.rightMargin
111
117
112− // Whether the underlay is fully covered by opaque UI elements.
118+ // Whether the underlay is fully covered by opaque UI elements.
113− property bool fullyCovered: panel.indicators.fullyOpened && shell.width <= panel.indicators.width
119+ property bool fullyCovered: (panel.indicators.fullyOpened && shell.width <= panel.indicatorsMenuWidth)
120+ || stages.fullyShown || greeterWrapper.fullyShown
121+ visible: !fullyCovered
114
122
115− // Whether the user should see the topmost application surface (if there's one at all).
123+ Image {
116− readonly property bool applicationSurfaceShouldBeSeen: stages.shown && !stages.painting && !stages.overlayMode
124+ anchors.fill: dash
125+ source: shell.width > shell.height ? "Dash/graphics/paper_landscape.png" : "Dash/graphics/paper_portrait.png"
126+ fillMode: Image.PreserveAspectCrop
127+ horizontalAlignment: Image.AlignRight
128+ verticalAlignment: Image.AlignTop
129+ }
117
130
118− // NB! Application surfaces are stacked behind the shell one. So they can only be seen by the user
131+ Dash {
119− // through the translucent parts of the shell surface.
132+ id: dash
120− visible: !fullyCovered && !applicationSurfaceShouldBeSeen
133+ objectName: "dash"
121
134
122− Rectangle {
135+ available: !LightDM.Greeter.active
123− anchors.fill: parent
136+ hides: [stages, launcher, panel.indicators]
124− color: "black"
137+ shown: disappearingAnimationProgress !== 1.0 && greeterWrapper.showProgress !== 1.0 &&
125− opacity: dash.disappearingAnimationProgress
138+ !(panel.indicators.fullyOpened && !sideStageEnabled)
126− }
139+ enabled: disappearingAnimationProgress === 0.0 && greeterWrapper.showProgress === 0.0 && edgeDemo.dashEnabled
127
140
128− Image {
141+ anchors {
129− anchors.fill: dash
142+ fill: parent
130− source: shell.width > shell.height ? "Dash/graphics/paper_landscape.png" : "Dash/graphics/paper_portrait.png"
143+ topMargin: panel.panelHeight
131− fillMode: Image.PreserveAspectCrop
132− horizontalAlignment: Image.AlignRight
133− verticalAlignment: Image.AlignTop
134 }
144 }
135
145
136− Dash {
146+ contentScale: 1.0 - 0.2 * disappearingAnimationProgress
137− id: dash
147+ opacity: 1.0 - disappearingAnimationProgress
138− objectName: "dash"
148+ property real disappearingAnimationProgress: stages.showProgress
139−
140− available: !LightDM.Greeter.active
141− hides: [stages, launcher, panel.indicators]
142− shown: disappearingAnimationProgress !== 1.0 && greeterWrapper.showProgress !== 1.0
143− enabled: disappearingAnimationProgress === 0.0 && greeterWrapper.showProgress === 0.0 && edgeDemo.dashEnabled
144
149
145− anchors {
146− fill: parent
147− topMargin: panel.panelHeight
148− }
149−
150− contentScale: 1.0 - 0.2 * disappearingAnimationProgress
151− opacity: 1.0 - disappearingAnimationProgress
152− property real disappearingAnimationProgress: {
153− if (stages.overlayMode) {
154− return 0;
155− } else {
156− return stages.showProgress
157− }
158− }
159−
160− // FIXME: only necessary because stages.showProgress is not animated
150+ // FIXME: only necessary because stages.showProgress is not animated
161− Behavior on disappearingAnimationProgress { SmoothedAnimation { velocity: 5 }}
151+ Behavior on disappearingAnimationProgress { SmoothedAnimation { velocity: 5 }}
162− }
163 }
152 }
164 }
153 }
165
154
166 EdgeDragArea {
155 EdgeDragArea {
167− id: stagesDragHandle
156+ id: stagesDragArea
168 direction: Direction.Leftwards
157 direction: Direction.Leftwards
169
158
170 anchors { top: parent.top; right: parent.right; bottom: parent.bottom }
159 anchors { top: parent.top; right: parent.right; bottom: parent.bottom }
@@ -174,20 +163,20 @@ FocusScope {
174
163
175 onTouchXChanged: {
164 onTouchXChanged: {
176 if (status == DirectionalDragArea.Recognized) {
165 if (status == DirectionalDragArea.Recognized) {
177− if (ApplicationManager.count == 0) {
166+ if (ApplicationManager.empty) {
178− progress = Math.max(stages.width - stagesDragHandle.width + touchX, stages.width * .3)
167+ progress = Math.max(stages.width - stagesDragArea.width + touchX, stages.width * .3);
179 } else {
168 } else {
180− progress = stages.width - stagesDragHandle.width + touchX
169+ progress = stages.width - stagesDragArea.width + touchX;
181 }
170 }
182 }
171 }
183 }
172 }
184
173
185 onDraggingChanged: {
174 onDraggingChanged: {
186 if (!dragging) {
175 if (!dragging) {
187− if (ApplicationManager.count > 0 && progress < stages.width - units.gu(10)) {
176+ if (!ApplicationManager.empty && progress < stages.width - units.gu(10)) {
188− stages.show(true)
177+ stages.show();
189 }
178 }
190− stagesDragHandle.progress = stages.width;
179+ stagesDragArea.progress = Qt.binding(function () { return stages.width; });
191 }
180 }
192 }
181 }
193 }
182 }
@@ -198,253 +187,93 @@ FocusScope {
198 width: parent.width
187 width: parent.width
199 height: parent.height
188 height: parent.height
200
189
190+ visible: !fullyHidden && !ApplicationManager.empty
191+
201 x: {
192 x: {
202 if (shown) {
193 if (shown) {
203− if (overlayMode || locked || greeter.fakeActiveForApp !== "") {
194+ if (locked || greeter.fakeActiveForApp !== "") {
204 return 0;
195 return 0;
205 }
196 }
206− return launcher.progress
197+ return launcher.progress;
207 } else {
198 } else {
208− return stagesDragHandle.progress
199+ return stagesDragArea.progress
209 }
200 }
210 }
201 }
211−
212 Behavior on x { SmoothedAnimation { velocity: 600; duration: UbuntuAnimation.FastDuration } }
202 Behavior on x { SmoothedAnimation { velocity: 600; duration: UbuntuAnimation.FastDuration } }
213
203
214 property bool shown: false
204 property bool shown: false
205+ onShownChanged: {
206+ if (shown) {
207+ if (ApplicationManager.count > 0) {
208+ ApplicationManager.focusApplication(ApplicationManager.get(0).appId);
209+ }
210+ } else {
211+ if (ApplicationManager.focusedApplicationId) {
212+ ApplicationManager.updateScreenshot(ApplicationManager.focusedApplicationId);
213+ ApplicationManager.unfocusCurrentApplication();
214+ }
215+ }
216+ }
215
217
218+ // Avoid a silent "divide by zero -> NaN" situation during init as shell.width will be
219+ // zero. That breaks the property binding and the function won't be reevaluated once
220+ // shell.width is set, with the NaN result staying there for good.
216− property real showProgress: overlayMode ? 0 : MathUtils.clamp(1 - x / shell.width, 0, 1)
221+ property real showProgress: shell.width ? MathUtils.clamp(1 - x / shell.width, 0, 1) : 0
217
222
218 property bool fullyShown: x == 0
223 property bool fullyShown: x == 0
219 property bool fullyHidden: x == width
224 property bool fullyHidden: x == width
220
225
221− property bool painting: applicationsDisplayLoader.item ? applicationsDisplayLoader.item.painting : false
222− property bool fullscreen: applicationsDisplayLoader.item ? applicationsDisplayLoader.item.fullscreen : false
223− property bool overlayMode: applicationsDisplayLoader.item ? applicationsDisplayLoader.item.overlayMode : false
224− property int overlayWidth: applicationsDisplayLoader.item ? applicationsDisplayLoader.item.overlayWidth : false
225 property bool locked: applicationsDisplayLoader.item ? applicationsDisplayLoader.item.locked : false
226 property bool locked: applicationsDisplayLoader.item ? applicationsDisplayLoader.item.locked : false
226
227
228+ // It might technically not be fullyShown but visually it just looks so.
229+ property bool roughlyFullyShown: x >= 0 && x <= units.gu(1)
230+
227− function show(focusApp) {
231+ function show() {
228 shown = true;
232 shown = true;
229− panel.indicators.hide();
230− edgeDemo.stopDemo();
231− greeter.hide();
232− if (!ApplicationManager.focusedApplicationId && ApplicationManager.count > 0 && focusApp) {
233− ApplicationManager.focusApplication(ApplicationManager.get(0).appId);
234− }
235 }
233 }
236
234
237 function hide() {
235 function hide() {
238 shown = false;
236 shown = false;
239− if (ApplicationManager.focusedApplicationId) {
240− ApplicationManager.unfocusCurrentApplication();
241− }
242 }
237 }
243
238
244 Connections {
239 Connections {
245 target: ApplicationManager
240 target: ApplicationManager
246−
247 onFocusRequested: {
241 onFocusRequested: {
248 if (greeter.fakeActiveForApp !== "" && greeter.fakeActiveForApp !== appId) {
242 if (greeter.fakeActiveForApp !== "" && greeter.fakeActiveForApp !== appId) {
249 lockscreen.show();
243 lockscreen.show();
250 }
244 }
251 greeter.hide();
245 greeter.hide();
252− stages.show(true);
246+ stages.show();
253 }
247 }
254
248
255 onFocusedApplicationIdChanged: {
249 onFocusedApplicationIdChanged: {
256 if (greeter.fakeActiveForApp !== "" && greeter.fakeActiveForApp !== ApplicationManager.focusedApplicationId) {
250 if (greeter.fakeActiveForApp !== "" && greeter.fakeActiveForApp !== ApplicationManager.focusedApplicationId) {
257 lockscreen.show();
251 lockscreen.show();
258 }
252 }
259− if (ApplicationManager.focusedApplicationId.length > 0) {
253+ panel.indicators.hide();
260− stages.show(false);
261− } else {
262− if (!stages.overlayMode) {
263− stages.hide();
264− }
265− }
266 }
254 }
267
255
268 onApplicationAdded: {
256 onApplicationAdded: {
269− stages.show(false);
257+ if (greeter.shown) {
270− }
258+ greeter.hide();
271−
272− onApplicationRemoved: {
273− if (ApplicationManager.focusedApplicationId.length == 0) {
274− stages.hide();
275− }
276− }
277− }
278−
279− property bool dialogShown: false
280−
281− Component {
282− id: logoutDialog
283− Dialog {
284− id: dialogueLogout
285− title: "Logout"
286− text: "Are you sure that you want to logout?"
287− Button {
288− text: "Cancel"
289− onClicked: {
290− PopupUtils.close(dialogueLogout);
291− stages.dialogShown = false;
292− }
293− }
294− Button {
295− text: "Yes"
296− onClicked: {
297− DBusUnitySessionService.Logout();
298− PopupUtils.close(dialogueLogout);
299− stages.dialogShown = false;
300− }
301− }
302− }
303− }
304−
305− Component {
306− id: shutdownDialog
307− Dialog {
308− id: dialogueShutdown
309− title: "Shutdown"
310− text: "Are you sure that you want to shutdown?"
311− Button {
312− text: "Cancel"
313− onClicked: {
314− PopupUtils.close(dialogueShutdown);
315− stages.dialogShown = false;
316− }
317− }
318− Button {
319− text: "Yes"
320− onClicked: {
321− dBusUnitySessionServiceConnection.closeAllApps();
322− DBusUnitySessionService.Shutdown();
323− PopupUtils.close(dialogueShutdown);
324− stages.dialogShown = false;
325− }
326− }
327− }
328− }
329−
330− Component {
331− id: rebootDialog
332− Dialog {
333− id: dialogueReboot
334− title: "Reboot"
335− text: "Are you sure that you want to reboot?"
336− Button {
337− text: "Cancel"
338− onClicked: {
339− PopupUtils.close(dialogueReboot)
340− stages.dialogShown = false;
341− }
342− }
343− Button {
344− text: "Yes"
345− onClicked: {
346− dBusUnitySessionServiceConnection.closeAllApps();
347− DBusUnitySessionService.Reboot();
348− PopupUtils.close(dialogueReboot);
349− stages.dialogShown = false;
350− }
351− }
352− }
353− }
354−
355− Component {
356− id: powerDialog
357− Dialog {
358− id: dialoguePower
359− title: "Power"
360− text: i18n.tr("Are you sure you would like to turn power off?")
361− Button {
362− text: i18n.tr("Power off")
363− onClicked: {
364− dBusUnitySessionServiceConnection.closeAllApps();
365− PopupUtils.close(dialoguePower);
366− stages.dialogShown = false;
367− shutdownFadeOutRectangle.enabled = true;
368− shutdownFadeOutRectangle.visible = true;
369− shutdownFadeOut.start();
370− }
371− }
372− Button {
373− text: i18n.tr("Restart")
374− onClicked: {
375− dBusUnitySessionServiceConnection.closeAllApps();
376− DBusUnitySessionService.Reboot();
377− PopupUtils.close(dialoguePower);
378− stages.dialogShown = false;
379− }
380− }
381− Button {
382− text: i18n.tr("Cancel")
383− onClicked: {
384− PopupUtils.close(dialoguePower);
385− stages.dialogShown = false;
386− }
387− }
388− }
389− }
390−
391− function showPowerDialog() {
392− if (!stages.dialogShown) {
393− stages.dialogShown = true;
394− PopupUtils.open(powerDialog);
395− }
396− }
397−
398− Connections {
399− id: dBusUnitySessionServiceConnection
400− objectName: "dBusUnitySessionServiceConnection"
401− target: DBusUnitySessionService
402−
403− function closeAllApps() {
404− while (true) {
405− var app = ApplicationManager.get(0);
406− if (app === null) {
407− break;
408− }
409− ApplicationManager.stopApplication(app.appId);
410 }
259 }
411− }
412−
413− onLogoutRequested: {
414− // Display a dialog to ask the user to confirm.
415− if (!stages.dialogShown) {
260+ if (!stages.shown) {
416− stages.dialogShown = true;
261+ stages.show();
417− PopupUtils.open(logoutDialog);
418 }
262 }
419 }
263 }
420
264
421− onShutdownRequested: {
265+ onEmptyChanged: {
422− // Display a dialog to ask the user to confirm.
266+ if (ApplicationManager.empty) {
423− if (!stages.dialogShown) {
267+ stages.hide();
424− stages.dialogShown = true;
425− PopupUtils.open(shutdownDialog);
426− }
427− }
428−
429− onRebootRequested: {
430− // Display a dialog to ask the user to confirm.
431− if (!stages.dialogShown) {
432− stages.dialogShown = true;
433− PopupUtils.open(rebootDialog);
434 }
268 }
435 }
269 }
436−
437− onLogoutReady: {
438− closeAllApps();
439− Qt.quit();
440− }
441 }
270 }
442
271
443 Loader {
272 Loader {
444 id: applicationsDisplayLoader
273 id: applicationsDisplayLoader
445 anchors.fill: parent
274 anchors.fill: parent
446
275
447− source: shell.sideStageEnabled ? "Stages/StageWithSideStage.qml" : "Stages/PhoneStage.qml"
276+ source: shell.sideStageEnabled ? "Stages/TabletStage.qml" : "Stages/PhoneStage.qml"
448
277
449 Binding {
278 Binding {
450 target: applicationsDisplayLoader.item
279 target: applicationsDisplayLoader.item
@@ -453,18 +282,20 @@ FocusScope {
453 }
282 }
454 Binding {
283 Binding {
455 target: applicationsDisplayLoader.item
284 target: applicationsDisplayLoader.item
456− property: "moving"
285+ property: "dragAreaWidth"
457− value: !stages.fullyShown
286+ value: shell.edgeSize
458 }
287 }
459 Binding {
288 Binding {
460 target: applicationsDisplayLoader.item
289 target: applicationsDisplayLoader.item
461− property: "shown"
290+ property: "maximizedAppTopMargin"
462− value: stages.shown
291+ // Not just using panel.panelHeight as that changes depending on the focused app.
292+ value: panel.indicators.panelHeight
463 }
293 }
464 Binding {
294 Binding {
465 target: applicationsDisplayLoader.item
295 target: applicationsDisplayLoader.item
466− property: "dragAreaWidth"
296+ property: "interactive"
467− value: shell.edgeSize
297+ value: stages.roughlyFullyShown && !greeter.shown && !lockscreen.shown
298+ && panel.indicators.fullyClosed
468 }
299 }
469 Binding {
300 Binding {
470 target: applicationsDisplayLoader.item
301 target: applicationsDisplayLoader.item
@@ -474,6 +305,33 @@ FocusScope {
474 }
305 }
475 }
306 }
476
307
308+ InputMethod {
309+ id: inputMethod
310+ objectName: "inputMethod"
311+ anchors { fill: parent; topMargin: panel.panelHeight }
312+ z: notifications.useModal || panel.indicators.shown ? overlay.z + 1 : overlay.z - 1
313+ }
314+
315+ Connections {
316+ target: SurfaceManager
317+ onSurfaceCreated: {
318+ if (surface.type == MirSurfaceItem.InputMethod) {
319+ inputMethod.surface = surface;
320+ }
321+ }
322+
323+ onSurfaceDestroyed: {
324+ if (inputMethod.surface == surface) {
325+ inputMethod.surface = null;
326+ surface.parent = null;
327+ }
328+ if (!surface.parent) {
329+ // there's no one displaying it. delete it right away
330+ surface.release();
331+ }
332+ }
333+ }
334+
477 Lockscreen {
335 Lockscreen {
478 id: lockscreen
336 id: lockscreen
479 objectName: "lockscreen"
337 objectName: "lockscreen"
@@ -486,7 +344,7 @@ FocusScope {
486 showAnimation: StandardAnimation { property: "opacity"; to: 1 }
344 showAnimation: StandardAnimation { property: "opacity"; to: 1 }
487 hideAnimation: StandardAnimation { property: "opacity"; to: 0 }
345 hideAnimation: StandardAnimation { property: "opacity"; to: 0 }
488 y: panel.panelHeight
346 y: panel.panelHeight
489− x: required ? 0 : - width
347+ visible: required
490 width: parent.width
348 width: parent.width
491 height: parent.height - panel.panelHeight
349 height: parent.height - panel.panelHeight
492 background: shell.background
350 background: shell.background
@@ -566,6 +424,7 @@ FocusScope {
566 StandardAnimation {}
424 StandardAnimation {}
567 }
425 }
568
426
427+ property bool fullyShown: showProgress === 1.0
569 readonly property real showProgress: MathUtils.clamp((1 - x/width) + greeter.showProgress - 1, 0, 1)
428 readonly property real showProgress: MathUtils.clamp((1 - x/width) + greeter.showProgress - 1, 0, 1)
570 onShowProgressChanged: if (LightDM.Greeter.promptless && showProgress === 0) greeter.login()
429 onShowProgressChanged: if (LightDM.Greeter.promptless && showProgress === 0) greeter.login()
571
430
@@ -632,12 +491,6 @@ FocusScope {
632 }
491 }
633 }
492 }
634
493
635− InputFilterArea {
636− anchors.fill: parent
637− blockInput: ApplicationManager.focusedApplicationId.length === 0 || greeter.shown || lockscreen.shown || launcher.shown
638− || panel.indicators.shown
639− }
640−
641 Connections {
494 Connections {
642 id: powerConnection
495 id: powerConnection
643 target: Powerd
496 target: Powerd
@@ -680,7 +533,7 @@ FocusScope {
680 return;
533 return;
681 }
534 }
682
535
683− if (stages.shown && !stages.overlayMode && !stages.locked) {
536+ if (!stages.locked) {
684 stages.hide();
537 stages.hide();
685 launcher.fadeOut();
538 launcher.fadeOut();
686 } else {
539 } else {
@@ -695,6 +548,7 @@ FocusScope {
695
548
696 Item {
549 Item {
697 id: overlay
550 id: overlay
551+ z: 10
698
552
699 anchors.fill: parent
553 anchors.fill: parent
700
554
@@ -709,29 +563,13 @@ FocusScope {
709 width: parent.width > units.gu(60) ? units.gu(40) : parent.width
563 width: parent.width > units.gu(60) ? units.gu(40) : parent.width
710 panelHeight: units.gu(3)
564 panelHeight: units.gu(3)
711 }
565 }
712− property string focusedAppId: ApplicationManager.focusedApplicationId
713− property var focusedApplication: ApplicationManager.findApplication(focusedAppId)
714− fullscreenMode: (focusedApplication && stages.fullscreen && !LightDM.Greeter.active) || greeter.fakeActiveForApp !== ""
715
566
716− InputFilterArea {
567+ property bool topmostApplicationIsFullscreen:
717− anchors {
568+ ApplicationManager.focusedApplicationId &&
718− top: parent.top
569+ ApplicationManager.findApplication(ApplicationManager.focusedApplicationId).fullscreen
719− left: parent.left
720− right: parent.right
721− }
722− height: (panel.fullscreenMode) ? shell.edgeSize : panel.panelHeight
723− blockInput: true
724− }
725− }
726
570
727− InputFilterArea {
571+ fullscreenMode: (stages.roughlyFullyShown && topmostApplicationIsFullscreen
728− blockInput: launcher.shown
572+ && !LightDM.Greeter.active) || greeter.fakeActiveForApp !== ""
729− anchors {
730− top: parent.top
731− bottom: parent.bottom
732− left: parent.left
733− }
734− width: launcher.width
735 }
573 }
736
574
737 Launcher {
575 Launcher {
@@ -774,11 +612,6 @@ FocusScope {
774 MouseArea {
612 MouseArea {
775 anchors.fill: parent
613 anchors.fill: parent
776 }
614 }
777−
778− InputFilterArea {
779− anchors.fill: parent
780− blockInput: modalNotificationBackground.visible
781− }
782 }
615 }
783
616
784 Notifications {
617 Notifications {
@@ -804,36 +637,7 @@ FocusScope {
804 PropertyChanges { target: notifications; width: units.gu(38) }
637 PropertyChanges { target: notifications; width: units.gu(38) }
805 }
638 }
806 ]
639 ]
807−
808− InputFilterArea {
809− anchors { left: parent.left; right: parent.right }
810− height: parent.contentHeight
811− blockInput: height > 0
812− }
813− }
814− }
815−
816− focus: true
817− onFocusChanged: if (!focus) forceActiveFocus();
818−
819− InputFilterArea {
820− anchors {
821− top: parent.top
822− bottom: parent.bottom
823− left: parent.left
824− }
825− width: shell.edgeSize
826− blockInput: true
827− }
828−
829− InputFilterArea {
830− anchors {
831− top: parent.top
832− bottom: parent.bottom
833− right: parent.right
834 }
640 }
835− width: shell.edgeSize
836− blockInput: true
837 }
641 }
838
642
839 Binding {
643 Binding {
@@ -842,24 +646,22 @@ FocusScope {
842 value: "unity8"
646 value: "unity8"
843 }
647 }
844
648
845− OSKController {
649+ Dialogs {
846− anchors.topMargin: panel.panelHeight
650+ id: dialogs
847− anchors.fill: parent // as needs to know the geometry of the shell
651+ anchors.fill: parent
848− }
652+ z: overlay.z + 10
849−
653+ onPowerOffClicked: {
850− //FIXME: This should be handled in the input stack, keyboard shouldnt propagate
654+ shutdownFadeOutRectangle.enabled = true;
851− MouseArea {
655+ shutdownFadeOutRectangle.visible = true;
852− anchors.bottom: parent.bottom
656+ shutdownFadeOut.start();
853− anchors.left: parent.left
657+ }
854− anchors.right: parent.right
855− height: ApplicationManager.keyboardVisible ? ApplicationManager.keyboardHeight : 0
856−
857− enabled: ApplicationManager.keyboardVisible
858 }
658 }
859
659
860 Label {
660 Label {
661+ id: alphaDisclaimerLabel
861 anchors.centerIn: parent
662 anchors.centerIn: parent
862 visible: ApplicationManager.fake ? ApplicationManager.fake : false
663 visible: ApplicationManager.fake ? ApplicationManager.fake : false
664+ z: dialogs.z + 10
863 text: "EARLY ALPHA\nNOT READY FOR USE"
665 text: "EARLY ALPHA\nNOT READY FOR USE"
864 color: "lightgrey"
666 color: "lightgrey"
865 opacity: 0.2
667 opacity: 0.2
@@ -873,6 +675,7 @@ FocusScope {
873
675
874 EdgeDemo {
676 EdgeDemo {
875 id: edgeDemo
677 id: edgeDemo
678+ z: alphaDisclaimerLabel.z + 10
876 greeter: greeter
679 greeter: greeter
877 launcher: launcher
680 launcher: launcher
878 dash: dash
681 dash: dash
@@ -885,35 +688,9 @@ FocusScope {
885 onShowHome: showHome()
688 onShowHome: showHome()
886 }
689 }
887
690
888− Keys.onPressed: {
889− if (event.key == Qt.Key_PowerOff || event.key == Qt.Key_PowerDown) {
890− if (!powerKeyTimer.running) {
891− powerKeyTimer.start();
892− }
893− event.accepted = true;
894− }
895− }
896−
897− Keys.onReleased: {
898− if (event.key == Qt.Key_PowerOff || event.key == Qt.Key_PowerDown) {
899− powerKeyTimer.stop();
900− event.accepted = true;
901− }
902− }
903−
904− Timer {
905− id: powerKeyTimer
906− interval: 2000
907− repeat: false
908− triggeredOnStart: false
909−
910− onTriggered: {
911− stages.showPowerDialog();
912− }
913− }
914−
915 Rectangle {
691 Rectangle {
916 id: shutdownFadeOutRectangle
692 id: shutdownFadeOutRectangle
693+ z: edgeDemo.z + 10
917 enabled: false
694 enabled: false
918 visible: false
695 visible: false
919 color: "black"
696 color: "black"
@@ -930,4 +707,5 @@ FocusScope {
930 }
707 }
931 }
708 }
932 }
709 }
710+
933}
711}
qml/Stages/Animations/BaseSurfaceAnimation.qmlnew file+93
@@ -0,0 +1,93 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.0
18+
19+/* This is the base case for surface animations, used when adding/removing * child surfaces.
20+ * The class is meant to be overridden and changes/animations provided for state changes.
21+ * NB. It is important to release the surface at the end of the "out" animation.
22+ *
23+ * Example - Simple fade in/out
24+ *
25+ * BaseSurfaceAnimation {
26+ * outChanges: [ PropertyChanges { target: animation.surface; opacity: 0.0 } ]
27+ * outAnimations: [
28+ SequentialAnimation {
29+ * NumberAnimation { target: animation.surface; property: "opacity"; duration: 300 }
30+ * ScriptAction { script: { if (animation.parent.removing) animation.surface.release(); } }
31+ * }
32+ * ]
33+ *
34+ * inChanges: [ PropertyChanges { target: animation.surface; opacity: 1.0 } ]
35+ * inAnimations: [ NumberAnimation { target: animation.surface; property: "opacity"; duration: 300 } ]
36+ * }
37+ */
38+Item {
39+ id: base
40+ property Item surface: null
41+
42+ // changes applied when state changes to "in"
43+ property list<QtObject> outChanges
44+ // transition animations when changing state to "in"
45+ property list<QtObject> outAnimations
46+
47+ // changes applied when state changes to "out"
48+ property list<QtObject> inChanges
49+ // transition animations when changing state to "out"
50+ property list<QtObject> inAnimations
51+
52+ function start() {
53+ // "prep" state forces outChanges without transition animations.
54+ state = "prep"
55+ state = "in";
56+ }
57+ function end() {
58+ state = "out";
59+ }
60+
61+ states: [
62+ State {
63+ name: "baseAnimation"
64+ PropertyChanges { target: base.surface; anchors.fill: undefined }
65+ },
66+
67+ State {
68+ name: "prep"
69+ extend: "baseAnimation"
70+ changes: outChanges
71+ },
72+ State {
73+ name: "out"
74+ extend: "prep"
75+ },
76+ State {
77+ name: "in"
78+ extend: "baseAnimation"
79+ changes: inChanges
80+ }
81+ ]
82+
83+ transitions: [
84+ Transition {
85+ to: "out"
86+ animations: outAnimations
87+ },
88+ Transition {
89+ to: "in"
90+ animations: inAnimations
91+ }
92+ ]
93+}
qml/Stages/Animations/DarkenAndFadeInAnimation.qmlnew file+48
@@ -0,0 +1,48 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.0
18+import Ubuntu.Components 1.1
19+
20+BaseSurfaceAnimation {
21+ id: animation
22+
23+ property Rectangle darkenItem: Rectangle {
24+ parent: animation.surface.parent
25+ anchors.fill: parent
26+ color: Qt.rgba(0,0,0,0.0)
27+ }
28+
29+ outChanges: [ PropertyChanges { target: animation.surface; opacity: 0.0 } ]
30+ outAnimations: [
31+ SequentialAnimation {
32+ UbuntuNumberAnimation { target: animation.surface; property: "opacity"; duration: UbuntuAnimation.FastDuration }
33+ ColorAnimation { target: darkenItem; duration: UbuntuAnimation.FastDuration }
34+ ScriptAction { script: { if (animation.parent.removing) animation.surface.release(); } }
35+ }
36+ ]
37+
38+ inChanges: [
39+ PropertyChanges { target: darkenItem; color: Qt.rgba(0,0,0,0.7) },
40+ PropertyChanges { target: animation.surface; opacity: 1.0 }
41+ ]
42+ inAnimations: [
43+ SequentialAnimation {
44+ ColorAnimation { target: darkenItem; duration: UbuntuAnimation.FastDuration }
45+ UbuntuNumberAnimation { target: animation.surface; property: "opacity"; duration: UbuntuAnimation.FastDuration }
46+ }
47+ ]
48+}
qml/Stages/Animations/SwipeFromBottomAnimation.qmlnew file+48
@@ -0,0 +1,48 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.0
18+
19+BaseSurfaceAnimation {
20+ id: animation
21+
22+ outChanges: [ AnchorChanges { target: animation.surface; anchors.top: animation.parent.bottom } ]
23+ outAnimations: [
24+ SequentialAnimation {
25+ PropertyAction { target: animation.parent; property: "clip"; value: true }
26+ AnchorAnimation { easing.type: Easing.InOutQuad; duration: 400 }
27+ PropertyAction { target: animation.surface; property: "visible"; value: !animation.parent.removing }
28+ PropertyAction { target: animation.parent; property: "clip"; value: false }
29+ ScriptAction { script: { if (animation.parent.removing) animation.surface.release(); } }
30+ }
31+ ]
32+
33+ inChanges: [
34+ AnchorChanges {
35+ target: animation.surface;
36+ anchors.top: animation.parent.top
37+ anchors.right: undefined
38+ anchors.bottom: undefined
39+ anchors.left: undefined
40+ } ]
41+ inAnimations: [
42+ SequentialAnimation {
43+ PropertyAction { target: animation.parent; property: "clip"; value: true }
44+ AnchorAnimation { easing.type: Easing.InOutQuad; duration: 400 }
45+ PropertyAction { target: animation.parent; property: "clip"; value: false }
46+ }
47+ ]
48+}
qml/Stages/Animations/SwipeUpAnimation.qmlnew file+49
@@ -0,0 +1,49 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.0
18+
19+BaseSurfaceAnimation {
20+ id: animation
21+
22+ outAnimations: [
23+ SequentialAnimation {
24+ PropertyAction { target: animation.parent; property: "clip"; value: true }
25+ PropertyAction { target: animation.surface; property: "visible"; value: true }
26+ AnchorAnimation { easing.type: Easing.InOutQuad; duration: 400 }
27+ PropertyAction { target: animation.parent; property: "clip"; value: false }
28+ ScriptAction { script: { if (animation.parent.removing) animation.surface.release(); } }
29+ }
30+ ]
31+
32+ inChanges: [
33+ AnchorChanges {
34+ target: animation.surface;
35+ anchors.top: undefined
36+ anchors.right: undefined
37+ anchors.bottom: animation.parent.top
38+ anchors.left: undefined
39+ }
40+ ]
41+ inAnimations: [
42+ SequentialAnimation {
43+ PropertyAction { target: animation.parent; property: "clip"; value: true }
44+ AnchorAnimation { easing.type: Easing.InOutQuad; duration: 400 }
45+ PropertyAction { target: animation.surface; property: "visible"; value: false}
46+ PropertyAction { target: animation.parent; property: "clip"; value: false }
47+ }
48+ ]
49+}
qml/Stages/PhoneStage.qml+171−263
@@ -18,7 +18,6 @@ import QtQuick 2.0
18import Ubuntu.Components 0.1
18import Ubuntu.Components 0.1
19import Ubuntu.Gestures 0.1
19import Ubuntu.Gestures 0.1
20import Unity.Application 0.1
20import Unity.Application 0.1
21−import LightDM 0.1 as LightDM
22import Utils 0.1
21import Utils 0.1
23import "../Components"
22import "../Components"
24
23
@@ -26,88 +25,51 @@ Item {
26 id: root
25 id: root
27
26
28 // Controls to be set from outside
27 // Controls to be set from outside
29− property bool shown: false
30− property bool moving: false
31 property int dragAreaWidth
28 property int dragAreaWidth
29+ property real maximizedAppTopMargin
30+ property bool interactive
31+ property bool spreadEnabled: true // If false, animations and right edge will be disabled
32
32
33 // State information propagated to the outside
33 // State information propagated to the outside
34− readonly property bool painting: mainScreenshotImage.visible || fadeInScreenshotImage.visible || appSplash.visible || spreadView.visible
35− property bool fullscreen: priv.focusedApplication ? priv.focusedApplication.fullscreen : false
36− property bool locked: spreadView.visible
34+ readonly property bool locked: spreadView.phase == 2
37− property bool spreadEnabled: true
38−
39− // Not used for PhoneStage, only useful for SideStage and similar
40− property bool overlayMode: false
41− property int overlayWidth: 0
42
35
43 function select(appId) {
36 function select(appId) {
44− spreadView.snapTo(priv.indexOf(appId))
37+ spreadView.snapTo(priv.indexOf(appId));
45 }
38 }
46
39
47− onMovingChanged: {
40+ onWidthChanged: {
48− if (moving) {
41+ spreadView.selectedIndex = -1;
49− if (ApplicationManager.focusedApplicationId) {
42+ spreadView.phase = 0;
50− priv.requestNewScreenshot();
43+ spreadView.contentX = -spreadView.shift;
51− } else {
52− mainScreenshotImage.anchors.leftMargin = 0;
53− mainScreenshotImage.source = ApplicationManager.get(0).screenshot;
54− mainScreenshotImage.visible = true;
55− }
56− } else {
57− mainScreenshotImage.visible = false;
58− }
59 }
44 }
60
45
61 Connections {
46 Connections {
62 target: ApplicationManager
47 target: ApplicationManager
63
48
64 onFocusRequested: {
49 onFocusRequested: {
65− if (spreadView.visible) {
50+ if (spreadView.phase > 0) {
66 spreadView.snapTo(priv.indexOf(appId));
51 spreadView.snapTo(priv.indexOf(appId));
67 } else {
52 } else {
68 priv.switchToApp(appId);
53 priv.switchToApp(appId);
69 }
54 }
70 }
55 }
71
56
72− onFocusedApplicationIdChanged: {
57+ onApplicationAdded: {
58+ if (spreadView.phase == 2) {
73− if (ApplicationManager.focusedApplicationId.length > 0) {
59+ spreadView.snapTo(ApplicationManager.count - 1);
74− if (priv.secondApplicationStarting || priv.applicationStarting) {
75− appSplashTimer.restart();
76− } else {
77− var application = priv.focusedApplication;
78− root.fullscreen = application.fullscreen;
79− mainScreenshotImage.source = application.screenshot;
80− }
81 } else {
60 } else {
82− spreadView.selectedIndex = -1;
83 spreadView.phase = 0;
61 spreadView.phase = 0;
84 spreadView.contentX = -spreadView.shift;
62 spreadView.contentX = -spreadView.shift;
85− }
63+ priv.switchToApp(appId);
86− }
87−
88− onApplicationAdded: {
89− if (!priv.focusedApplication) {
90− mainScreenshotImage.source = "";
91− mainScreenshotImage.visible = false;
92− priv.applicationStarting = true;
93− } else {
94− mainScreenshotImage.source = "";
95− priv.newFocusedAppId = appId;
96− priv.secondApplicationStarting = true;
97− priv.requestNewScreenshot();
98− }
99−
100− if (spreadView.visible) {
101− spreadView.snapTo(0);
102 }
64 }
103 }
65 }
104
66
105 onApplicationRemoved: {
67 onApplicationRemoved: {
106− if (ApplicationManager.count == 0) {
68+ // Unless we're closing the app ourselves in the spread,
107− mainScreenshotImage.source = ""
69+ // lets make sure the spread doesn't mess up by the changing app list.
108− mainScreenshotImage.visible = false;
70+ if (spreadView.closingIndex == -1) {
109− } else {
71+ spreadView.phase = 0;
110− mainScreenshotImage.source = ApplicationManager.get(0).screenshot;
72+ spreadView.contentX = -spreadView.shift;
111 }
73 }
112 }
74 }
113 }
75 }
@@ -117,46 +79,11 @@ Item {
117
79
118 property string focusedAppId: ApplicationManager.focusedApplicationId
80 property string focusedAppId: ApplicationManager.focusedApplicationId
119 property var focusedApplication: ApplicationManager.findApplication(focusedAppId)
81 property var focusedApplication: ApplicationManager.findApplication(focusedAppId)
120− property url focusedScreenshot: focusedApplication ? focusedApplication.screenshot : ""
121−
122− property bool waitingForScreenshot: false
123−
124− property bool applicationStarting: false
125− property bool secondApplicationStarting: false
126−
127− property string newFocusedAppId
128−
129− onFocusedScreenshotChanged: {
130− if (root.moving && priv.waitingForScreenshot) {
131− mainScreenshotImage.anchors.leftMargin = 0;
132− mainScreenshotImage.source = priv.focusedScreenshot
133− mainScreenshotImage.visible = true;
134− } else if (priv.secondApplicationStarting && priv.waitingForScreenshot) {
135− applicationSwitchingAnimation.start();
136− if (LightDM.Greeter.active && !LightDM.Greeter.promptless) {
137− // When greeter is up, no fancy animations, since user may
138− // glimpse an app they shouldn't
139− applicationSwitchingAnimation.complete();
140− }
141− }
142− waitingForScreenshot = false;
143− }
144−
145− function requestNewScreenshot() {
146− waitingForScreenshot = true;
147− ApplicationManager.updateScreenshot(focusedAppId);
148− }
149
82
150 function switchToApp(appId) {
83 function switchToApp(appId) {
151 if (priv.focusedAppId) {
84 if (priv.focusedAppId) {
152− priv.newFocusedAppId = appId;
85+ spreadView.focusChanging = true;
153− root.fullscreen = ApplicationManager.findApplication(appId).fullscreen;
86+ ApplicationManager.focusApplication(appId);
154− applicationSwitchingAnimation.start();
155− if (LightDM.Greeter.active && !LightDM.Greeter.promptless) {
156− // When greeter is up, no fancy animations, since user may
157− // glimpse an app they shouldn't
158− applicationSwitchingAnimation.complete();
159− }
160 } else {
87 } else {
161 ApplicationManager.focusApplication(appId);
88 ApplicationManager.focusApplication(appId);
162 }
89 }
@@ -173,158 +100,6 @@ Item {
173
100
174 }
101 }
175
102
176− // FIXME: the signal connections seems to get lost.
177− Connections {
178− target: priv.focusedApplication
179− onScreenshotChanged: priv.focusedScreenshot = priv.focusedApplication.screenshot
180− }
181− Binding {
182− target: root
183− property: "fullscreen"
184− value: priv.focusedApplication ? priv.focusedApplication.fullscreen : false
185− }
186−
187− Timer {
188− id: appSplashTimer
189− // FIXME: We really need to show something meaningful in the app surface instead of guessing
190− // when it might be ready
191− interval: 500
192− repeat: false
193− onTriggered: {
194− priv.applicationStarting = false;
195− priv.secondApplicationStarting = false;
196− }
197− }
198−
199− SequentialAnimation {
200− id: applicationSwitchingAnimation
201− // setup
202− PropertyAction { target: mainScreenshotImage; property: "anchors.leftMargin"; value: 0 }
203− PropertyAction { target: mainScreenshotImage; property: "source"; value: priv.focusedScreenshot }
204− PropertyAction { targets: [mainScreenshotImage, fadeInScreenshotImage]; property: "visible"; value: true }
205− PropertyAction { target: fadeInScreenshotImage; property: "source"; value: {
206− var newFocusedApp = ApplicationManager.findApplication(priv.newFocusedAppId);
207− return newFocusedApp ? newFocusedApp.screenshot : "" }
208− }
209− PropertyAction { target: fadeInScreenshotImage; property: "opacity"; value: 0 }
210− PropertyAction { target: fadeInScreenshotImage; property: "scale"; value: .8 }
211−
212−
213− // The actual animation
214− ParallelAnimation {
215− UbuntuNumberAnimation { target: mainScreenshotImage; property: "anchors.leftMargin"; to: root.width; duration: UbuntuAnimation.SlowDuration }
216− UbuntuNumberAnimation { target: fadeInScreenshotImage; properties: "opacity,scale"; to: 1; duration: UbuntuAnimation.SlowDuration }
217− }
218−
219− // restore stuff
220− ScriptAction { script: ApplicationManager.focusApplication(priv.newFocusedAppId); }
221− PropertyAction { target: fadeInScreenshotImage; property: "visible"; value: false }
222− PropertyAction { target: mainScreenshotImage; property: "visible"; value: false }
223− }
224−
225− // FIXME: Drop this and make the imageprovider show a splashscreen instead
226− Rectangle {
227− id: appSplash2
228− anchors.fill: parent
229− color: "black"
230− visible: priv.secondApplicationStarting
231− }
232− Image {
233− id: fadeInScreenshotImage
234− anchors { left: parent.left; bottom: parent.bottom }
235− width: parent.width
236− scale: .7
237− visible: false
238− }
239−
240− Rectangle {
241− id: appSplash
242− anchors.fill: parent
243− color: "black"
244− visible: priv.applicationStarting
245−
246− WaitingDots {
247− }
248− }
249− Image {
250− id: mainScreenshotImage
251− anchors { left: parent.left; bottom: parent.bottom }
252− width: parent.width
253− visible: false
254− }
255−
256− EdgeDragArea {
257− id: spreadDragArea
258− direction: Direction.Leftwards
259− enabled: ApplicationManager.count > 1 && spreadView.phase != 2 && root.spreadEnabled
260−
261− anchors { top: parent.top; right: parent.right; bottom: parent.bottom }
262− width: root.dragAreaWidth
263−
264− // Sitting at the right edge of the screen, this EdgeDragArea directly controls the spreadView when
265− // attachedToView is true. When the finger movement passes positionMarker3 we detach it from the
266− // spreadView and make the spreadView snap to positionMarker4.
267− property bool attachedToView: true
268−
269− property var gesturePoints: new Array()
270−
271− onTouchXChanged: {
272− if (!dragging && !priv.waitingForScreenshot) {
273− // Initial touch. Let's update the screenshot and reset the spreadView to the starting position.
274− priv.requestNewScreenshot();
275− spreadView.phase = 0;
276− spreadView.contentX = -spreadView.shift;
277− }
278− if (dragging && attachedToView) {
279− // Gesture recognized. Let's move the spreadView with the finger
280− spreadView.contentX = -touchX - spreadView.shift;
281− }
282− if (attachedToView && spreadView.shiftedContentX >= spreadView.width * spreadView.positionMarker3) {
283− // We passed positionMarker3. Detach from spreadView and snap it.
284− attachedToView = false;
285− spreadView.snap();
286− }
287− gesturePoints.push(touchX);
288− }
289−
290− onStatusChanged: {
291− if (status == DirectionalDragArea.Recognized) {
292− attachedToView = true;
293− }
294− }
295−
296− onDraggingChanged: {
297− if (dragging) {
298− // Gesture recognized. Start recording this gesture
299− gesturePoints = [];
300− return;
301− }
302−
303− // Ok. The user released. Find out if it was a one-way movement.
304− var oneWayFlick = true;
305− var smallestX = spreadDragArea.width;
306− for (var i = 0; i < gesturePoints.length; i++) {
307− if (gesturePoints[i] >= smallestX) {
308− oneWayFlick = false;
309− break;
310− }
311− smallestX = gesturePoints[i];
312− }
313− gesturePoints = [];
314−
315− if (oneWayFlick && spreadView.shiftedContentX > units.gu(2) &&
316− spreadView.shiftedContentX < spreadView.positionMarker1 * spreadView.width) {
317− // If it was a short one-way movement, do the Alt+Tab switch
318− // no matter if we didn't cross positionMarker1 yet.
319− spreadView.snapTo(1);
320− } else if (!dragging && attachedToView) {
321− // otherwise snap to the closest snap position we can find
322− // (might be back to start, to app 1 or to spread)
323− spreadView.snap();
324− }
325− }
326− }
327−
328 Rectangle {
103 Rectangle {
329 id: coverFlipBackground
104 id: coverFlipBackground
330 anchors.fill: parent
105 anchors.fill: parent
@@ -332,16 +107,12 @@ Item {
332 visible: spreadView.visible
107 visible: spreadView.visible
333 }
108 }
334
109
335− InputFilterArea {
336− anchors.fill: root
337− blockInput: spreadView.visible
338− }
339
110
340 Flickable {
111 Flickable {
341 id: spreadView
112 id: spreadView
342 objectName: "spreadView"
113 objectName: "spreadView"
343 anchors.fill: parent
114 anchors.fill: parent
344− visible: spreadDragArea.status == DirectionalDragArea.Recognized || phase > 1 || snapAnimation.running
115+ interactive: (spreadDragArea.status == DirectionalDragArea.Recognized || phase > 1) && draggedIndex == -1
345 contentWidth: spreadRow.width - shift
116 contentWidth: spreadRow.width - shift
346 contentX: -shift
117 contentX: -shift
347
118
@@ -350,8 +121,8 @@ Item {
350 // that, the beginning of the gesture starts with a negative value for contentX
121 // that, the beginning of the gesture starts with a negative value for contentX
351 // so the flickable wants to pull it into the view already. "shift" tunes the
122 // so the flickable wants to pull it into the view already. "shift" tunes the
352 // distance where to "lock" the content.
123 // distance where to "lock" the content.
353− property real shift: width / 2
124+ readonly property real shift: width / 2
354− property real shiftedContentX: contentX + shift
125+ readonly property real shiftedContentX: contentX + shift
355
126
356 property int tileDistance: width / 4
127 property int tileDistance: width / 4
357
128
@@ -375,6 +146,10 @@ Item {
375 property int phase: 0
146 property int phase: 0
376
147
377 property int selectedIndex: -1
148 property int selectedIndex: -1
149+ property int draggedIndex: -1
150+ property int closingIndex: -1
151+
152+ property bool focusChanging: false
378
153
379 onShiftedContentXChanged: {
154 onShiftedContentXChanged: {
380 switch (phase) {
155 switch (phase) {
@@ -398,9 +173,9 @@ Item {
398 snapAnimation.targetContentX = -shift;
173 snapAnimation.targetContentX = -shift;
399 snapAnimation.start();
174 snapAnimation.start();
400 } else if (shiftedContentX < positionMarker2 * width) {
175 } else if (shiftedContentX < positionMarker2 * width) {
401− snapTo(1)
176+ snapTo(1);
402 } else if (shiftedContentX < positionMarker3 * width) {
177 } else if (shiftedContentX < positionMarker3 * width) {
403− snapTo(1)
178+ snapTo(1);
404 } else if (phase < 2){
179 } else if (phase < 2){
405 // Add 1 pixel to make sure we definitely hit positionMarker4 even with rounding errors of the animation.
180 // Add 1 pixel to make sure we definitely hit positionMarker4 even with rounding errors of the animation.
406 snapAnimation.targetContentX = width * positionMarker4 + 1 - shift;
181 snapAnimation.targetContentX = width * positionMarker4 + 1 - shift;
@@ -408,9 +183,18 @@ Item {
408 }
183 }
409 }
184 }
410 function snapTo(index) {
185 function snapTo(index) {
186+ if (ApplicationManager.count <= index) {
187+ // In case we're trying to snap to some non existing app, lets snap back to the first one
188+ index = 0;
189+ }
411 spreadView.selectedIndex = index;
190 spreadView.selectedIndex = index;
412− root.fullscreen = ApplicationManager.get(index).fullscreen;
191+ // If we're not in full spread mode yet, always unwind to start pos
192+ // otherwise unwind up to progress 0 of the selected index
193+ if (spreadView.phase < 2) {
194+ snapAnimation.targetContentX = -shift;
195+ } else {
413− snapAnimation.targetContentX = -shift;
196+ snapAnimation.targetContentX = -shift + index * spreadView.tileDistance;
197+ }
414 snapAnimation.start();
198 snapAnimation.start();
415 }
199 }
416
200
@@ -429,7 +213,8 @@ Item {
429 script: {
213 script: {
430 if (spreadView.selectedIndex >= 0) {
214 if (spreadView.selectedIndex >= 0) {
431 ApplicationManager.focusApplication(ApplicationManager.get(spreadView.selectedIndex).appId);
215 ApplicationManager.focusApplication(ApplicationManager.get(spreadView.selectedIndex).appId);
216+
432− spreadView.selectedIndex = -1
217+ spreadView.selectedIndex = -1;
433 spreadView.phase = 0;
218 spreadView.phase = 0;
434 spreadView.contentX = -spreadView.shift;
219 spreadView.contentX = -spreadView.shift;
435 }
220 }
@@ -443,6 +228,15 @@ Item {
443 // tileDistance * app count (with a minimum of 3 apps, in order to also allow moving 1 and 2 apps a bit)
228 // tileDistance * app count (with a minimum of 3 apps, in order to also allow moving 1 and 2 apps a bit)
444 // + some constant value (still scales with the screen width) which looks good and somewhat fills the screen
229 // + some constant value (still scales with the screen width) which looks good and somewhat fills the screen
445 width: Math.max(3, ApplicationManager.count) * spreadView.tileDistance + (spreadView.width - spreadView.tileDistance) * 1.5
230 width: Math.max(3, ApplicationManager.count) * spreadView.tileDistance + (spreadView.width - spreadView.tileDistance) * 1.5
231+ Behavior on width {
232+ enabled: spreadView.closingIndex >= 0
233+ UbuntuNumberAnimation {}
234+ }
235+ onWidthChanged: {
236+ if (spreadView.closingIndex >= 0) {
237+ spreadView.contentX = Math.min(spreadView.contentX, width - spreadView.width - spreadView.shift);
238+ }
239+ }
446
240
447 x: spreadView.contentX
241 x: spreadView.contentX
448
242
@@ -462,18 +256,55 @@ Item {
462 height: spreadView.height
256 height: spreadView.height
463 selected: spreadView.selectedIndex == index
257 selected: spreadView.selectedIndex == index
464 otherSelected: spreadView.selectedIndex >= 0 && !selected
258 otherSelected: spreadView.selectedIndex >= 0 && !selected
259+ interactive: !spreadView.interactive && spreadView.phase === 0
260+ && spreadView.shiftedContentX === 0 && root.interactive && index === 0
261+ swipeToCloseEnabled: spreadView.interactive
262+ maximizedAppTopMargin: root.maximizedAppTopMargin
263+ dropShadow: spreadView.shiftedContentX > 0 || spreadDragArea.status == DirectionalDragArea.Undecided
465
264
466− z: index
265+ z: behavioredIndex
467 x: index == 0 ? 0 : spreadView.width + (index - 1) * spreadView.tileDistance
266 x: index == 0 ? 0 : spreadView.width + (index - 1) * spreadView.tileDistance
267+ property real behavioredIndex: index
268+ Behavior on behavioredIndex {
269+ enabled: spreadView.closingIndex >= 0
270+ UbuntuNumberAnimation {
271+ onRunningChanged: {
272+ if (!running) {
273+ spreadView.closingIndex = -1;
274+ }
275+ }
276+ }
277+ }
278+
279+ Behavior on x {
280+ enabled: spreadView.focusChanging && index == 0 && root.spreadEnabled
281+ UbuntuNumberAnimation {
282+ duration: UbuntuAnimation.FastDuration
283+ onRunningChanged: {
284+ if (!running) {
285+ spreadView.focusChanging = false;
286+ }
287+ }
288+ }
289+ }
468
290
469 // Each tile has a different progress value running from 0 to 1.
291 // Each tile has a different progress value running from 0 to 1.
470− // A progress value of 0 means the tile is at the right edge. 1 means the tile has reched the left edge.
292+ // 0: means the tile is at the right edge.
293+ // 1: means the tile has finished the main animation towards the left edge.
294+ // >1: after the main animation has finished, tiles will continue to move very slowly to the left
471 progress: {
295 progress: {
472− var tileProgress = (spreadView.shiftedContentX - index * spreadView.tileDistance) / spreadView.width;
296+ var tileProgress = (spreadView.shiftedContentX - behavioredIndex * spreadView.tileDistance) / spreadView.width;
473 // Tile 1 needs to move directly from the beginning...
297 // Tile 1 needs to move directly from the beginning...
474− if (index == 1 && spreadView.phase < 2) {
298+ if (behavioredIndex == 1 && spreadView.phase < 2) {
475 tileProgress += spreadView.tileDistance / spreadView.width;
299 tileProgress += spreadView.tileDistance / spreadView.width;
476 }
300 }
301+ // Limiting progress to ~0 and 1.7 to avoid binding calculations when tiles are not
302+ // visible.
303+ // < 0 : The tile is outside the screen on the right
304+ // > 1.7: The tile is *very* close to the left edge and covered by other tiles now.
305+ // Using 0.0001 to differentiate when a tile should still be visible (==0)
306+ // or we can hide it (< 0)
307+ tileProgress = Math.max(-0.0001, Math.min(1.7, tileProgress));
477 return tileProgress;
308 return tileProgress;
478 }
309 }
479
310
@@ -493,7 +324,7 @@ Item {
493
324
494 EasingCurve {
325 EasingCurve {
495 id: snappingCurve
326 id: snappingCurve
496− type: EasingCurve.OutQuad
327+ type: EasingCurve.Linear
497 period: 0.05
328 period: 0.05
498 progress: appDelegate.progress - spreadView.positionMarker1
329 progress: appDelegate.progress - spreadView.positionMarker1
499 }
330 }
@@ -507,7 +338,84 @@ Item {
507 }
338 }
508 }
339 }
509 }
340 }
341+
342+ onClosed: {
343+ spreadView.draggedIndex = -1;
344+ spreadView.closingIndex = index;
345+ ApplicationManager.stopApplication(ApplicationManager.get(index).appId);
346+ }
347+ }
348+ }
349+ }
350+ }
351+
352+ EdgeDragArea {
353+ id: spreadDragArea
354+ direction: Direction.Leftwards
355+ enabled: spreadView.phase != 2 && root.spreadEnabled
356+
357+ anchors { top: parent.top; right: parent.right; bottom: parent.bottom }
358+ width: root.dragAreaWidth
359+
360+ // Sitting at the right edge of the screen, this EdgeDragArea directly controls the spreadView when
361+ // attachedToView is true. When the finger movement passes positionMarker3 we detach it from the
362+ // spreadView and make the spreadView snap to positionMarker4.
363+ property bool attachedToView: true
364+
365+ property var gesturePoints: new Array()
366+
367+ onTouchXChanged: {
368+ if (!dragging) {
369+ // Initial touch. Let's reset the spreadView to the starting position.
370+ spreadView.phase = 0;
371+ spreadView.contentX = -spreadView.shift;
372+ }
373+ if (dragging && attachedToView) {
374+ // Gesture recognized. Let's move the spreadView with the finger
375+ spreadView.contentX = -touchX + spreadDragArea.width - spreadView.shift;
376+ }
377+ if (attachedToView && spreadView.shiftedContentX >= spreadView.width * spreadView.positionMarker3) {
378+ // We passed positionMarker3. Detach from spreadView and snap it.
379+ attachedToView = false;
380+ spreadView.snap();
381+ }
382+ gesturePoints.push(touchX);
383+ }
384+
385+ onStatusChanged: {
386+ if (status == DirectionalDragArea.Recognized) {
387+ attachedToView = true;
388+ }
389+ }
390+
391+ onDraggingChanged: {
392+ if (dragging) {
393+ // Gesture recognized. Start recording this gesture
394+ gesturePoints = [];
395+ return;
396+ }
397+
398+ // Ok. The user released. Find out if it was a one-way movement.
399+ var oneWayFlick = true;
400+ var smallestX = spreadDragArea.width;
401+ for (var i = 0; i < gesturePoints.length; i++) {
402+ if (gesturePoints[i] >= smallestX) {
403+ oneWayFlick = false;
404+ break;
510 }
405 }
406+ smallestX = gesturePoints[i];
407+ }
408+ gesturePoints = [];
409+
410+ if (oneWayFlick && spreadView.shiftedContentX > units.gu(2) &&
411+ spreadView.shiftedContentX < spreadView.positionMarker1 * spreadView.width) {
412+ // If it was a short one-way movement, do the Alt+Tab switch
413+ // no matter if we didn't cross positionMarker1 yet.
414+ spreadView.snapTo(1);
415+ } else if (!dragging && attachedToView) {
416+ // otherwise snap to the closest snap position we can find
417+ // (might be back to start, to app 1 or to spread)
418+ spreadView.snap();
511 }
419 }
512 }
420 }
513 }
421 }
qml/Stages/Splash.qmlnew file+68
@@ -0,0 +1,68 @@
1+/*
2+ * Copyright 2014 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU Lesser General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+*/
16+
17+import QtQuick 2.0
18+import Ubuntu.Components 0.1
19+import "../Components"
20+
21+Rectangle {
22+ id: root
23+ color: "black"
24+
25+ property string name: ""
26+ property url image: ""
27+
28+ UbuntuShape {
29+ id: iconShape
30+ anchors.horizontalCenter: parent.horizontalCenter
31+ anchors.verticalCenter: parent.verticalCenter
32+ anchors.verticalCenterOffset: -units.gu(4)
33+ width: units.gu(8)
34+ height: units.gu(7.5)
35+
36+ radius: "medium"
37+ borderSource: "none"
38+
39+ image: Image {
40+ id: iconImage
41+ sourceSize.width: iconShape.width
42+ sourceSize.height: iconShape.height
43+ source: root.image
44+ fillMode: Image.PreserveAspectCrop
45+ }
46+ }
47+
48+ Label {
49+ text: root.name
50+ anchors.horizontalCenter: parent.horizontalCenter
51+ anchors.top: iconShape.bottom
52+ anchors.topMargin: units.gu(2)
53+ fontSize: "large"
54+ }
55+
56+ WaitingDots {
57+ visible: parent.visible
58+ anchors.horizontalCenter: parent.horizontalCenter
59+ anchors.bottom: parent.bottom
60+ anchors.bottomMargin: units.gu(12)
61+ }
62+
63+ MouseArea {
64+ anchors.fill: parent
65+ enabled: parent.visible
66+ // absorb all mouse events
67+ }
68+}
qml/Stages/SpreadDelegate.qml+187−23
@@ -17,39 +17,203 @@
17*/
17*/
18
18
19import QtQuick 2.0
19import QtQuick 2.0
20+import Unity.Application 0.1
21+import Ubuntu.Components 1.1
22+import "../Components"
20
23
21Item {
24Item {
22 id: root
25 id: root
23
26
27+ // to be set from outside
28+ property bool interactive: true
29+ property bool dropShadow: true
30+ property real maximizedAppTopMargin
31+ property alias swipeToCloseEnabled: dragArea.enabled
32+
33+ readonly property bool isFullscreen: surface !== null && surfaceContainer.surface.anchors.topMargin == 0
34+
24 signal clicked()
35 signal clicked()
36+ signal closed()
37+
38+ SurfaceContainer {
39+ id: surfaceContainer
40+ anchors.fill: parent
41+ surface: model.surface
42+ property bool appHasCreatedASurface: false
43+
44+ onSurfaceChanged: {
45+ if (surface) {
46+ if (!appHasCreatedASurface) {
47+ surface.visible = false; // hide until splash screen removed
48+ appHasCreatedASurface = true;
49+ }
50+ }
51+ }
52+
53+ function revealSurface() {
54+ surface.visible = true;
55+ splashLoader.source = "";
56+ }
57+
58+ Binding {
59+ target: surfaceContainer.surface
60+ property: "anchors.topMargin"
61+ value: {
62+ return surfaceContainer.surface.state === MirSurfaceItem.Fullscreen ? 0 : maximizedAppTopMargin;
63+ }
64+ }
25
65
26− property real topMarginProgress
66+ Binding {
67+ target: surface
68+ property: "enabled"
69+ value: root.interactive
70+ }
71+ Binding {
72+ target: surface
73+ property: "focus"
74+ value: root.interactive
75+ }
76+
77+ Timer { //FIXME - need to delay removing splash screen to allow surface resize to complete
78+ id: surfaceRevealDelay
79+ interval: 100
80+ onTriggered: surfaceContainer.revealSurface()
81+ }
82+
83+ Connections {
84+ target: surface
85+ // FIXME: I would rather not need to do this, but currently it doesn't get
86+ // active focus without it and I don't know why.
87+ onFocusChanged: forceSurfaceActiveFocusIfReady();
88+ onParentChanged: forceSurfaceActiveFocusIfReady();
89+ onEnabledChanged: forceSurfaceActiveFocusIfReady();
90+ function forceSurfaceActiveFocusIfReady() {
91+ if (surface.focus && surface.parent === surfaceContainer && surface.enabled) {
92+ surface.forceActiveFocus();
93+ }
94+ }
95+ }
96+
97+ BorderImage {
98+ id: dropShadowImage
99+ anchors {
100+ fill: parent
101+ leftMargin: -units.gu(2)
102+ rightMargin: -units.gu(2)
103+ bottomMargin: -units.gu(2)
104+ topMargin: -units.gu(2) + (root.isFullscreen ? 0 : maximizedAppTopMargin)
105+ }
106+ source: "graphics/dropshadow.png"
107+ border { left: 50; right: 50; top: 50; bottom: 50 }
108+ opacity: root.dropShadow ? .4 : 0
109+ Behavior on opacity { UbuntuNumberAnimation {} }
110+ }
27
111
28− QtObject {
112+ transform: Translate {
29− id: priv
113+ y: dragArea.distance
30− property real heightDifference: root.height - appImage.implicitHeight
114+ }
31 }
115 }
32
116
33− Image {
117+
34− id: dropShadow
118+ StateGroup {
35− anchors.fill: appImage
119+ id: appSurfaceState
36− anchors.margins: -units.gu(2)
120+ states: [
37− source: "graphics/dropshadow.png"
121+ State {
38− opacity: .4
122+ name: "noSurfaceYet"
123+ when: !surfaceContainer.appHasCreatedASurface
124+ StateChangeScript {
125+ script: { splashLoader.setSource("Splash.qml", { "name": model.name, "image": model.icon }); }
126+ }
127+ },
128+ State {
129+ name: "hasSurface"
130+ when: surfaceContainer.appHasCreatedASurface && (surfaceContainer.surface !== null)
131+ StateChangeScript { script: { surfaceRevealDelay.start(); } }
132+ },
133+ State {
134+ name: "surfaceLostButAppStillAlive"
135+ when: surfaceContainer.appHasCreatedASurface && (surfaceContainer.surface === null)
136+ // TODO - use app snapshot
137+ }
138+ ]
139+ state: "noSurfaceYet"
39 }
140 }
40− Image {
141+
41− id: appImage
142+ Loader {
143+ id: splashLoader
42− anchors {
144+ anchors.fill: surfaceContainer
43− left: parent.left;
44− bottom: parent.bottom;
45− top: parent.top;
46− topMargin: priv.heightDifference * Math.max(0, 1 - root.topMarginProgress)
47− }
48− source: model.screenshot
49− antialiasing: true
50 }
145 }
51− MouseArea {
146+
147+ DraggingArea {
148+ id: dragArea
52− anchors.fill: appImage
149+ anchors.fill: parent
150+
151+ property bool moving: false
152+ property real distance: 0
153+
154+ onMovingChanged: {
155+ spreadView.draggedIndex = moving ? index : -1
156+ }
157+
158+ onDragValueChanged: {
159+ if (!dragging) {
160+ return;
161+ }
162+ moving = moving || Math.abs(dragValue) > units.gu(1)
163+ if (moving) {
164+ distance = dragValue;
165+ }
166+ }
167+
168+ onClicked: {
169+ if (!moving) {
53− onClicked: root.clicked()
170+ root.clicked();
171+ }
172+ }
173+
174+ onDragEnd: {
175+ // velocity and distance values specified by design prototype
176+ if ((dragVelocity < -units.gu(40) && distance < -units.gu(8)) || distance < -root.height / 2) {
177+ animation.animate("up")
178+ } else if ((dragVelocity > units.gu(40) && distance > units.gu(8)) || distance > root.height / 2) {
179+ animation.animate("down")
180+ } else {
181+ animation.animate("center")
182+ }
183+ }
184+
185+ UbuntuNumberAnimation {
186+ id: animation
187+ target: dragArea
188+ property: "distance"
189+ property bool requestClose: false
190+
191+ function animate(direction) {
192+ animation.from = dragArea.distance;
193+ switch (direction) {
194+ case "up":
195+ animation.to = -root.height * 1.5;
196+ requestClose = true;
197+ break;
198+ case "down":
199+ animation.to = root.height * 1.5;
200+ requestClose = true;
201+ break;
202+ default:
203+ animation.to = 0
204+ }
205+ animation.start();
206+ }
207+
208+ onRunningChanged: {
209+ if (!running) {
210+ dragArea.moving = false;
211+ dragArea.distance = 0;
212+ if (requestClose) {
213+ root.closed();
214+ }
215+ }
216+ }
217+ }
54 }
218 }
55}
219}
qml/Stages/StageWithSideStage.qmldeleted−413
@@ -1,413 +0,0 @@
1−/*
2− * Copyright (C) 2014 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import Ubuntu.Components 0.1
19−import "../Components"
20−import Unity.Application 0.1
21−import Ubuntu.Gestures 0.1
22−
23−Item {
24− id: root
25− objectName: "stages"
26− anchors.fill: parent
27−
28− // Controls to be set from outside
29− property bool shown: false
30− property bool moving: false
31− property int dragAreaWidth
32−
33− // State information propagated to the outside
34− readonly property bool painting: mainStageImage.visible || sideStageImage.visible || sideStageSnapAnimation.running
35− property bool fullscreen: priv.focusedApplication ? priv.focusedApplication.fullscreen : false
36− property bool overlayMode: (sideStageImage.shown && priv.mainStageAppId.length == 0) || priv.overlayOverride
37− || (priv.mainStageAppId.length == 0 && sideStageSnapAnimation.running)
38−
39− readonly property int overlayWidth: priv.overlayOverride ? 0 : priv.sideStageWidth
40−
41− onShownChanged: {
42− if (!shown) {
43− priv.mainStageAppId = "";
44− }
45− }
46−
47− onMovingChanged: {
48− if (moving) {
49− if (!priv.mainStageAppId && !priv.sideStageAppId) {
50− // Pulling in from the right, make the last used (topmost) app visible
51− var application = ApplicationManager.get(0);
52− if (application.stage == ApplicationInfoInterface.SideStage) {
53− sideStageImage.application = application;
54− sideStageImage.x = root.width - sideStageImage.width
55− sideStageImage.visible = true;
56− } else {
57− mainStageImage.application = application;
58− mainStageImage.visible = true;
59− }
60− } else {
61− priv.requestNewScreenshot(ApplicationInfoInterface.MainStage)
62− if (priv.focusedApplicationId == priv.sideStageAppId) {
63− priv.requestNewScreenshot(ApplicationInfoInterface.SideStage)
64− }
65− }
66− } else {
67− mainStageImage.visible = false;
68− sideStageImage.visible = false;
69− }
70− }
71−
72− QtObject {
73− id: priv
74−
75− property int sideStageWidth: units.gu(40)
76−
77−
78− property string sideStageAppId
79− property string mainStageAppId
80−
81−
82− property var sideStageApp: ApplicationManager.findApplication(sideStageAppId)
83− property var mainStageApp: ApplicationManager.findApplication(mainStageAppId)
84−
85− property string sideStageScreenshot: sideStageApp ? sideStageApp.screenshot : ""
86− property string mainStageScreenshot: mainStageApp ? mainStageApp.screenshot : ""
87−
88− property string focusedApplicationId: ApplicationManager.focusedApplicationId
89− property var focusedApplication: ApplicationManager.findApplication(focusedApplicationId)
90− property url focusedScreenshot: focusedApplication ? focusedApplication.screenshot : ""
91−
92− property bool waitingForMainScreenshot: false
93− property bool waitingForSideScreenshot: false
94− property bool waitingForScreenshots: waitingForMainScreenshot || waitingForSideScreenshot
95−
96− property string startingAppId: ""
97−
98− // Keep overlayMode even if there is no focused app (to allow pulling in the sidestage from the right)
99− property bool overlayOverride: false
100−
101− onFocusedApplicationChanged: {
102− if (focusedApplication) {
103− if (focusedApplication.stage == ApplicationInfoInterface.MainStage) {
104− mainStageAppId = focusedApplicationId;
105− priv.overlayOverride = false;
106− if (priv.startingAppId == focusedApplicationId && sideStageImage.shown) {
107− // There was already a sidestage app on top. bring it back!
108− ApplicationManager.focusApplication(priv.sideStageAppId)
109− priv.startingAppId = "";
110− }
111− } else if (focusedApplication.stage == ApplicationInfoInterface.SideStage) {
112− sideStageAppId = focusedApplicationId;
113− if (priv.startingAppId == focusedApplicationId && !sideStageImage.shown) {
114− sideStageImage.snapToApp(focusedApplication);
115− priv.startingAppId = "";
116− }
117− }
118− } else if (root.overlayMode){
119− sideStageImage.snapTo(root.width)
120− }
121− }
122−
123− onMainStageScreenshotChanged: {
124− waitingForMainScreenshot = false;
125− }
126−
127− onSideStageScreenshotChanged: {
128− waitingForSideScreenshot = false;
129− }
130−
131− onFocusedScreenshotChanged: {
132− waitingForSideScreenshot = false;
133− }
134−
135− onWaitingForScreenshotsChanged: {
136− if (waitingForScreenshots) {
137− return;
138− }
139−
140− if (root.moving) {
141− if (mainStageAppId) {
142− mainStageImage.application = mainStageApp
143− mainStageImage.visible = true;
144− }
145− if (sideStageAppId && focusedApplicationId == sideStageAppId) {
146− sideStageImage.application = sideStageApp;
147− sideStageImage.x = root.width - sideStageImage.width
148− sideStageImage.visible = true;
149− }
150− }
151− if (sideStageHandleMouseArea.pressed) {
152− if (sideStageAppId) {
153− sideStageImage.application = sideStageApp;
154− sideStageImage.x = root.width - sideStageImage.width
155− sideStageImage.visible = true;
156− }
157− if (mainStageAppId) {
158− mainStageImage.application = mainStageApp
159− mainStageImage.visible = true;
160− }
161− }
162− }
163−
164− function requestNewScreenshot(stage) {
165− if (stage == ApplicationInfoInterface.MainStage && mainStageAppId) {
166− waitingForMainScreenshot = true;
167− ApplicationManager.updateScreenshot(mainStageAppId);
168− } else if (stage == ApplicationInfoInterface.SideStage && sideStageAppId) {
169− waitingForSideScreenshot = true;
170− ApplicationManager.updateScreenshot(sideStageAppId);
171− }
172− }
173−
174− }
175− // FIXME: the signal connection seems to get lost with the fake application manager.
176− Connections {
177− target: priv.sideStageApp
178− onScreenshotChanged: priv.sideStageScreenshot = priv.sideStageApp.screenshot
179− }
180− Connections {
181− target: priv.mainStageApp
182− onScreenshotChanged: priv.mainStageScreenshot = priv.mainStageApp.screenshot
183− }
184−
185− Connections {
186− target: ApplicationManager
187−
188− onApplicationAdded: {
189− priv.startingAppId = appId;
190− splashScreenTimer.start();
191− var application = ApplicationManager.findApplication(appId)
192− if (application.stage == ApplicationInfoInterface.SideStage) {
193− sideStageSplash.visible = true;
194− } else if (application.stage == ApplicationInfoInterface.MainStage) {
195− mainStageSplash.visible = true;
196− }
197− }
198−
199− onFocusRequested: {
200− var application = ApplicationManager.findApplication(appId)
201− if (application.stage == ApplicationInfoInterface.SideStage) {
202− if (!root.shown) {
203− priv.mainStageAppId = "";
204− mainStageImage.application = null
205− }
206− if (sideStageImage.shown) {
207− sideStageImage.switchTo(application);
208− if (priv.mainStageAppId) {
209− mainStageImage.application = priv.mainStageApp;
210− mainStageImage.visible = true;
211− }
212− } else {
213− sideStageImage.application = application;
214− sideStageImage.snapToApp(application);
215− }
216− } else if (application.stage == ApplicationInfoInterface.MainStage) {
217− if (root.shown) {
218− if (sideStageImage.shown) {
219− sideStageImage.application = priv.sideStageApp;
220− sideStageImage.visible = true;
221− }
222− priv.mainStageAppId = application.appId;
223− mainStageImage.switchTo(application)
224− ApplicationManager.focusApplication(appId)
225− if (sideStageImage.shown) {
226− // There was already a focused SS app. Bring it back
227− ApplicationManager.focusApplication(priv.sideStageAppId)
228− }
229− } else {
230− if (sideStageImage.shown) {
231− sideStageImage.visible = false;
232− sideStageImage.x = root.width;
233− }
234−
235− mainStageImage.application = application;
236− ApplicationManager.focusApplication(appId)
237− }
238− }
239− }
240−
241− onApplicationRemoved: {
242− if (priv.mainStageAppId == appId) {
243− priv.mainStageAppId = "";
244− }
245− if (priv.sideStageAppId == appId) {
246− priv.sideStageAppId = "";
247− }
248− if (priv.sideStageAppId.length == 0) {
249− sideStageImage.shown = false;
250− priv.overlayOverride = false;
251− }
252− }
253−
254− }
255−
256− Timer {
257− id: splashScreenTimer
258− // FIXME: apart from removing this completely in the future and make the app surface paint
259− // meaningful stuff, also check for colin's stuff to land so we can shape 1.4 secs away from here
260− // https://code.launchpad.net/~cjwatson/upstart-app-launch/libclick-manifest/+merge/210520
261− // https://code.launchpad.net/~cjwatson/upstart-app-launch/libclick-pkgdir/+merge/209909
262− interval: 1700
263− repeat: false
264− onTriggered: {
265− mainStageSplash.visible = false;
266− sideStageSplash.visible = false;
267− }
268− }
269−
270− SwitchingApplicationImage {
271− id: mainStageImage
272− anchors.bottom: parent.bottom
273− width: parent.width
274− visible: false
275−
276− onSwitched: {
277− sideStageImage.visible = false;
278− }
279− }
280−
281− Rectangle {
282− id: mainStageSplash
283− anchors.fill: root
284− anchors.rightMargin: root.width - sideStageImage.x
285− color: "black"
286−
287− WaitingDots {
288− }
289− }
290−
291− SidestageHandle {
292− id: sideStageHandle
293− anchors { top: parent.top; right: sideStageImage.left; bottom: parent.bottom }
294− width: root.dragAreaWidth
295− visible: root.shown && priv.sideStageAppId && sideStageImage.x < root.width
296−
297− }
298− MouseArea {
299− id: sideStageHandleMouseArea
300− anchors { top: parent.top; right: parent.right; bottom: parent.bottom; rightMargin: sideStageImage.shown ? sideStageImage.width : 0}
301− width: root.dragAreaWidth
302− visible: priv.sideStageAppId
303−
304− property var dragPoints: new Array()
305−
306− onPressed: {
307− priv.requestNewScreenshot(ApplicationInfoInterface.SideStage)
308− if (priv.mainStageAppId) {
309− priv.requestNewScreenshot(ApplicationInfoInterface.MainStage)
310− }
311− }
312−
313− onMouseXChanged: {
314− dragPoints.push(mouseX)
315−
316− var dragPoint = root.width + mouseX;
317− if (sideStageImage.shown) {
318− dragPoint -= sideStageImage.width
319− }
320− sideStageImage.x = Math.max(root.width - sideStageImage.width, dragPoint)
321− }
322−
323− onReleased: {
324− var distance = 0;
325− var lastX = dragPoints[0];
326− var oneWayFlick = true;
327− for (var i = 0; i < dragPoints.length; ++i) {
328− if (dragPoints[i] < lastX) {
329− oneWayFlick = false;
330− }
331− distance += dragPoints[i] - lastX;
332− lastX = dragPoints[i];
333− }
334− dragPoints = [];
335−
336− if (oneWayFlick || distance > sideStageImage.width / 2) {
337− sideStageImage.snapTo(root.width)
338− } else {
339− sideStageImage.snapToApp(priv.sideStageApp)
340− }
341− }
342− }
343−
344− SwitchingApplicationImage {
345− id: sideStageImage
346− width: priv.sideStageWidth
347− height: root.height
348− x: root.width
349− anchors.bottom: parent.bottom
350− visible: true
351− property bool shown: false
352−
353− onSwitched: {
354− mainStageImage.visible = false;
355− ApplicationManager.focusApplication(application.appId)
356− }
357−
358− function snapTo(targetX) {
359− sideStageSnapAnimation.targetX = targetX
360− sideStageImage.visible = true;
361− if (priv.mainStageAppId) {
362− mainStageImage.application = priv.mainStageApp
363− mainStageImage.visible = true;
364− }
365− sideStageSnapAnimation.start();
366− }
367−
368− function snapToApp(application) {
369− sideStageImage.application = application
370− sideStageSnapAnimation.snapToId = application.appId;
371− snapTo(root.width - sideStageImage.width);
372− }
373−
374− SequentialAnimation {
375− id: sideStageSnapAnimation
376− property int targetX: root.width
377− property string snapToId
378−
379− UbuntuNumberAnimation { target: sideStageImage; property: "x"; to: sideStageSnapAnimation.targetX; duration: UbuntuAnimation.SlowDuration }
380− ScriptAction {
381− script: {
382− if (sideStageSnapAnimation.targetX == root.width) {
383− if (priv.mainStageAppId) {
384− ApplicationManager.focusApplication(priv.mainStageAppId)
385− } else {
386− priv.overlayOverride = true;
387− ApplicationManager.unfocusCurrentApplication();
388− }
389− sideStageImage.shown = false;
390− }
391− if (sideStageSnapAnimation.snapToId) {
392− ApplicationManager.focusApplication(sideStageSnapAnimation.snapToId)
393− sideStageSnapAnimation.snapToId = "";
394− sideStageImage.shown = true;
395− priv.overlayOverride = false;
396− }
397− sideStageImage.visible = false;
398− mainStageImage.visible = false;
399− }
400− }
401− }
402− }
403−
404− Rectangle {
405− id: sideStageSplash
406− anchors.fill: parent
407− anchors.leftMargin: sideStageImage.x
408− color: "black"
409−
410− WaitingDots {
411− }
412− }
413−}
qml/Stages/SurfaceContainer.qmlnew file+123
@@ -0,0 +1,123 @@
1+/*
2+ * Copyright 2014 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU Lesser General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+*/
16+
17+import QtQuick 2.0
18+import "Animations"
19+
20+Item {
21+ id: container
22+ property Item surface: null
23+ property bool removing: false
24+
25+ onSurfaceChanged: {
26+ if (surface) {
27+ surface.parent = container;
28+ surface.z = 1;
29+ state = "initial"
30+ }
31+ }
32+
33+ Connections {
34+ target: surface
35+ onRemoved: {
36+ container.removing = true;
37+
38+ var childSurfaces = surface.childSurfaces;
39+ for (var i=0; i<childSurfaces.length; i++) {
40+ childSurfaces[i].removed();
41+ }
42+
43+ //if we don't have children, nothing will tell us to animate out, so do it.
44+ if (childSurfaces.length === 0) {
45+ animateOut();
46+ }
47+ // tell our parent to animate out.
48+ if (surface.parentSurface) {
49+ surface.parentSurface.parent.animateOut();
50+ }
51+ }
52+ }
53+
54+ Repeater {
55+ model: container.surface ? container.surface.childSurfaces : 0
56+
57+ delegate: Loader {
58+ z: 2
59+ anchors {
60+ fill: container
61+ topMargin: container.surface.anchors.topMargin
62+ rightMargin: container.surface.anchors.rightMargin
63+ bottomMargin: container.surface.anchors.bottomMargin
64+ leftMargin: container.surface.anchors.leftMargin
65+ }
66+
67+ // Only way to do recursive qml items.
68+ source: Qt.resolvedUrl("SurfaceContainer.qml")
69+ onLoaded: {
70+ item.surface = modelData;
71+ item.animateIn(swipeFromBottom);
72+ container.animateIn(swipeUp);
73+ }
74+ }
75+ }
76+
77+ function animateIn(component) {
78+ var animation = component.createObject(container, { "surface": container.surface });
79+ animation.start();
80+
81+ var tmp = d.animations;
82+ tmp.push(animation);
83+ d.animations = tmp;
84+ }
85+
86+ function animateOut() {
87+ if (d.animations.length > 0) {
88+ var tmp = d.animations;
89+ var popped = tmp.pop();
90+ popped.end();
91+ d.animations = tmp;
92+ } else {
93+ container.state = "initial";
94+ }
95+ }
96+
97+ QtObject {
98+ id: d
99+ property var animations: []
100+ property var currentAnimation: animations.length > 0 ? animations[animations.length-1] : undefined
101+ }
102+
103+ Component {
104+ id: swipeFromBottom
105+ SwipeFromBottomAnimation {}
106+ }
107+ Component {
108+ id: swipeUp
109+ SwipeUpAnimation {}
110+ }
111+ Component {
112+ id: darkenFade
113+ DarkenAndFadeInAnimation {}
114+ }
115+
116+ states: [
117+ State {
118+ name: "initial"
119+ PropertyChanges { target: surface; anchors.fill: container }
120+ }
121+ // TODO: more animations!
122+ ]
123+}
qml/Stages/SwitchingApplicationImage.qmldeleted−81
@@ -1,81 +0,0 @@
1−/*
2− * Copyright 2014 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU Lesser General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors: Michael Zanetti <michael.zanetti@canonical.com>
17−*/
18−
19−import QtQuick 2.0
20−import Ubuntu.Components 0.1
21−
22−Rectangle {
23− id: root
24− implicitHeight: image.implicitHeight
25− implicitWidth: image.implicitWidth
26− color: "black"
27−
28− property var application
29−
30− signal switched()
31−
32− function switchTo(application) {
33− if (root.application == application) {
34− root.switched();
35− return;
36− }
37−
38− priv.newApplication = application
39− root.visible = true;
40− switchToAnimation.start()
41− }
42−
43− QtObject {
44− id: priv
45− property var newApplication
46− }
47−
48− Image {
49− id: newImage
50− anchors.bottom: parent.bottom
51− width: root.width
52− source: priv.newApplication ? priv.newApplication.screenshot : ""
53− }
54−
55− Image {
56− id: image
57− visible: true
58− source: root.application ? root.application.screenshot : ""
59− width: root.width
60− height: sourceSize.height
61− anchors.bottom: parent.bottom
62−
63− }
64−
65− SequentialAnimation {
66− id: switchToAnimation
67− ParallelAnimation {
68− UbuntuNumberAnimation { target: image; property: "x"; from: 0; to: root.width; duration: UbuntuAnimation.SlowDuration }
69− UbuntuNumberAnimation { target: newImage; property: "scale"; from: 0.7; to: 1; duration: UbuntuAnimation.SlowDuration }
70− }
71− ScriptAction {
72− script: {
73− image.x = 0
74− root.application = priv.newApplication
75− root.visible = false;
76− priv.newApplication = null
77− root.switched();
78− }
79− }
80− }
81−}
qml/Stages/TabletStage.qmlnew file+568
@@ -0,0 +1,568 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.0
18+import Ubuntu.Components 0.1
19+import Ubuntu.Gestures 0.1
20+import Unity.Application 0.1
21+import Utils 0.1
22+import "../Components"
23+
24+Item {
25+ id: root
26+ objectName: "stages"
27+ anchors.fill: parent
28+
29+ // Controls to be set from outside
30+ property bool shown: false
31+ property bool moving: false
32+ property int dragAreaWidth
33+ property real maximizedAppTopMargin
34+ property bool interactive
35+
36+ // State information propagated to the outside
37+ readonly property bool locked: spreadView.phase == 2
38+
39+ QtObject {
40+ id: priv
41+
42+ property string focusedAppId: ApplicationManager.focusedApplicationId
43+ property string oldFocusedAppId: ""
44+
45+ property string mainStageAppId
46+ property string sideStageAppId
47+
48+ // For convenience, keep properties of the first two apps in the model
49+ property string appId0
50+ property string appId1
51+
52+ onFocusedAppIdChanged: {
53+ if (priv.focusedAppId.length > 0) {
54+ var focusedApp = ApplicationManager.findApplication(focusedAppId);
55+ if (focusedApp.stage == ApplicationInfoInterface.SideStage) {
56+ priv.sideStageAppId = focusedAppId;
57+ } else {
58+ priv.mainStageAppId = focusedAppId;
59+ }
60+ }
61+
62+ appId0 = ApplicationManager.count >= 1 ? ApplicationManager.get(0).appId : "";
63+ appId1 = ApplicationManager.count > 1 ? ApplicationManager.get(1).appId : "";
64+ }
65+
66+ function indexOf(appId) {
67+ for (var i = 0; i < ApplicationManager.count; i++) {
68+ if (ApplicationManager.get(i).appId == appId) {
69+ return i;
70+ }
71+ }
72+ return -1;
73+ }
74+
75+ function evaluateOneWayFlick(gesturePoints) {
76+ // Need to have at least 3 points to recognize it as a flick
77+ if (gesturePoints.length < 3) {
78+ return false;
79+ }
80+ // Need to have a movement of at least 2 grid units to recognize it as a flick
81+ if (Math.abs(gesturePoints[gesturePoints.length - 1] - gesturePoints[0]) < units.gu(2)) {
82+ return false;
83+ }
84+
85+ var oneWayFlick = true;
86+ var smallestX = gesturePoints[0];
87+ var leftWards = gesturePoints[1] < gesturePoints[0];
88+ for (var i = 1; i < gesturePoints.length; i++) {
89+ if ((leftWards && gesturePoints[i] >= smallestX)
90+ || (!leftWards && gesturePoints[i] <= smallestX)) {
91+ oneWayFlick = false;
92+ break;
93+ }
94+ smallestX = gesturePoints[i];
95+ }
96+ return oneWayFlick;
97+ }
98+ }
99+
100+ Connections {
101+ target: ApplicationManager
102+ onFocusRequested: {
103+ if (spreadView.interactive) {
104+ spreadView.snapTo(priv.indexOf(appId));
105+ } else {
106+ ApplicationManager.focusApplication(appId);
107+ }
108+ }
109+
110+ onApplicationRemoved: {
111+ if (priv.mainStageAppId == appId) {
112+ priv.mainStageAppId = "";
113+ }
114+ if (priv.sideStageAppId == appId) {
115+ priv.sideStageAppId = "";
116+ }
117+ if (ApplicationManager.count == 0) {
118+ spreadView.phase = 0;
119+ spreadView.contentX = 0;
120+ }
121+ }
122+ }
123+
124+ Flickable {
125+ id: spreadView
126+ anchors.fill: parent
127+ contentWidth: spreadRow.width
128+ interactive: (spreadDragArea.status == DirectionalDragArea.Recognized || phase > 1) && draggedIndex == -1
129+
130+ property int tileDistance: units.gu(20)
131+ property int sideStageWidth: units.gu(40)
132+ property bool sideStageVisible: priv.sideStageAppId
133+
134+ // Phase of the animation:
135+ // 0: Starting from right edge, a new app (index 1) comes in from the right
136+ // 1: The app has reached the first snap position.
137+ // 2: The list is dragged further and snaps into the spread view when entering phase 2
138+ property int phase
139+
140+ readonly property int phase0Width: sideStageWidth
141+ readonly property int phase1Width: sideStageWidth
142+
143+ // Those markers mark the various positions in the spread (ratio to screen width from right to left):
144+ // 0 - 1: following finger, snap back to the beginning on release
145+ readonly property real positionMarker1: 0.2
146+ // 1 - 2: curved snapping movement, snap to nextInStack on release
147+ readonly property real positionMarker2: sideStageWidth / spreadView.width
148+ // 2 - 3: movement follows finger, snaps to phase 2 (full spread) on release
149+ readonly property real positionMarker3: 0.6
150+ // passing 3, we detach movement from the finger and snap to phase 2 (full spread)
151+ readonly property real positionMarker4: 0.8
152+
153+ readonly property int startSnapPosition: phase0Width * 0.5
154+ readonly property int endSnapPosition: phase0Width * 0.75
155+ readonly property real snapPosition: 0.75
156+
157+ property int selectedIndex: -1
158+ property int draggedIndex: -1
159+ property int closingIndex: -1
160+
161+ property bool sideStageDragging: sideStageDragHandle.dragging
162+ property real sideStageDragProgress: sideStageDragHandle.progress
163+
164+ onSideStageDragProgressChanged: {
165+ if (sideStageDragProgress == 1) {
166+ ApplicationManager.focusApplication(priv.mainStageAppId);
167+ priv.sideStageAppId = "";
168+ }
169+ }
170+
171+ property int nextInStack: {
172+ switch (state) {
173+ case "main":
174+ if (ApplicationManager.count > 1) {
175+ return 1;
176+ }
177+ return -1;
178+ case "mainAndOverlay":
179+ if (ApplicationManager.count <= 2) {
180+ return -1;
181+ }
182+ if (priv.appId0 == priv.mainStageAppId || priv.appId0 == priv.sideStageAppId) {
183+ if (priv.appId1 == priv.mainStageAppId || priv.appId1 == priv.sideStageAppId) {
184+ return 2;
185+ }
186+ return 1;
187+ }
188+ return 0;
189+ case "overlay":
190+ return 1;
191+ }
192+ print("Unhandled nextInStack case! This shouldn't happen any more when the Dash is an app!");
193+ return -1;
194+ }
195+ property int nextZInStack: indexToZIndex(nextInStack)
196+
197+ states: [
198+ State {
199+ name: "empty"
200+ },
201+ State {
202+ name: "main"
203+ },
204+ State { // Side Stage only in overlay mode
205+ name: "overlay"
206+ },
207+ State { // Main Stage and Side Stage in overlay mode
208+ name: "mainAndOverlay"
209+ },
210+ State { // Main Stage and Side Stage in split mode
211+ name: "mainAndSplit"
212+ }
213+ ]
214+ state: {
215+ if (priv.mainStageAppId && !priv.sideStageAppId) {
216+ return "main";
217+ }
218+ if (!priv.mainStageAppId && priv.sideStageAppId) {
219+ return "overlay";
220+ }
221+ if (priv.mainStageAppId && priv.sideStageAppId) {
222+ return "mainAndOverlay";
223+ }
224+ return "empty";
225+ }
226+
227+ onContentXChanged: {
228+ if (spreadView.phase == 0 && spreadView.contentX > spreadView.width * spreadView.positionMarker2) {
229+ spreadView.phase = 1;
230+ } else if (spreadView.phase == 1 && spreadView.contentX > spreadView.width * spreadView.positionMarker4) {
231+ spreadView.phase = 2;
232+ } else if (spreadView.phase == 1 && spreadView.contentX < spreadView.width * spreadView.positionMarker2) {
233+ spreadView.phase = 0;
234+ }
235+ }
236+
237+ function snap() {
238+ if (contentX < phase0Width) {
239+ snapAnimation.targetContentX = 0;
240+ snapAnimation.start();
241+ } else if (contentX < phase1Width) {
242+ snapTo(1);
243+ } else {
244+ // Add 1 pixel to make sure we definitely hit positionMarker4 even with rounding errors of the animation.
245+ snapAnimation.targetContentX = spreadView.width * spreadView.positionMarker4 + 1;
246+ snapAnimation.start();
247+ }
248+ }
249+ function snapTo(index) {
250+ spreadView.selectedIndex = index;
251+ snapAnimation.targetContentX = 0;
252+ snapAnimation.start();
253+ }
254+
255+ // We need to shuffle z ordering a bit in order to keep side stage apps above main stage apps.
256+ // We don't want to really reorder them in the model because that allows us to keep track
257+ // of the last focused order.
258+ function indexToZIndex(index) {
259+ var app = ApplicationManager.get(index);
260+ if (!app) {
261+ return index;
262+ }
263+
264+ var isActive = app.appId == priv.mainStageAppId || app.appId == priv.sideStageAppId;
265+ if (isActive && app.stage == ApplicationInfoInterface.MainStage) {
266+ // if this app is active, and its the MainStage, always put it to index 0
267+ return 0;
268+ }
269+ if (isActive && app.stage == ApplicationInfoInterface.SideStage) {
270+ if (!priv.mainStageAppId) {
271+ // Only have SS apps running. Put the active one at 0
272+ return 0;
273+ }
274+
275+ // Precondition now: There's an active MS app and this is SS app:
276+ if (spreadView.nextInStack >= 0 && ApplicationManager.get(spreadView.nextInStack).stage == ApplicationInfoInterface.MainStage) {
277+ // If the next app coming from the right is a MS app, we need to elevate this SS ap above it.
278+ // Put it to at least level 2, or higher if there's more apps coming in before this one.
279+ return Math.max(index, 2);
280+ } else {
281+ // if this is no next app to come in from the right, place this one at index 1, just on top the active MS app.
282+ return 1;
283+ }
284+ }
285+ if (index <= 2 && app.stage == ApplicationInfoInterface.MainStage && priv.sideStageAppId) {
286+ // Ok, this is an inactive MS app. If there's an active SS app around, we need to place this one
287+ // in between the active MS app and the active SS app, so that it comes in from there when dragging from the right.
288+ // If there's now active SS app, just leave it where it is.
289+ return priv.indexOf(priv.sideStageAppId) < index ? index - 1 : index;
290+ }
291+ if (index == spreadView.nextInStack && app.stage == ApplicationInfoInterface.SideStage) {
292+ // This is a SS app and the next one to come in from the right:
293+ if (priv.sideStageAppId && priv.mainStageAppId) {
294+ // If there's both, an active MS and an active SS app, put this one right on top of that
295+ return 2;
296+ }
297+ // Or if there's only one other active app, put it on top of that.
298+ // The case that there isn't any other active app is already handled above.
299+ return 1;
300+ }
301+ if (index == 2 && spreadView.nextInStack == 1 && priv.sideStageAppId) {
302+ // If its index 2 but not the next one to come in, it means
303+ // we've pulled another one down to index 2. Move this one up to 2 instead.
304+ return 3;
305+ }
306+ // don't touch all others... (mostly index > 3 + simple cases where the above doesn't shuffle much)
307+ return index;
308+ }
309+
310+ SequentialAnimation {
311+ id: snapAnimation
312+ property int targetContentX: 0
313+
314+ UbuntuNumberAnimation {
315+ target: spreadView
316+ property: "contentX"
317+ to: snapAnimation.targetContentX
318+ duration: UbuntuAnimation.FastDuration
319+ }
320+
321+ ScriptAction {
322+ script: {
323+ if (spreadView.selectedIndex >= 0) {
324+ var newIndex = spreadView.selectedIndex;
325+ spreadView.selectedIndex = -1;
326+ ApplicationManager.focusApplication(ApplicationManager.get(newIndex).appId);
327+ spreadView.phase = 0;
328+ spreadView.contentX = 0;
329+ }
330+ }
331+ }
332+ }
333+
334+ Rectangle {
335+ id: spreadRow
336+ color: "black"
337+ x: spreadView.contentX
338+ height: root.height
339+ width: spreadView.width + Math.max(spreadView.width, ApplicationManager.count * spreadView.tileDistance)
340+
341+ Rectangle {
342+ id: sideStageBackground
343+ color: "black"
344+ anchors.fill: parent
345+ anchors.leftMargin: spreadView.width - (1 - sideStageDragHandle.progress) * spreadView.sideStageWidth
346+ z: spreadView.indexToZIndex(priv.indexOf(priv.sideStageAppId))
347+ opacity: spreadView.phase == 0 ? 1 : 0
348+ Behavior on opacity { UbuntuNumberAnimation {} }
349+ }
350+
351+ Item {
352+ id: sideStageDragHandle
353+ anchors { top: parent.top; bottom: parent.bottom; left: parent.left; leftMargin: spreadView.width - spreadView.sideStageWidth - width }
354+ width: units.gu(2)
355+ z: sideStageBackground.z
356+ opacity: spreadView.phase <= 0 && spreadView.sideStageVisible ? 1 : 0
357+ property real progress: 0
358+ property bool dragging: false
359+
360+ Behavior on opacity { UbuntuNumberAnimation {} }
361+
362+ Connections {
363+ target: spreadView
364+ onSideStageVisibleChanged: {
365+ if (spreadView.sideStageVisible) {
366+ sideStageDragHandle.progress = 0;
367+ }
368+ }
369+ }
370+
371+ Image {
372+ anchors.centerIn: parent
373+ anchors.horizontalCenterOffset: parent.progress * spreadView.sideStageWidth - (width - parent.width) / 2
374+ width: sideStageDragHandleMouseArea.pressed ? parent.width * 2 : parent.width
375+ height: parent.height
376+ source: "graphics/sidestage_handle@20.png"
377+ Behavior on width { UbuntuNumberAnimation {} }
378+ }
379+
380+ MouseArea {
381+ id: sideStageDragHandleMouseArea
382+ anchors.fill: parent
383+ enabled: spreadView.contentX == 0
384+ property int startX
385+ property var gesturePoints: new Array()
386+
387+ onPressed: {
388+ gesturePoints = [];
389+ startX = mouseX;
390+ sideStageDragHandle.progress = 0;
391+ sideStageDragHandle.dragging = true;
392+ }
393+ onMouseXChanged: {
394+ if (priv.mainStageAppId) {
395+ sideStageDragHandle.progress = Math.max(0, (-startX + mouseX) / spreadView.sideStageWidth);
396+ }
397+ gesturePoints.push(mouseX);
398+ }
399+ onReleased: {
400+ if (priv.mainStageAppId) {
401+ var oneWayFlick = priv.evaluateOneWayFlick(gesturePoints);
402+ sideStageDragSnapAnimation.to = sideStageDragHandle.progress > 0.5 || oneWayFlick ? 1 : 0;
403+ sideStageDragSnapAnimation.start();
404+ } else {
405+ sideStageDragHandle.dragging = false;
406+ }
407+ }
408+ }
409+ UbuntuNumberAnimation {
410+ id: sideStageDragSnapAnimation
411+ target: sideStageDragHandle
412+ property: "progress"
413+
414+ onRunningChanged: {
415+ if (!running) {
416+ sideStageDragHandle.dragging = false;;
417+ }
418+ }
419+ }
420+ }
421+
422+ Repeater {
423+ id: spreadRepeater
424+ model: ApplicationManager
425+
426+ delegate: TransformedTabletSpreadDelegate {
427+ id: spreadTile
428+ height: spreadView.height
429+ width: model.stage == ApplicationInfoInterface.MainStage ? spreadView.width : spreadView.sideStageWidth
430+ x: spreadView.width
431+ z: spreadView.indexToZIndex(index)
432+ active: model.appId == priv.mainStageAppId || model.appId == priv.sideStageAppId
433+ zIndex: z
434+ selected: spreadView.selectedIndex == index
435+ otherSelected: spreadView.selectedIndex >= 0 && !selected
436+ isInSideStage: priv.sideStageAppId == model.appId
437+ interactive: !spreadView.interactive && spreadView.phase === 0 && root.interactive
438+ swipeToCloseEnabled: spreadView.interactive
439+ maximizedAppTopMargin: root.maximizedAppTopMargin
440+ dropShadow: spreadView.contentX > 0 || spreadDragArea.status == DirectionalDragArea.Undecided
441+
442+ property real behavioredZIndex: zIndex
443+ Behavior on behavioredZIndex {
444+ enabled: spreadView.closingIndex >= 0
445+ UbuntuNumberAnimation {}
446+ }
447+
448+ // This is required because none of the bindings are triggered in some cases:
449+ // When an app is closed, it might happen that ApplicationManager.get(nextInStack)
450+ // returns a different app even though the nextInStackIndex and all the related
451+ // bindings (index, mainStageApp, sideStageApp, etc) don't change. Let's force a
452+ // binding update in that case.
453+ Connections {
454+ target: ApplicationManager
455+ onApplicationRemoved: spreadTile.z = Qt.binding(function() {
456+ return spreadView.indexToZIndex(index);
457+ })
458+ }
459+
460+ progress: {
461+ var tileProgress = (spreadView.contentX - behavioredZIndex * spreadView.tileDistance) / spreadView.width;
462+ // Some tiles (nextInStack, active) need to move directly from the beginning, normalize progress to immediately start at 0
463+ if ((index == spreadView.nextInStack && spreadView.phase < 2) || (active && spreadView.phase < 1)) {
464+ tileProgress += behavioredZIndex * spreadView.tileDistance / spreadView.width;
465+ }
466+ return tileProgress;
467+ }
468+
469+ animatedProgress: {
470+ if (spreadView.phase == 0 && (spreadTile.active || spreadView.nextInStack == index)) {
471+ if (progress < spreadView.positionMarker1) {
472+ return progress;
473+ } else if (progress < spreadView.positionMarker1 + snappingCurve.period) {
474+ return spreadView.positionMarker1 + snappingCurve.value * 3;
475+ } else {
476+ return spreadView.positionMarker2;
477+ }
478+ }
479+ return progress;
480+ }
481+
482+ onClicked: {
483+ if (spreadView.phase == 2) {
484+ if (ApplicationManager.focusedApplicationId == ApplicationManager.get(index).appId) {
485+ spreadView.snapTo(index);
486+ } else {
487+ ApplicationManager.requestFocusApplication(ApplicationManager.get(index).appId);
488+ }
489+ }
490+ }
491+
492+ onClosed: {
493+ spreadView.draggedIndex = -1;
494+ spreadView.closingIndex = index;
495+ ApplicationManager.stopApplication(ApplicationManager.get(index).appId);
496+ }
497+
498+ EasingCurve {
499+ id: snappingCurve
500+ type: EasingCurve.Linear
501+ period: (spreadView.positionMarker2 - spreadView.positionMarker1) / 3
502+ progress: spreadTile.progress - spreadView.positionMarker1
503+ }
504+ }
505+ }
506+ }
507+ }
508+
509+ EdgeDragArea {
510+ id: spreadDragArea
511+ anchors { top: parent.top; right: parent.right; bottom: parent.bottom }
512+ width: root.dragAreaWidth
513+ direction: Direction.Leftwards
514+
515+ property bool attachedToView: false
516+ property var gesturePoints: new Array()
517+
518+ onTouchXChanged: {
519+ if (!dragging) {
520+ spreadView.phase = 0;
521+ spreadView.contentX = 0;
522+ }
523+
524+ if (attachedToView) {
525+ spreadView.contentX = -touchX + spreadDragArea.width;
526+ if (spreadView.contentX > spreadView.phase0Width + spreadView.phase1Width / 2) {
527+ attachedToView = false;
528+ spreadView.snap();
529+ }
530+ }
531+ gesturePoints.push(touchX);
532+ }
533+
534+ onStatusChanged: {
535+ if (status == DirectionalDragArea.Recognized) {
536+ attachedToView = true;
537+ }
538+ }
539+
540+ onDraggingChanged: {
541+ if (dragging) {
542+ // Gesture recognized. Start recording this gesture
543+ gesturePoints = [];
544+ return;
545+ }
546+
547+ // Ok. The user released. Find out if it was a one-way movement.
548+ var oneWayFlick = priv.evaluateOneWayFlick(gesturePoints);
549+ gesturePoints = [];
550+
551+ if (oneWayFlick && spreadView.contentX < spreadView.positionMarker1 * spreadView.width) {
552+ // If it was a short one-way movement, do the Alt+Tab switch
553+ // no matter if we didn't cross positionMarker1 yet.
554+ spreadView.snapTo(spreadView.nextInStack);
555+ } else if (!dragging && attachedToView) {
556+ if (spreadView.contentX < spreadView.width * spreadView.positionMarker1) {
557+ spreadView.snap();
558+ } else if (spreadView.contentX < spreadView.width * spreadView.positionMarker2) {
559+ spreadView.snapTo(spreadView.nextInStack);
560+ } else {
561+ // otherwise snap to the closest snap position we can find
562+ // (might be back to start, to app 1 or to spread)
563+ spreadView.snap();
564+ }
565+ }
566+ }
567+ }
568+}
qml/Stages/TransformedSpreadDelegate.qml+36−30
@@ -23,7 +23,9 @@ import Ubuntu.Components 0.1
23SpreadDelegate {
23SpreadDelegate {
24 id: root
24 id: root
25
25
26+ // Set this to true when this tile is selected in the spread. The animation will change to bring the tile to front.
26 property bool selected: false
27 property bool selected: false
28+ // Set this to true when another tile in the spread is selected. The animation will change to fade this tile out.
27 property bool otherSelected: false
29 property bool otherSelected: false
28
30
29 // The progress animates the tiles. A value > 0 makes it appear from the right edge. At 1 it reaches the end position.
31 // The progress animates the tiles. A value > 0 makes it appear from the right edge. At 1 it reaches the end position.
@@ -44,6 +46,9 @@ SpreadDelegate {
44 property real startDistance: units.gu(5)
46 property real startDistance: units.gu(5)
45 property real endDistance: units.gu(.5)
47 property real endDistance: units.gu(.5)
46
48
49+ // Hiding tiles when their progress is negative or reached the maximum
50+ visible: progress >= 0 && progress < 1.7
51+
47 onSelectedChanged: {
52 onSelectedChanged: {
48 if (selected) {
53 if (selected) {
49 priv.snapshot();
54 priv.snapshot();
@@ -106,16 +111,6 @@ SpreadDelegate {
106 selectedTopMarginProgress = topMarginProgress;
111 selectedTopMarginProgress = topMarginProgress;
107 }
112 }
108
113
109− // This calculates how much negative progress there can be if unwinding the spread completely
110− // the progress for each tile starts at 0 when it crosses the right edge, so the later a tile comes in,
111− // the bigger its negativeProgress can be.
112− property real negativeProgress: {
113− if (index == 1 && spreadView.phase < 2) {
114− return 0;
115− }
116− return -index * spreadView.tileDistance / spreadView.width;
117− }
118−
119 function linearAnimation(startProgress, endProgress, startValue, endValue, progress) {
114 function linearAnimation(startProgress, endProgress, startValue, endValue, progress) {
120 // progress : progressDiff = value : valueDiff => value = progress * valueDiff / progressDiff
115 // progress : progressDiff = value : valueDiff => value = progress * valueDiff / progressDiff
121 return (progress - startProgress) * (endValue - startValue) / (endProgress - startProgress) + startValue;
116 return (progress - startProgress) * (endValue - startValue) / (endProgress - startProgress) + startValue;
@@ -127,22 +122,20 @@ SpreadDelegate {
127 return helperEasingCurve.value * (endValue - startValue) + startValue;
122 return helperEasingCurve.value * (endValue - startValue) + startValue;
128 }
123 }
129
124
130− property real animatedEndDistance: linearAnimation(0, 2, root.endDistance, 0, root.progress)
131−
132 // The following blocks handle the animation of the tile in the spread.
125 // The following blocks handle the animation of the tile in the spread.
133 // At the beginning, each tile is attached at the right edge, outside the screen.
126 // At the beginning, each tile is attached at the right edge, outside the screen.
134 // The progress for each tile starts at 0 and it reaches its end position at a progress of 1.
127 // The progress for each tile starts at 0 and it reaches its end position at a progress of 1.
135− // The first phases are handled special for the first 2 tiles. as we do the alt-tab and snapping in there
128+ // The first phases are handled special for the first 2 tiles. as we do the alt-tab and snapping
136− // Once we reached phase 3, the animation is the same for all tiles.
129+ // in there. Once we reached phase 3, the animation is the same for all tiles.
137− // When a tile is selected, the animation state is snapshotted, and the spreadView is unwound (progress animates
130+ // When a tile is selected, the animation state is snapshotted, and the spreadView is unwound.
138− // back to negativeProgress). All tiles are kept in place and faded out to 0 opacity except
131+ // All tiles are kept in place and faded out to 0 opacity except
139 // the selected tile, which is animated from the snapshotted position to be fullscreen.
132 // the selected tile, which is animated from the snapshotted position to be fullscreen.
140
133
141− property real xTranslate: {
134+ readonly property real xTranslate: {
142 if (otherSelected) {
135 if (otherSelected) {
143 if (spreadView.phase < 2 && index == 0) {
136 if (spreadView.phase < 2 && index == 0) {
144− return linearAnimation(selectedProgress, negativeProgress,
137+ return linearAnimation(selectedProgress, 0, selectedXTranslate,
145− selectedXTranslate, selectedXTranslate - spreadView.tileDistance, root.progress);
138+ selectedXTranslate - spreadView.tileDistance, root.progress);
146 }
139 }
147
140
148 return selectedXTranslate;
141 return selectedXTranslate;
@@ -160,7 +153,7 @@ SpreadDelegate {
160 // Apply the same animation as with the rest but add spreadView.width to align it with the others.
153 // Apply the same animation as with the rest but add spreadView.width to align it with the others.
161 return -easingCurve.value * spreadView.width + spreadView.width;
154 return -easingCurve.value * spreadView.width + spreadView.width;
162 } else if (priv.isSelected) {
155 } else if (priv.isSelected) {
163− return linearAnimation(selectedProgress, negativeProgress, selectedXTranslate, 0, root.progress);
156+ return linearAnimation(selectedProgress, 0, selectedXTranslate, 0, root.progress);
164 }
157 }
165
158
166 case 1:
159 case 1:
@@ -177,23 +170,28 @@ SpreadDelegate {
177 if (priv.isSelected) {
170 if (priv.isSelected) {
178 // Distance to left edge
171 // Distance to left edge
179 var targetTranslate = -spreadView.width - ((index - 1) * root.startDistance);
172 var targetTranslate = -spreadView.width - ((index - 1) * root.startDistance);
180− return linearAnimation(selectedProgress, negativeProgress,
173+ return linearAnimation(selectedProgress, 0,
181 selectedXTranslate, targetTranslate, root.progress);
174 selectedXTranslate, targetTranslate, root.progress);
182 }
175 }
183
176
184 // Fix it at the right edge...
177 // Fix it at the right edge...
185 var rightEdgeOffset = -((index - 1) * root.startDistance);
178 var rightEdgeOffset = -((index - 1) * root.startDistance);
186 // ...and use our easing to move them to the left. Stop a bit earlier for each tile
179 // ...and use our easing to move them to the left. Stop a bit earlier for each tile
180+ var animatedEndDistance = linearAnimation(0, 2, root.endDistance, 0, root.progress);
187 return -easingCurve.value * spreadView.width + (index * animatedEndDistance) + rightEdgeOffset;
181 return -easingCurve.value * spreadView.width + (index * animatedEndDistance) + rightEdgeOffset;
188
182
189 }
183 }
190
184
191− property real angle: {
185+ readonly property real angle: {
186+ if (spreadView.focusChanging) {
187+ return 0;
188+ }
189+
192 if (priv.otherSelected) {
190 if (priv.otherSelected) {
193 return priv.selectedAngle;
191 return priv.selectedAngle;
194 }
192 }
195 if (priv.isSelected) {
193 if (priv.isSelected) {
196− return linearAnimation(selectedProgress, negativeProgress, selectedAngle, 0, root.progress);
194+ return linearAnimation(selectedProgress, 0, selectedAngle, 0, root.progress);
197 }
195 }
198 switch (index) {
196 switch (index) {
199 case 0:
197 case 0:
@@ -217,12 +215,15 @@ SpreadDelegate {
217 return root.startAngle - easingCurve.value * (root.startAngle - root.endAngle);
215 return root.startAngle - easingCurve.value * (root.startAngle - root.endAngle);
218 }
216 }
219
217
220− property real scale: {
218+ readonly property real scale: {
219+ if (spreadView.focusChanging) {
220+ return 1;
221+ }
221 if (priv.otherSelected) {
222 if (priv.otherSelected) {
222 return priv.selectedScale;
223 return priv.selectedScale;
223 }
224 }
224 if (priv.isSelected) {
225 if (priv.isSelected) {
225− return linearAnimation(selectedProgress, negativeProgress, selectedScale, 1, root.progress);
226+ return linearAnimation(selectedProgress, 0, selectedScale, 1, root.progress);
226 }
227 }
227
228
228 switch (index) {
229 switch (index) {
@@ -247,7 +248,7 @@ SpreadDelegate {
247 return root.startScale - easingCurve.value * (root.startScale - root.endScale);
248 return root.startScale - easingCurve.value * (root.startScale - root.endScale);
248 }
249 }
249
250
250− property real opacity: {
251+ readonly property real opacity: {
251 if (priv.otherSelected) {
252 if (priv.otherSelected) {
252 return linearAnimation (selectedProgress, Math.max(0, selectedProgress - .5),
253 return linearAnimation (selectedProgress, Math.max(0, selectedProgress - .5),
253 selectedOpacity, 0, root.progress);
254 selectedOpacity, 0, root.progress);
@@ -265,9 +266,9 @@ SpreadDelegate {
265 return 1;
266 return 1;
266 }
267 }
267
268
268− property real topMarginProgress: {
269+ readonly property real topMarginProgress: {
269 if (priv.isSelected) {
270 if (priv.isSelected) {
270− return linearAnimation(selectedProgress, negativeProgress, selectedTopMarginProgress, 0, root.progress);
271+ return linearAnimation(selectedProgress, 0, selectedTopMarginProgress, 0, root.progress);
271 }
272 }
272
273
273 switch (index) {
274 switch (index) {
@@ -290,6 +291,7 @@ SpreadDelegate {
290
291
291 return easingCurve.value;
292 return easingCurve.value;
292 }
293 }
294+
293 }
295 }
294
296
295 transform: [
297 transform: [
@@ -303,18 +305,22 @@ SpreadDelegate {
303 xScale: priv.scale
305 xScale: priv.scale
304 yScale: xScale
306 yScale: xScale
305 },
307 },
308+ Scale {
309+ origin { x: 0; y: (spreadView.height * priv.scale) + maximizedAppTopMargin * 3 }
310+ xScale: 1
311+ yScale: isFullscreen ? 1 - priv.topMarginProgress * maximizedAppTopMargin / spreadView.height : 1
312+ },
306 Translate {
313 Translate {
307 x: priv.xTranslate
314 x: priv.xTranslate
308 }
315 }
309 ]
316 ]
310 opacity: priv.opacity
317 opacity: priv.opacity
311− topMarginProgress: priv.topMarginProgress
312
318
313 EasingCurve {
319 EasingCurve {
314 id: easingCurve
320 id: easingCurve
315 type: EasingCurve.OutSine
321 type: EasingCurve.OutSine
316 period: 1 - spreadView.positionMarker2
322 period: 1 - spreadView.positionMarker2
317− progress: root.animatedProgress
323+ progress: root.progress
318 }
324 }
319
325
320 // This is used as a calculation helper to figure values for progress other than the current one
326 // This is used as a calculation helper to figure values for progress other than the current one
qml/Stages/TransformedTabletSpreadDelegate.qmlnew file+369
@@ -0,0 +1,369 @@
1+/*
2+ * Copyright 2014 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU Lesser General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ * Authors: Michael Zanetti <michael.zanetti@canonical.com>
17+*/
18+
19+import QtQuick 2.0
20+import Utils 0.1
21+import Ubuntu.Components 0.1
22+import Unity.Application 0.1
23+
24+SpreadDelegate {
25+ id: root
26+
27+ // Set this to true when this tile is selected in the spread. The animation will change to bring the tile to front.
28+ property bool selected: false
29+ // Set this to true when another tile in the spread is selected. The animation will change to fade this tile out.
30+ property bool otherSelected: false
31+ // Set this to true when this tile a currently active on either the MS or the SS.
32+ property bool active: false
33+
34+ property int zIndex
35+ property real progress: 0
36+ property real animatedProgress: 0
37+
38+ property real startDistance: units.gu(5)
39+ property real endDistance: units.gu(.5)
40+
41+ property real startScale: 1.1
42+ property real endScale: 0.7
43+ property real dragStartScale: startScale + .2
44+
45+ property real startAngle: 15
46+ property real endAngle: 5
47+
48+ property bool isInSideStage: false
49+
50+ onSelectedChanged: {
51+ if (selected) {
52+ priv.snapshot();
53+ }
54+ priv.isSelected = selected;
55+ }
56+
57+ onOtherSelectedChanged: {
58+ if (otherSelected) {
59+ priv.snapshot();
60+ }
61+ priv.otherSelected = otherSelected;
62+ }
63+
64+ Connections {
65+ target: spreadView
66+
67+ onPhaseChanged: {
68+ if (spreadView.phase == 1) {
69+ var phase2Progress = spreadView.positionMarker4 - (root.zIndex * spreadView.tileDistance / spreadView.width);
70+ priv.phase2StartTranslate = priv.easingAnimation(0, 1, 0, -spreadView.width + (root.zIndex * root.endDistance), phase2Progress);
71+ priv.phase2StartScale = priv.easingAnimation(0, 1, root.startScale, root.endScale, phase2Progress);
72+ priv.phase2StartAngle = priv.easingAnimation(0, 1, root.startAngle, root.endAngle, phase2Progress);
73+ priv.phase2StartTopMarginProgress = priv.easingAnimation(0, 1, 0, 1, phase2Progress);
74+ }
75+ }
76+ }
77+
78+ // Required to be an item because we're using states on it.
79+ Item {
80+ id: priv
81+
82+ // true if this is the next tile on the stack that comes in when dragging from the right
83+ property bool nextInStack: spreadView.nextZInStack == zIndex
84+ // true if the next tile in the stack is the nextInStack one. This one will be moved a bit to the left
85+ property bool movedActive: spreadView.nextZInStack == zIndex + 1
86+ property real animatedEndDistance: linearAnimation(0, 2, root.endDistance, 0, root.progress)
87+
88+ property real phase2StartTranslate
89+ property real phase2StartScale
90+ property real phase2StartAngle
91+ property real phase2StartTopMarginProgress
92+
93+ property bool isSelected: false
94+ property bool otherSelected: false
95+ property real selectedProgress
96+ property real selectedXTranslate
97+ property real selectedAngle
98+ property real selectedScale
99+ property real selectedOpacity
100+ property real selectedTopMarginProgress
101+
102+ function snapshot() {
103+ selectedProgress = root.progress;
104+ selectedXTranslate = xTranslate;
105+ selectedAngle = angle;
106+ selectedScale = priv.scale;
107+ selectedOpacity = priv.opacityTransform;
108+ selectedTopMarginProgress = topMarginProgress;
109+ }
110+
111+ // This calculates how much negative progress there can be if unwinding the spread completely
112+ // the progress for each tile starts at 0 when it crosses the right edge, so the later a tile comes in,
113+ // the bigger its negativeProgress can be.
114+ property real negativeProgress: {
115+ if (nextInStack && spreadView.phase < 2) {
116+ return 0;
117+ }
118+ return -root.zIndex * spreadView.tileDistance / spreadView.width;
119+ }
120+
121+ function linearAnimation(startProgress, endProgress, startValue, endValue, progress) {
122+ // progress : progressDiff = value : valueDiff => value = progress * valueDiff / progressDiff
123+ return (progress - startProgress) * (endValue - startValue) / (endProgress - startProgress) + startValue;
124+ }
125+
126+ function easingAnimation(startProgress, endProgress, startValue, endValue, progress) {
127+ helperEasingCurve.progress = progress - startProgress;
128+ helperEasingCurve.period = endProgress - startProgress;
129+ return helperEasingCurve.value * (endValue - startValue) + startValue;
130+ }
131+
132+ property real xTranslate: {
133+ var newTranslate = 0;
134+
135+ if (otherSelected) {
136+ return priv.selectedXTranslate;
137+ }
138+
139+ if (isSelected) {
140+ if (model.stage == ApplicationInfoInterface.MainStage) {
141+ return linearAnimation(selectedProgress, negativeProgress, selectedXTranslate, -spreadView.width, root.progress);
142+ } else {
143+ return linearAnimation(selectedProgress, negativeProgress, selectedXTranslate, -spreadView.sideStageWidth, root.progress);
144+ }
145+ }
146+
147+ // The tile should move a bit to the left if a new one comes on top of it, but not for the Side Stage and not
148+ // when we're only dragging the side stage in on top of a main stage app
149+ var shouldMoveAway = spreadView.nextInStack >= 0 && priv.movedActive && model.stage === ApplicationInfoInterface.MainStage &&
150+ ApplicationManager.get(spreadView.nextInStack).stage === ApplicationInfoInterface.MainStage;
151+
152+ if (active) {
153+ newTranslate -= root.width
154+ // Only do the hide animation for active apps in the mainstage, and not if we only drag the ss in
155+ if (spreadView.phase == 0 && shouldMoveAway) {
156+ newTranslate += linearAnimation(0, spreadView.positionMarker2, 0, -units.gu(4), root.animatedProgress);
157+ }
158+ }
159+ if (nextInStack && spreadView.phase == 0) {
160+ if (model.stage == ApplicationInfoInterface.MainStage) {
161+ if (spreadView.sideStageVisible && root.progress > 0) {
162+ // Move it so it appears from behind the side stage immediately
163+ newTranslate += -spreadView.sideStageWidth;
164+ }
165+ }
166+
167+ if (model.stage == ApplicationInfoInterface.SideStage && !spreadView.sideStageVisible) {
168+ // This is when we only drag the side stage in, without rotation or snapping
169+ newTranslate = linearAnimation(0, spreadView.positionMarker2, 0, -spreadView.sideStageWidth, root.progress);
170+ } else {
171+ newTranslate += linearAnimation(0, spreadView.positionMarker2, 0, -spreadView.sideStageWidth * spreadView.snapPosition, root.animatedProgress);
172+ }
173+ }
174+
175+ if (spreadView.phase == 1) {
176+ if (nextInStack) {
177+ if (model.stage == ApplicationInfoInterface.MainStage) {
178+ var startValue = -spreadView.sideStageWidth * spreadView.snapPosition + (spreadView.sideStageVisible ? -spreadView.sideStageWidth : 0);
179+ newTranslate += linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, startValue, priv.phase2StartTranslate, root.animatedProgress);
180+ } else {
181+ var endValue = -spreadView.width + spreadView.width * root.zIndex / 6;
182+ if (!spreadView.sideStageVisible) {
183+ newTranslate += linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, -spreadView.sideStageWidth, priv.phase2StartTranslate, root.progress);
184+ } else {
185+ newTranslate += linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, -spreadView.sideStageWidth * spreadView.snapPosition, priv.phase2StartTranslate, root.animatedProgress);
186+ }
187+ }
188+ } else if (root.active) {
189+ var startProgress = spreadView.positionMarker2 - (zIndex * spreadView.positionMarker2 / 2);
190+ var endProgress = spreadView.positionMarker4 - (zIndex * spreadView.tileDistance / spreadView.width);
191+ var startTranslate = -root.width + (shouldMoveAway ? -units.gu(4) : 0);
192+ newTranslate = linearAnimation(startProgress, endProgress, startTranslate, priv.phase2StartTranslate, root.progress);
193+ } else {
194+ var startProgress = spreadView.positionMarker2 - (zIndex * spreadView.positionMarker2 / 2);
195+ var endProgress = spreadView.positionMarker4 - (zIndex * spreadView.tileDistance / spreadView.width);
196+ newTranslate = linearAnimation(startProgress, endProgress, 0, priv.phase2StartTranslate, root.progress);
197+ }
198+ }
199+
200+ if (spreadView.phase == 2) {
201+ newTranslate = -easingCurve.value * (spreadView.width - root.zIndex * animatedEndDistance);
202+ }
203+
204+ return newTranslate;
205+ }
206+
207+ property real scale: {
208+ if (otherSelected) {
209+ return selectedScale;
210+ }
211+
212+ if (isSelected) {
213+ return linearAnimation(selectedProgress, negativeProgress, selectedScale, 1, root.progress);
214+ }
215+
216+ if (spreadView.phase == 0) {
217+ if (nextInStack) {
218+ if (model.stage == ApplicationInfoInterface.SideStage && !spreadView.sideStageVisible) {
219+ return 1;
220+ } else {
221+ var targetScale = root.dragStartScale - ((root.dragStartScale - 1) * spreadView.snapPosition);
222+ return linearAnimation(0, spreadView.positionMarker2, root.dragStartScale, targetScale, root.animatedProgress);
223+ }
224+ } else if (active) {
225+ return 1;
226+ } else {
227+ return linearAnimation(0, spreadView.positionMarker2, root.startScale, root.endScale, root.progress);
228+ }
229+ }
230+
231+ if (spreadView.phase == 1) {
232+ if (nextInStack) {
233+ var startScale = 1;
234+ if (model.stage !== ApplicationInfoInterface.SideStage || spreadView.sideStageVisible) {
235+ startScale = root.dragStartScale - ((root.dragStartScale - 1) * spreadView.snapPosition);
236+ }
237+ return linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, startScale, priv.phase2StartScale, root.animatedProgress);
238+ }
239+ var startProgress = spreadView.positionMarker2 - (zIndex * spreadView.positionMarker2 / 2);
240+ var endProgress = spreadView.positionMarker4 - (zIndex * spreadView.tileDistance / spreadView.width);
241+ return linearAnimation(startProgress, endProgress, 1, priv.phase2StartScale, root.animatedProgress);
242+ }
243+
244+ if (spreadView.phase == 2) {
245+ return root.startScale - easingCurve.value * (root.startScale - root.endScale);
246+ }
247+
248+ return 1;
249+ }
250+
251+ property real angle: {
252+ if (otherSelected) {
253+ return selectedAngle;
254+ }
255+ if (isSelected) {
256+ return linearAnimation(selectedProgress, negativeProgress, selectedAngle, 0, root.progress);
257+ }
258+
259+ // The tile should rotate a bit when another one comes on top, but not when only dragging the side stage in
260+ var shouldMoveAway = spreadView.nextInStack >= 0 && movedActive &&
261+ (ApplicationManager.get(spreadView.nextInStack).stage === ApplicationInfoInterface.MainStage ||
262+ model.stage == ApplicationInfoInterface.SideStage);
263+
264+ if (spreadView.phase == 0) {
265+ if (nextInStack) {
266+ if (model.stage == ApplicationInfoInterface.SideStage && !spreadView.sideStageVisible) {
267+ return 0;
268+ } else {
269+ return linearAnimation(0, spreadView.positionMarker2, root.startAngle, root.startAngle * (1-spreadView.snapPosition), root.animatedProgress);
270+ }
271+ }
272+ if (shouldMoveAway) {
273+ return linearAnimation(0, spreadView.positionMarker2, 0, root.startAngle * (1-spreadView.snapPosition), root.animatedProgress);
274+ }
275+ }
276+ if (spreadView.phase == 1) {
277+ if (nextInStack) {
278+ if (model.stage == ApplicationInfoInterface.SideStage && !spreadView.sideStageVisible) {
279+ return linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, 0, priv.phase2StartAngle, root.animatedProgress);
280+ } else {
281+ return linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, root.startAngle * (1-spreadView.snapPosition), priv.phase2StartAngle, root.animatedProgress);
282+ }
283+ }
284+ var startProgress = spreadView.positionMarker2 - (zIndex * spreadView.positionMarker2 / 2);
285+ var endProgress = spreadView.positionMarker4 - (zIndex * spreadView.tileDistance / spreadView.width);
286+ var startAngle = shouldMoveAway ? root.startAngle * (1-spreadView.snapPosition) : 0;
287+ return linearAnimation(startProgress, endProgress, startAngle, priv.phase2StartAngle, root.progress);
288+ }
289+ if (spreadView.phase == 2) {
290+ return root.startAngle - easingCurve.value * (root.startAngle - root.endAngle);
291+ }
292+
293+ return 0;
294+ }
295+
296+ property real opacityTransform: {
297+ if (otherSelected && spreadView.phase == 2) {
298+ return linearAnimation(selectedProgress, negativeProgress, selectedOpacity, 0, root.progress);
299+ }
300+
301+ return 1;
302+ }
303+
304+ property real topMarginProgress: {
305+ if (priv.isSelected) {
306+ return linearAnimation(selectedProgress, negativeProgress, selectedTopMarginProgress, 0, root.progress);
307+ }
308+ switch (spreadView.phase) {
309+ case 0:
310+ return 0;
311+ case 1:
312+ return linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4,
313+ 0, priv.phase2StartTopMarginProgress, root.progress);
314+ }
315+ return 1;
316+ }
317+
318+ states: [
319+ State {
320+ name: "sideStageDragging"; when: spreadView.sideStageDragging && root.isInSideStage
321+ PropertyChanges { target: priv; xTranslate: -spreadView.sideStageWidth + spreadView.sideStageWidth * spreadView.sideStageDragProgress }
322+ }
323+ ]
324+ }
325+
326+ transform: [
327+ Rotation {
328+ origin { x: 0; y: spreadView.height / 2 }
329+ axis { x: 0; y: 1; z: 0 }
330+ angle: priv.angle
331+ },
332+ Scale {
333+ origin { x: 0; y: spreadView.height / 2 }
334+ xScale: priv.scale
335+ yScale: xScale
336+ },
337+ Scale {
338+ origin { x: 0; y: (spreadView.height * priv.scale) + maximizedAppTopMargin * 3 }
339+ xScale: 1
340+ yScale: isFullscreen ? 1 - priv.topMarginProgress * maximizedAppTopMargin / spreadView.height : 1
341+ },
342+ Translate {
343+ x: priv.xTranslate
344+ }
345+ ]
346+ opacity: priv.opacityTransform
347+
348+ UbuntuNumberAnimation {
349+ id: fadeBackInAnimation
350+ target: root
351+ property: "opacity"
352+ duration: UbuntuAnimation.SlowDuration
353+ from: 0
354+ to: 1
355+ }
356+
357+ EasingCurve {
358+ id: easingCurve
359+ type: EasingCurve.OutSine
360+ period: 1
361+ progress: root.progress
362+ }
363+
364+ EasingCurve {
365+ id: helperEasingCurve
366+ type: easingCurve.type
367+ period: easingCurve.period
368+ }
369+}
src/CMakeLists.txt−3
@@ -1,8 +1,5 @@
1−pkg_check_modules(UNITY-MIR REQUIRED unity-mir)
2−
3include_directories(
1include_directories(
4 ${Qt5Gui_PRIVATE_INCLUDE_DIRS}
2 ${Qt5Gui_PRIVATE_INCLUDE_DIRS}
5− ${UNITY-MIR_INCLUDE_DIRS}
6)
3)
7
4
8file(GLOB_RECURSE QML_FILES
5file(GLOB_RECURSE QML_FILES
src/main.cpp+14−89
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2012 Canonical, Ltd.
2+ * Copyright (C) 2012-2014 Canonical, Ltd.
3 *
3 *
4 * Authors:
4 * Authors:
5 * Gerry Boland <gerry.boland@canonical.com>
5 * Gerry Boland <gerry.boland@canonical.com>
@@ -23,12 +23,9 @@
23#include <QtGui/QGuiApplication>
23#include <QtGui/QGuiApplication>
24#include <QtQml/QQmlEngine>
24#include <QtQml/QQmlEngine>
25#include <QtQml/QQmlContext>
25#include <QtQml/QQmlContext>
26−#include <qpa/qplatformnativeinterface.h>
27#include <QLibrary>
26#include <QLibrary>
28#include <QDebug>
27#include <QDebug>
29#include <libintl.h>
28#include <libintl.h>
30−#include <dlfcn.h>
31−#include <csignal>
32
29
33// local
30// local
34#include <paths.h>
31#include <paths.h>
@@ -36,11 +33,13 @@
36#include "ApplicationArguments.h"
33#include "ApplicationArguments.h"
37#include "CachingNetworkManagerFactory.h"
34#include "CachingNetworkManagerFactory.h"
38
35
39−#include <unity-mir/qmirserver.h>
40−
41−int startShell(int argc, const char** argv, void* server)
36+int main(int argc, const char *argv[])
42{
37{
38+ bool isMirServer = false;
43− const bool isUbuntuMirServer = qgetenv("QT_QPA_PLATFORM") == "ubuntumirserver";
39+ if (qgetenv("QT_QPA_PLATFORM") == "ubuntumirclient") {
40+ setenv("QT_QPA_PLATFORM", "mirserver", 1 /* overwrite */);
41+ isMirServer = true;
42+ }
44
43
45 QGuiApplication::setApplicationName("unity8");
44 QGuiApplication::setApplicationName("unity8");
46 QGuiApplication *application;
45 QGuiApplication *application;
@@ -70,21 +69,7 @@ int startShell(int argc, const char** argv, void* server)
70Load the testability driver");
69Load the testability driver");
71 parser.addOption(testabilityOption);
70 parser.addOption(testabilityOption);
72
71
73− if (isUbuntuMirServer) {
74− QLibrary unityMir("unity-mir", 1);
75− unityMir.load();
76−
77− typedef QGuiApplication* (*createServerApplication_t)(int&, const char **, void*);
78− createServerApplication_t createQMirServerApplication = (createServerApplication_t) unityMir.resolve("createQMirServerApplication");
79− if (!createQMirServerApplication) {
80− qDebug() << "unable to resolve symbol: createQMirServerApplication";
81− return 4;
82− }
83−
84− application = createQMirServerApplication(argc, argv, server);
85− } else {
86− application = new QGuiApplication(argc, (char**)argv);
72+ application = new QGuiApplication(argc, (char**)argv);
87− }
88
73
89 // Treat args with single dashes the same as arguments with two dashes
74 // Treat args with single dashes the same as arguments with two dashes
90 // Ex: -fullscreen == --fullscreen
75 // Ex: -fullscreen == --fullscreen
@@ -100,8 +85,8 @@ Load the testability driver");
100 if (parser.isSet(windowGeometryOption) &&
85 if (parser.isSet(windowGeometryOption) &&
101 parser.value(windowGeometryOption).split('x').size() == 2)
86 parser.value(windowGeometryOption).split('x').size() == 2)
102 {
87 {
103− QStringList geom = parser.value(windowGeometryOption).split('x');
88+ QStringList geom = parser.value(windowGeometryOption).split('x');
104− qmlArgs.setSize(geom.at(0).toInt(), geom.at(1).toInt());
89+ qmlArgs.setSize(geom.at(0).toInt(), geom.at(1).toInt());
105 }
90 }
106
91
107 // The testability driver is only loaded by QApplication but not by QGuiApplication.
92 // The testability driver is only loaded by QApplication but not by QGuiApplication.
@@ -125,7 +110,8 @@ Load the testability driver");
125
110
126 QQuickView* view = new QQuickView();
111 QQuickView* view = new QQuickView();
127 view->setResizeMode(QQuickView::SizeRootObjectToView);
112 view->setResizeMode(QQuickView::SizeRootObjectToView);
113+ view->setColor("black");
128− view->setTitle("Qml Phone Shell");
114+ view->setTitle("Unity8 Shell");
129 view->engine()->setBaseUrl(QUrl::fromLocalFile(::qmlDirectory()));
115 view->engine()->setBaseUrl(QUrl::fromLocalFile(::qmlDirectory()));
130 view->rootContext()->setContextProperty("applicationArguments", &qmlArgs);
116 view->rootContext()->setContextProperty("applicationArguments", &qmlArgs);
131 view->rootContext()->setContextProperty("indicatorProfile", indicatorProfile);
117 view->rootContext()->setContextProperty("indicatorProfile", indicatorProfile);
@@ -141,18 +127,9 @@ Load the testability driver");
141 application->installNativeEventFilter(mouseTouchAdaptor);
127 application->installNativeEventFilter(mouseTouchAdaptor);
142 }
128 }
143
129
144− QPlatformNativeInterface* nativeInterface = QGuiApplication::platformNativeInterface();
145− /* Shell is declared as a system session so that it always receives all
146− input events.
147− FIXME: use the enum value corresponding to SYSTEM_SESSION_TYPE (= 1)
148− when it becomes available.
149− */
150− nativeInterface->setProperty("ubuntuSessionType", 1);
151− view->setProperty("role", 2); // INDICATOR_ACTOR_ROLE
152−
153 QUrl source(::qmlDirectory()+"Shell.qml");
130 QUrl source(::qmlDirectory()+"Shell.qml");
154 prependImportPaths(view->engine(), ::overrideImportPaths());
131 prependImportPaths(view->engine(), ::overrideImportPaths());
155− if (!isUbuntuMirServer) {
132+ if (!isMirServer) {
156 prependImportPaths(view->engine(), ::nonMirImportPaths());
133 prependImportPaths(view->engine(), ::nonMirImportPaths());
157 }
134 }
158 appendImportPaths(view->engine(), ::fallbackImportPaths());
135 appendImportPaths(view->engine(), ::fallbackImportPaths());
@@ -161,10 +138,9 @@ Load the testability driver");
161 view->engine()->setNetworkAccessManagerFactory(managerFactory);
138 view->engine()->setNetworkAccessManagerFactory(managerFactory);
162
139
163 view->setSource(source);
140 view->setSource(source);
164− view->setColor("transparent");
165 QObject::connect(view->engine(), SIGNAL(quit()), application, SLOT(quit()));
141 QObject::connect(view->engine(), SIGNAL(quit()), application, SLOT(quit()));
166
142
167− if (qgetenv("QT_QPA_PLATFORM") == "ubuntu" || isUbuntuMirServer || parser.isSet(fullscreenOption)) {
143+ if (isMirServer || parser.isSet(fullscreenOption)) {
168 view->showFullScreen();
144 view->showFullScreen();
169 } else {
145 } else {
170 view->show();
146 view->show();
@@ -178,54 +154,3 @@ Load the testability driver");
178
154
179 return result;
155 return result;
180}
156}
181−
182−int main(int argc, const char *argv[])
183−{
184− /* Workaround Qt platform integration plugin not advertising itself
185− as having the following capabilities:
186− - QPlatformIntegration::ThreadedOpenGL
187− - QPlatformIntegration::BufferQueueingOpenGL
188− */
189− setenv("QML_FORCE_THREADED_RENDERER", "1", 1);
190− setenv("QML_FIXED_ANIMATION_STEP", "1", 1);
191−
192− // For ubuntumirserver/ubuntumirclient
193− if (qgetenv("QT_QPA_PLATFORM").startsWith("ubuntumir")) {
194− setenv("QT_QPA_PLATFORM", "ubuntumirserver", 1);
195−
196− // If we use unity-mir directly, we automatically link to the Mir-server
197− // platform-api bindings, which result in unexpected behaviour when
198− // running the non-Mir scenario.
199− QLibrary unityMir("unity-mir", 1);
200− unityMir.load();
201− if (!unityMir.isLoaded()) {
202− qDebug() << "Library unity-mir not found/loaded";
203− return 1;
204− }
205−
206− typedef QMirServer* (*createServer_t)(int, const char **);
207− createServer_t createQMirServer = (createServer_t) unityMir.resolve("createQMirServer");
208− if (!createQMirServer) {
209− qDebug() << "unable to resolve symbol: createQMirServer";
210− return 2;
211− }
212−
213− QMirServer* mirServer = createQMirServer(argc, argv);
214−
215− typedef int (*runWithClient_t)(QMirServer*, std::function<int(int, const char**, void*)>);
216− runWithClient_t runWithClient = (runWithClient_t) unityMir.resolve("runQMirServerWithClient");
217− if (!runWithClient) {
218− qDebug() << "unable to resolve symbol: runWithClient";
219− return 3;
220− }
221−
222− return runWithClient(mirServer, startShell);
223− } else {
224− if (qgetenv("UPSTART_JOB") == "unity8") {
225− // Emit SIGSTOP as expected by upstart, under Mir it's unity-mir that will raise it.
226− // see http://upstart.ubuntu.com/cookbook/#expect-stop
227− raise(SIGSTOP);
228− }
229− return startShell(argc, argv, nullptr);
230− }
231−}
tests/autopilot/unity8/shell/emulators/dash.py+12−6
@@ -18,6 +18,7 @@
18#
18#
19
19
20import logging
20import logging
21+import ubuntuuitoolkit
21
22
22from unity8.shell import emulators
23from unity8.shell import emulators
23
24
@@ -40,7 +41,7 @@ class Dash(emulators.UnityEmulatorBase):
40
41
41 def get_applications_grid(self):
42 def get_applications_grid(self):
42 get_grid = self.get_scope('clickscope').wait_select_single(
43 get_grid = self.get_scope('clickscope').wait_select_single(
43− 'CardFilterGrid', objectName='local')
44+ 'CardGrid', objectName='local')
44 return get_grid
45 return get_grid
45
46
46 def get_application_icon(self, text):
47 def get_application_icon(self, text):
@@ -128,9 +129,9 @@ class Dash(emulators.UnityEmulatorBase):
128 def enter_search_query(self, query):
129 def enter_search_query(self, query):
129 current_header = self._get_current_page_header()
130 current_header = self._get_current_page_header()
130 self.pointing_device.move(current_header.globalRect.x +
131 self.pointing_device.move(current_header.globalRect.x +
131− current_header.width - current_header.height / 2,
132+ current_header.width - current_header.height / 4,
132 current_header.globalRect.y +
133 current_header.globalRect.y +
133− current_header.height / 2)
134+ current_header.height / 4)
134 self.pointing_device.click()
135 self.pointing_device.click()
135 headerContainer = current_header.select_single(objectName="headerContainer")
136 headerContainer = current_header.select_single(objectName="headerContainer")
136 headerContainer.contentY.wait_for(0)
137 headerContainer.contentY.wait_for(0)
@@ -151,6 +152,10 @@ class Dash(emulators.UnityEmulatorBase):
151 return None
152 return None
152
153
153
154
155+class ListViewWithPageHeader(ubuntuuitoolkit.QQuickFlickable):
156+ pass
157+
158+
154class GenericScopeView(emulators.UnityEmulatorBase):
159class GenericScopeView(emulators.UnityEmulatorBase):
155 """Autopilot emulator for generic scopes."""
160 """Autopilot emulator for generic scopes."""
156
161
@@ -194,16 +199,17 @@ class DashApps(GenericScopeView):
194
199
195 """
200 """
196 category_element = self._get_category_element(category)
201 category_element = self._get_category_element(category)
202+ see_all = category_element.select_single(objectName='seeAll')
197 application_cards = category_element.select_many('AbstractButton')
203 application_cards = category_element.select_many('AbstractButton')
198
204
199− # sort by y, x
200 application_cards = sorted(
205 application_cards = sorted(
201− application_cards,
206+ (card for card in application_cards
207+ if card.globalRect.y < see_all.globalRect.y),
202 key=lambda card: (card.globalRect.y, card.globalRect.x))
208 key=lambda card: (card.globalRect.y, card.globalRect.x))
203
209
204 result = []
210 result = []
205 for card in application_cards:
211 for card in application_cards:
206− if card.objectName != 'cardToolCard':
212+ if card.objectName not in ('cardToolCard', 'seeAll'):
207 result.append(card.title)
213 result.append(card.title)
208 return result
214 return result
209
215
tests/autopilot/unity8/shell/tests/test_emulators.py+15−5
@@ -16,6 +16,7 @@
16# You should have received a copy of the GNU General Public License
16# You should have received a copy of the GNU General Public License
17# along with this program. If not, see <http://www.gnu.org/licenses/>.
17# along with this program. If not, see <http://www.gnu.org/licenses/>.
18#
18#
19+from unity8.shell.emulators.dash import ListViewWithPageHeader
19
20
20"""Tests for the Dash autopilot emulators.
21"""Tests for the Dash autopilot emulators.
21
22
@@ -182,18 +183,27 @@ class DashAppsEmulatorTestCase(DashBaseTestCase):
182
183
183 def test_get_applications_should_return_correct_applications(self):
184 def test_get_applications_should_return_correct_applications(self):
184 category = '2'
185 category = '2'
186+ category_element = self.applications_scope._get_category_element(
187+ category)
188+ list_view = self.dash.get_scope('clickscope')\
189+ .select_single(ListViewWithPageHeader)
185 expected_apps_count = self._get_number_of_application_slots(category)
190 expected_apps_count = self._get_number_of_application_slots(category)
186 expected_applications = self.available_applications[
191 expected_applications = self.available_applications[
187 :expected_apps_count]
192 :expected_apps_count]
193+ x_center = list_view.globalRect.x + list_view.width / 2
194+ y_center = list_view.globalRect.y + list_view.height / 2
195+ y_diff = category_element.y - list_view.height + category_element.height
196+ list_view._slow_drag(x_center, x_center,
197+ y_center, y_center - y_diff)
188 applications = self.applications_scope.get_applications(category)
198 applications = self.applications_scope.get_applications(category)
189 self.assertEqual(expected_applications, applications)
199 self.assertEqual(expected_applications, applications)
190
200
191 def _get_number_of_application_slots(self, category):
201 def _get_number_of_application_slots(self, category):
192 category_element = self.applications_scope._get_category_element(
202 category_element = self.applications_scope._get_category_element(
193 category)
203 category)
194− grid = category_element.select_single('CardFilterGrid')
204+ cardgrid = category_element.select_single('CardGrid')
195− filtergrid = grid.select_single('FilterGrid')
205+ if (category_element.expanded):
196− if (grid.filtered):
206+ return cardgrid.select_single('QQuickGridView').count
197− return filtergrid.collapsedRowCount * filtergrid.columns
198 else:
207 else:
199− return filtergrid.uncollapsedRowCount * filtergrid.columns
208+ return cardgrid.collapsedRows \
209+ * cardgrid.select_single('ResponsiveGridView').columns
tests/autopilot/unity8/shell/tests/test_upstart.py+13
@@ -20,6 +20,7 @@
20"""Tests for upstart integration."""
20"""Tests for upstart integration."""
21
21
22import os
22import os
23+import stat
23import signal
24import signal
24import subprocess
25import subprocess
25import time
26import time
@@ -57,6 +58,18 @@ class UpstartIntegrationTests(UnityTestCase):
57
58
58 def _launch_unity(self):
59 def _launch_unity(self):
59 self.patch_environment("QT_LOAD_TESTABILITY", "1")
60 self.patch_environment("QT_LOAD_TESTABILITY", "1")
61+
62+ try:
63+ host_socket = os.getenv("MIR_SOCKET", "/run/mir_socket")
64+ if stat.S_ISSOCK(os.stat(host_socket).st_mode):
65+ self.patch_environment("MIR_SERVER_HOST_SOCKET",
66+ host_socket)
67+ socket = os.path.join(os.getenv("XDG_RUNTIME_DIR", "/tmp"),
68+ "mir_socket")
69+ self.patch_environment("MIR_SERVER_FILE", socket)
70+ except OSError:
71+ pass
72+
60 self.process = subprocess.Popen(
73 self.process = subprocess.Popen(
61 [get_binary_path()] + self.unity_geometry_args)
74 [get_binary_path()] + self.unity_geometry_args)
62
75
tests/mocks/Ubuntu/Telephony/CMakeLists.txt+1−9
@@ -11,12 +11,4 @@ add_library(FakeUbuntuTelephonyQml MODULE ${FakeUbuntuTelephonyQml_SOURCES})
11
11
12qt5_use_modules(FakeUbuntuTelephonyQml Core Quick)
12qt5_use_modules(FakeUbuntuTelephonyQml Core Quick)
13
13
14−# copy files into build directory for shadow builds
15−add_custom_target(UbuntuTelephonyQmlDirFile ALL
16− COMMAND cp "${CMAKE_CURRENT_SOURCE_DIR}/qmldir" ${CMAKE_CURRENT_BINARY_DIR}
17− DEPENDS qmldir
18−)
19−
20−install(TARGETS FakeUbuntuTelephonyQml
14+add_unity8_mock(Ubuntu.Telephony 0.1 Ubuntu/Telephony TARGETS FakeUbuntuTelephonyQml)
21− DESTINATION ${SHELL_INSTALL_QML}/mocks/Ubuntu/Telephony
22− )
tests/mocks/Unity/Application/Application.qmltypes−2
@@ -102,8 +102,6 @@ Module {
102 "ForceMainStage": 1
102 "ForceMainStage": 1
103 }
103 }
104 }
104 }
105− Property { name: "keyboardHeight"; type: "int"; isReadonly: true }
106− Property { name: "keyboardVisible"; type: "bool"; isReadonly: true }
107 Property { name: "sideStageWidth"; type: "int"; isReadonly: true }
105 Property { name: "sideStageWidth"; type: "int"; isReadonly: true }
108 Property { name: "stageHint"; type: "StageHint"; isReadonly: true }
106 Property { name: "stageHint"; type: "StageHint"; isReadonly: true }
109 Property { name: "formFactorHint"; type: "FormFactorHint"; isReadonly: true }
107 Property { name: "formFactorHint"; type: "FormFactorHint"; isReadonly: true }
tests/mocks/Unity/Application/ApplicationDBusAdaptor.cppnew file+75
@@ -0,0 +1,75 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "ApplicationInfo.h"
18+#include "ApplicationDBusAdaptor.h"
19+#include "ApplicationManager.h"
20+#include "SurfaceManager.h"
21+#include "MirSurfaceItem.h"
22+
23+quint32 nextId = 0;
24+
25+ApplicationDBusAdaptor::ApplicationDBusAdaptor(ApplicationManager* applicationManager)
26+ : QDBusAbstractAdaptor(applicationManager)
27+ , m_applicationManager(applicationManager)
28+{
29+}
30+
31+MirSurfaceItem* topSurface(MirSurfaceItem* surface)
32+{
33+ if (!surface)
34+ return nullptr;
35+
36+ MirSurfaceItem* child = NULL;
37+ Q_FOREACH (MirSurfaceItem *childSurface, surface->childSurfaceList()) {
38+ child = topSurface(childSurface);
39+ if (child) {
40+ break;
41+ }
42+ }
43+ return child ? child : surface;
44+}
45+
46+quint32 ApplicationDBusAdaptor::addChildSurface(const QString &appId, const QString &surfaceImage)
47+{
48+ qDebug() << "ApplicationDBusAdaptor::addChildSurface - " << appId;
49+
50+ ApplicationInfo* application = m_applicationManager->findApplication(appId);
51+ if (!application) {
52+ qDebug() << "ApplicationDBusAdaptor::addChildSurface - No application found for " << appId;
53+ return 0;
54+ }
55+ quint32 surfaceId = ++nextId;
56+ MirSurfaceItem* surface = new MirSurfaceItem(QString("ChildSurface%1").arg(surfaceId),
57+ MirSurfaceItem::Normal,
58+ MirSurfaceItem::Maximized,
59+ QUrl(surfaceImage));
60+ m_childItems[surfaceId] = surface;
61+ surface->setParentSurface(topSurface(application->surface()));
62+ return surfaceId;
63+}
64+
65+void ApplicationDBusAdaptor::removeChildSurface(int surfaceId)
66+{
67+ qDebug() << "ApplicationDBusAdaptor::removeChildSurface - " << surfaceId;
68+
69+ if (!m_childItems.contains(surfaceId)) {
70+ qDebug() << "ApplicationDBusAdaptor::removeChildSurface - No added surface for " << surfaceId;
71+ return;
72+ }
73+ MirSurfaceItem* surface = m_childItems.take(surfaceId);
74+ Q_EMIT surface->removed();
75+}
tests/mocks/Unity/Application/ApplicationDBusAdaptor.hnew file+43
@@ -0,0 +1,43 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef APPLICATIONDBUSADAPTOR_H
18+#define APPLICATIONDBUSADAPTOR_H
19+
20+#include <QtDBus/QtDBus>
21+
22+class ApplicationManager;
23+class SurfaceManager;
24+class MirSurfaceItem;
25+
26+class ApplicationDBusAdaptor : public QDBusAbstractAdaptor
27+{
28+ Q_OBJECT
29+ Q_CLASSINFO("D-Bus Interface", "com.canonical.Unity8.Mocks.Application")
30+public:
31+ ApplicationDBusAdaptor(ApplicationManager* applicationManager);
32+
33+public Q_SLOTS:
34+ quint32 addChildSurface(const QString& appId, const QString& surfaceImage);
35+ void removeChildSurface(int surfaceId);
36+
37+private:
38+ ApplicationManager* m_applicationManager;
39+
40+ QHash<quint32, MirSurfaceItem*> m_childItems;
41+};
42+
43+#endif // APPLICATIONDBUSADAPTOR_H
tests/mocks/Unity/Application/ApplicationInfo.cpp+69−21
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2013-2014 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -15,6 +15,8 @@
15 */
15 */
16
16
17#include "ApplicationInfo.h"
17#include "ApplicationInfo.h"
18+#include "MirSurfaceItem.h"
19+#include "SurfaceManager.h"
18
20
19#include <QGuiApplication>
21#include <QGuiApplication>
20#include <QQuickItem>
22#include <QQuickItem>
@@ -24,29 +26,39 @@
24
26
25ApplicationInfo::ApplicationInfo(const QString &appId, QObject *parent)
27ApplicationInfo::ApplicationInfo(const QString &appId, QObject *parent)
26 : ApplicationInfoInterface(appId, parent)
28 : ApplicationInfoInterface(appId, parent)
27− ,m_appId(appId)
29+ , m_appId(appId)
28− ,m_stage(MainStage)
30+ , m_stage(MainStage)
29− ,m_state(Starting)
31+ , m_state(Starting)
30− ,m_focused(false)
32+ , m_focused(false)
31− ,m_fullscreen(false)
33+ , m_fullscreen(false)
32− ,m_windowItem(0)
34+ , m_windowItem(0)
33− ,m_windowComponent(0)
35+ , m_windowComponent(0)
34− ,m_parentItem(0)
36+ , m_parentItem(0)
37+ , m_surface(0)
35{
38{
36− QTimer::singleShot(300, this, SLOT(setRunning()));
39+ connect(this, &ApplicationInfo::stateChanged, this, &ApplicationInfo::onStateChanged);
37}
40}
38
41
39ApplicationInfo::ApplicationInfo(QObject *parent)
42ApplicationInfo::ApplicationInfo(QObject *parent)
40 : ApplicationInfoInterface(QString(), parent)
43 : ApplicationInfoInterface(QString(), parent)
41− ,m_stage(MainStage)
44+ , m_stage(MainStage)
42− ,m_state(Starting)
45+ , m_state(Starting)
43− ,m_focused(false)
46+ , m_focused(false)
44− ,m_fullscreen(false)
47+ , m_fullscreen(false)
45− ,m_windowItem(0)
48+ , m_windowItem(0)
46− ,m_windowComponent(0)
49+ , m_windowComponent(0)
47− ,m_parentItem(0)
50+ , m_parentItem(0)
51+ , m_surface(0)
48{
52{
49− QTimer::singleShot(300, this, SLOT(setRunning()));
53+ connect(this, &ApplicationInfo::stateChanged, this, &ApplicationInfo::onStateChanged);
54+}
55+
56+ApplicationInfo::~ApplicationInfo()
57+{
58+ if (m_surface) {
59+ Q_EMIT SurfaceManager::singleton()->surfaceDestroyed(m_surface);
60+ m_surface->deleteLater();
61+ }
50}
62}
51
63
52void ApplicationInfo::onWindowComponentStatusChanged(QQmlComponent::Status status)
64void ApplicationInfo::onWindowComponentStatusChanged(QQmlComponent::Status status)
@@ -55,10 +67,46 @@ void ApplicationInfo::onWindowComponentStatusChanged(QQmlComponent::Status statu
55 doCreateWindowItem();
67 doCreateWindowItem();
56}
68}
57
69
58−void ApplicationInfo::setRunning()
70+void ApplicationInfo::onStateChanged(State state)
71+{
72+ if (state == ApplicationInfo::Running) {
73+ QTimer::singleShot(1000, this, SLOT(createSurface()));
74+ } else if (state == ApplicationInfo::Stopped) {
75+ setSurface(nullptr);
76+ }
77+}
78+
79+void ApplicationInfo::createSurface()
59{
80{
60− m_state = Running;
81+ if (m_surface || state() == ApplicationInfo::Stopped) return;
61− Q_EMIT stateChanged();
82+
83+ setSurface(new MirSurfaceItem(name(),
84+ MirSurfaceItem::Normal,
85+ fullscreen() ? MirSurfaceItem::Fullscreen : MirSurfaceItem::Maximized,
86+ screenshot()));
87+}
88+
89+void ApplicationInfo::setSurface(MirSurfaceItem* surface)
90+{
91+ if (m_surface == surface)
92+ return;
93+
94+ if (m_surface) {
95+ m_surface->setApplication(nullptr);
96+ m_surface->setParent(nullptr);
97+ SurfaceManager::singleton()->unregisterSurface(m_surface);
98+ }
99+
100+ m_surface = surface;
101+
102+ if (m_surface) {
103+ m_surface->setApplication(this);
104+ m_surface->setParent(this);
105+ SurfaceManager::singleton()->registerSurface(m_surface);
106+ }
107+
108+ Q_EMIT surfaceChanged(m_surface);
109+ SurfaceManager::singleton()->registerSurface(m_surface);
62}
110}
63
111
64void ApplicationInfo::createWindowComponent()
112void ApplicationInfo::createWindowComponent()
tests/mocks/Unity/Application/ApplicationInfo.h+21−8
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2013-2014 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -21,6 +21,7 @@
21#include <QQmlComponent>
21#include <QQmlComponent>
22
22
23class QQuickItem;
23class QQuickItem;
24+class MirSurfaceItem;
24
25
25// unity-api
26// unity-api
26#include <unity/shell/application/ApplicationInfoInterface.h>
27#include <unity/shell/application/ApplicationInfoInterface.h>
@@ -36,6 +37,7 @@ class ApplicationInfo : public ApplicationInfoInterface {
36
37
37 Q_PROPERTY(bool fullscreen READ fullscreen WRITE setFullscreen NOTIFY fullscreenChanged)
38 Q_PROPERTY(bool fullscreen READ fullscreen WRITE setFullscreen NOTIFY fullscreenChanged)
38 Q_PROPERTY(Stage stage READ stage WRITE setStage NOTIFY stageChanged)
39 Q_PROPERTY(Stage stage READ stage WRITE setStage NOTIFY stageChanged)
40+ Q_PROPERTY(MirSurfaceItem* surface READ surface NOTIFY surfaceChanged)
39
41
40 // Only exists in this fake implementation
42 // Only exists in this fake implementation
41
43
@@ -45,9 +47,10 @@ class ApplicationInfo : public ApplicationInfoInterface {
45 // QML component used to represent the application window
47 // QML component used to represent the application window
46 Q_PROPERTY(QString windowQml READ windowQml WRITE setWindowQml NOTIFY windowQmlChanged)
48 Q_PROPERTY(QString windowQml READ windowQml WRITE setWindowQml NOTIFY windowQmlChanged)
47
49
48− public:
50+public:
49 ApplicationInfo(QObject *parent = NULL);
51 ApplicationInfo(QObject *parent = NULL);
50 ApplicationInfo(const QString &appId, QObject *parent = NULL);
52 ApplicationInfo(const QString &appId, QObject *parent = NULL);
53+ ~ApplicationInfo();
51
54
52 #define IMPLEMENT_PROPERTY(name, Name, type) \
55 #define IMPLEMENT_PROPERTY(name, Name, type) \
53 public: \
56 public: \
@@ -56,11 +59,11 @@ class ApplicationInfo : public ApplicationInfoInterface {
56 { \
59 { \
57 if (m_##name != value) { \
60 if (m_##name != value) { \
58 m_##name = value; \
61 m_##name = value; \
59− Q_EMIT name##Changed(); \
62+ Q_EMIT name##Changed(value); \
60 } \
63 } \
61 } \
64 } \
62 Q_SIGNALS: \
65 Q_SIGNALS: \
63− void name##Changed(); \
66+ void name##Changed(const type&); \
64 private: \
67 private: \
65 type m_##name;
68 type m_##name;
66
69
@@ -78,21 +81,31 @@ class ApplicationInfo : public ApplicationInfoInterface {
78
81
79 #undef IMPLEMENT_PROPERTY
82 #undef IMPLEMENT_PROPERTY
80
83
84+public:
85+ void setSurface(MirSurfaceItem* surface);
86+ MirSurfaceItem* surface() const { return m_surface; }
87+
88+Q_SIGNALS:
89+ void surfaceChanged(MirSurfaceItem*);
90+
81− public:
91+public:
82 void showWindow(QQuickItem *parent);
92 void showWindow(QQuickItem *parent);
83 void hideWindow();
93 void hideWindow();
84
94
85− private Q_SLOTS:
95+private Q_SLOTS:
86 void onWindowComponentStatusChanged(QQmlComponent::Status status);
96 void onWindowComponentStatusChanged(QQmlComponent::Status status);
87− void setRunning();
97+ void onStateChanged(State state);
98+
99+ void createSurface();
88
100
89− private:
101+private:
90 void createWindowItem();
102 void createWindowItem();
91 void doCreateWindowItem();
103 void doCreateWindowItem();
92 void createWindowComponent();
104 void createWindowComponent();
93 QQuickItem *m_windowItem;
105 QQuickItem *m_windowItem;
94 QQmlComponent *m_windowComponent;
106 QQmlComponent *m_windowComponent;
95 QQuickItem *m_parentItem;
107 QQuickItem *m_parentItem;
108+ MirSurfaceItem* m_surface;
96};
109};
97
110
98Q_DECLARE_METATYPE(ApplicationInfo*)
111Q_DECLARE_METATYPE(ApplicationInfo*)
tests/mocks/Unity/Application/ApplicationManager.cpp+60−31
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2013-2014 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -15,7 +15,9 @@
15 */
15 */
16
16
17#include "ApplicationManager.h"
17#include "ApplicationManager.h"
18+#include "ApplicationDBusAdaptor.h"
18#include "ApplicationInfo.h"
19#include "ApplicationInfo.h"
20+#include "MirSurfaceItem.h"
19
21
20#include <paths.h>
22#include <paths.h>
21
23
@@ -26,6 +28,22 @@
26#include <QQmlComponent>
28#include <QQmlComponent>
27#include <QTimer>
29#include <QTimer>
28#include <QDateTime>
30#include <QDateTime>
31+#include <QtDBus/QtDBus>
32+
33+ApplicationManager *ApplicationManager::the_application_manager = nullptr;
34+
35+ApplicationManager *ApplicationManager::singleton()
36+{
37+ if (!the_application_manager) {
38+ the_application_manager = new ApplicationManager();
39+ new ApplicationDBusAdaptor(the_application_manager);
40+
41+ QDBusConnection connection = QDBusConnection::sessionBus();
42+ connection.registerService("com.canonical.Unity8");
43+ connection.registerObject("/com/canonical/Unity8/Mocks", the_application_manager);
44+ }
45+ return the_application_manager;
46+}
29
47
30ApplicationManager::ApplicationManager(QObject *parent)
48ApplicationManager::ApplicationManager(QObject *parent)
31 : ApplicationManagerInterface(parent)
49 : ApplicationManagerInterface(parent)
@@ -36,6 +54,9 @@ ApplicationManager::ApplicationManager(QObject *parent)
36 , m_sideStage(0)
54 , m_sideStage(0)
37 , m_rightMargin(0)
55 , m_rightMargin(0)
38{
56{
57+ m_roleNames.insert(RoleSurface, "surface");
58+ m_roleNames.insert(RoleFullscreen, "fullscreen");
59+
39 buildListOfAvailableApplications();
60 buildListOfAvailableApplications();
40}
61}
41
62
@@ -69,6 +90,10 @@ QVariant ApplicationManager::data(const QModelIndex& index, int role) const {
69 return app->focused();
90 return app->focused();
70 case RoleScreenshot:
91 case RoleScreenshot:
71 return app->screenshot();
92 return app->screenshot();
93+ case RoleSurface:
94+ return QVariant::fromValue(app->surface());
95+ case RoleFullscreen:
96+ return app->fullscreen();
72 default:
97 default:
73 return QVariant();
98 return QVariant();
74 }
99 }
@@ -89,6 +114,17 @@ ApplicationInfo *ApplicationManager::findApplication(const QString &appId) const
89 return nullptr;
114 return nullptr;
90}
115}
91
116
117+QModelIndex ApplicationManager::findIndex(ApplicationInfo* application)
118+{
119+ for (int i = 0; i < m_runningApplications.size(); ++i) {
120+ if (m_runningApplications.at(i) == application) {
121+ return index(i);
122+ }
123+ }
124+
125+ return QModelIndex();
126+}
127+
92void ApplicationManager::add(ApplicationInfo *application) {
128void ApplicationManager::add(ApplicationInfo *application) {
93 if (!application) {
129 if (!application) {
94 return;
130 return;
@@ -99,7 +135,14 @@ void ApplicationManager::add(ApplicationInfo *application) {
99 endInsertRows();
135 endInsertRows();
100 Q_EMIT applicationAdded(application->appId());
136 Q_EMIT applicationAdded(application->appId());
101 Q_EMIT countChanged();
137 Q_EMIT countChanged();
138+ if (count() == 1) Q_EMIT emptyChanged(isEmpty()); // was empty but not anymore
102 Q_EMIT focusRequested(application->appId());
139 Q_EMIT focusRequested(application->appId());
140+
141+ connect(application, &ApplicationInfo::surfaceChanged, this, [application, this]() {
142+ QModelIndex appIndex = findIndex(application);
143+ if (!appIndex.isValid()) return;
144+ Q_EMIT dataChanged(appIndex, appIndex, QVector<int>() << ApplicationManager::RoleSurface);
145+ });
103}
146}
104
147
105void ApplicationManager::remove(ApplicationInfo *application) {
148void ApplicationManager::remove(ApplicationInfo *application) {
@@ -110,7 +153,9 @@ void ApplicationManager::remove(ApplicationInfo *application) {
110 endRemoveRows();
153 endRemoveRows();
111 Q_EMIT applicationRemoved(application->appId());
154 Q_EMIT applicationRemoved(application->appId());
112 Q_EMIT countChanged();
155 Q_EMIT countChanged();
156+ if (isEmpty()) Q_EMIT emptyChanged(isEmpty());
113 }
157 }
158+ disconnect(application, &ApplicationInfo::surfaceChanged, this, 0);
114}
159}
115
160
116void ApplicationManager::move(int from, int to) {
161void ApplicationManager::move(int from, int to) {
@@ -127,16 +172,6 @@ void ApplicationManager::move(int from, int to) {
127 }
172 }
128}
173}
129
174
130−int ApplicationManager::keyboardHeight() const
131−{
132− return 0;
133−}
134−
135−bool ApplicationManager::keyboardVisible() const
136−{
137− return false;
138−}
139−
140int ApplicationManager::sideStageWidth() const
175int ApplicationManager::sideStageWidth() const
141{
176{
142 return 0;
177 return 0;
@@ -180,8 +215,7 @@ ApplicationInfo* ApplicationManager::startApplication(const QString &appId,
180 application->setStage(ApplicationInfo::MainStage);
215 application->setStage(ApplicationInfo::MainStage);
181 }
216 }
182 add(application);
217 add(application);
183−
218+ application->setState(ApplicationInfo::Running);
184− QMetaObject::invokeMethod(this, "focusApplication", Qt::QueuedConnection, Q_ARG(QString, appId));
185
219
186 return application;
220 return application;
187}
221}
@@ -195,6 +229,7 @@ bool ApplicationManager::stopApplication(const QString &appId)
195 if (application->appId() == focusedApplicationId()) {
229 if (application->appId() == focusedApplicationId()) {
196 unfocusCurrentApplication();
230 unfocusCurrentApplication();
197 }
231 }
232+ application->setState(ApplicationInfo::Stopped);
198 remove(application);
233 remove(application);
199 return true;
234 return true;
200}
235}
@@ -215,7 +250,6 @@ bool ApplicationManager::updateScreenshot(const QString &appId)
215 return false;
250 return false;
216 }
251 }
217
252
218− application->setScreenshot(QString("image://application/%1/%2").arg(appId).arg(QDateTime::currentMSecsSinceEpoch()));
219 QModelIndex appIndex = index(idx);
253 QModelIndex appIndex = index(idx);
220 Q_EMIT dataChanged(appIndex, appIndex, QVector<int>() << RoleScreenshot);
254 Q_EMIT dataChanged(appIndex, appIndex, QVector<int>() << RoleScreenshot);
221 return true;
255 return true;
@@ -261,6 +295,7 @@ bool ApplicationManager::focusApplication(const QString &appId)
261 if (app->focused() && app->stage() == ApplicationInfo::MainStage) {
295 if (app->focused() && app->stage() == ApplicationInfo::MainStage) {
262 app->setFocused(false);
296 app->setFocused(false);
263 app->hideWindow();
297 app->hideWindow();
298+ app->setState(ApplicationInfo::Suspended);
264 }
299 }
265 }
300 }
266
301
@@ -268,6 +303,7 @@ bool ApplicationManager::focusApplication(const QString &appId)
268 application->setFocused(true);
303 application->setFocused(true);
269 if (!m_mainStage)
304 if (!m_mainStage)
270 createMainStage();
305 createMainStage();
306+ application->setState(ApplicationInfo::Running);
271 application->showWindow(m_mainStage);
307 application->showWindow(m_mainStage);
272 m_mainStage->setZ(-1000);
308 m_mainStage->setZ(-1000);
273 if (m_sideStage)
309 if (m_sideStage)
@@ -278,6 +314,7 @@ bool ApplicationManager::focusApplication(const QString &appId)
278 if (app->focused() && app->stage() == ApplicationInfo::SideStage) {
314 if (app->focused() && app->stage() == ApplicationInfo::SideStage) {
279 app->setFocused(false);
315 app->setFocused(false);
280 app->hideWindow();
316 app->hideWindow();
317+ app->setState(ApplicationInfo::Suspended);
281 }
318 }
282 }
319 }
283
320
@@ -285,6 +322,7 @@ bool ApplicationManager::focusApplication(const QString &appId)
285 application->setFocused(true);
322 application->setFocused(true);
286 if (!m_sideStage)
323 if (!m_sideStage)
287 createSideStage();
324 createSideStage();
325+ application->setState(ApplicationInfo::Running);
288 application->showWindow(m_sideStage);
326 application->showWindow(m_sideStage);
289 m_sideStage->setZ(-1000);
327 m_sideStage->setZ(-1000);
290 if (m_mainStage)
328 if (m_mainStage)
@@ -354,6 +392,9 @@ void ApplicationManager::generateQmlStrings(ApplicationInfo *application)
354 "}").arg(qmlDirectory())
392 "}").arg(qmlDirectory())
355 .arg(application->icon().toString());
393 .arg(application->icon().toString());
356 application->setImageQml(imageQml);
394 application->setImageQml(imageQml);
395+
396+ application->setScreenshot(QString("file://%1/Dash/graphics/phone/screenshots/%2@12.png").arg(qmlDirectory())
397+ .arg(application->icon().toString()));
357}
398}
358
399
359void ApplicationManager::buildListOfAvailableApplications()
400void ApplicationManager::buildListOfAvailableApplications()
@@ -365,7 +406,6 @@ void ApplicationManager::buildListOfAvailableApplications()
365 application->setName("Dialer");
406 application->setName("Dialer");
366 application->setIcon(QUrl("dialer"));
407 application->setIcon(QUrl("dialer"));
367 application->setStage(ApplicationInfo::SideStage);
408 application->setStage(ApplicationInfo::SideStage);
368− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
369 generateQmlStrings(application);
409 generateQmlStrings(application);
370 m_availableApplications.append(application);
410 m_availableApplications.append(application);
371
411
@@ -374,7 +414,6 @@ void ApplicationManager::buildListOfAvailableApplications()
374 application->setName("Camera");
414 application->setName("Camera");
375 application->setIcon(QUrl("camera"));
415 application->setIcon(QUrl("camera"));
376 application->setFullscreen(true);
416 application->setFullscreen(true);
377− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
378 generateQmlStrings(application);
417 generateQmlStrings(application);
379 m_availableApplications.append(application);
418 m_availableApplications.append(application);
380
419
@@ -382,7 +421,6 @@ void ApplicationManager::buildListOfAvailableApplications()
382 application->setAppId("gallery-app");
421 application->setAppId("gallery-app");
383 application->setName("Gallery");
422 application->setName("Gallery");
384 application->setIcon(QUrl("gallery"));
423 application->setIcon(QUrl("gallery"));
385− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
386 generateQmlStrings(application);
424 generateQmlStrings(application);
387 m_availableApplications.append(application);
425 m_availableApplications.append(application);
388
426
@@ -391,7 +429,6 @@ void ApplicationManager::buildListOfAvailableApplications()
391 application->setName("Facebook");
429 application->setName("Facebook");
392 application->setIcon(QUrl("facebook"));
430 application->setIcon(QUrl("facebook"));
393 application->setStage(ApplicationInfo::SideStage);
431 application->setStage(ApplicationInfo::SideStage);
394− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
395 generateQmlStrings(application);
432 generateQmlStrings(application);
396 m_availableApplications.append(application);
433 m_availableApplications.append(application);
397
434
@@ -400,7 +437,6 @@ void ApplicationManager::buildListOfAvailableApplications()
400 application->setFullscreen(true);
437 application->setFullscreen(true);
401 application->setName("Browser");
438 application->setName("Browser");
402 application->setIcon(QUrl("browser"));
439 application->setIcon(QUrl("browser"));
403− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
404 generateQmlStrings(application);
440 generateQmlStrings(application);
405 m_availableApplications.append(application);
441 m_availableApplications.append(application);
406
442
@@ -409,7 +445,6 @@ void ApplicationManager::buildListOfAvailableApplications()
409 application->setName("Twitter");
445 application->setName("Twitter");
410 application->setIcon(QUrl("twitter"));
446 application->setIcon(QUrl("twitter"));
411 application->setStage(ApplicationInfo::SideStage);
447 application->setStage(ApplicationInfo::SideStage);
412− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
413 generateQmlStrings(application);
448 generateQmlStrings(application);
414 m_availableApplications.append(application);
449 m_availableApplications.append(application);
415
450
@@ -417,7 +452,6 @@ void ApplicationManager::buildListOfAvailableApplications()
417 application->setAppId("gmail-webapp");
452 application->setAppId("gmail-webapp");
418 application->setName("GMail");
453 application->setName("GMail");
419 application->setIcon(QUrl("gmail"));
454 application->setIcon(QUrl("gmail"));
420− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
421 m_availableApplications.append(application);
455 m_availableApplications.append(application);
422
456
423 application = new ApplicationInfo(this);
457 application = new ApplicationInfo(this);
@@ -425,7 +459,6 @@ void ApplicationManager::buildListOfAvailableApplications()
425 application->setName("Weather");
459 application->setName("Weather");
426 application->setIcon(QUrl("weather"));
460 application->setIcon(QUrl("weather"));
427 application->setStage(ApplicationInfo::SideStage);
461 application->setStage(ApplicationInfo::SideStage);
428− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
429 generateQmlStrings(application);
462 generateQmlStrings(application);
430 m_availableApplications.append(application);
463 m_availableApplications.append(application);
431
464
@@ -434,7 +467,6 @@ void ApplicationManager::buildListOfAvailableApplications()
434 application->setName("Notepad");
467 application->setName("Notepad");
435 application->setIcon(QUrl("notepad"));
468 application->setIcon(QUrl("notepad"));
436 application->setStage(ApplicationInfo::SideStage);
469 application->setStage(ApplicationInfo::SideStage);
437− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
438 m_availableApplications.append(application);
470 m_availableApplications.append(application);
439
471
440 application = new ApplicationInfo(this);
472 application = new ApplicationInfo(this);
@@ -442,7 +474,6 @@ void ApplicationManager::buildListOfAvailableApplications()
442 application->setName("Calendar");
474 application->setName("Calendar");
443 application->setIcon(QUrl("calendar"));
475 application->setIcon(QUrl("calendar"));
444 application->setStage(ApplicationInfo::SideStage);
476 application->setStage(ApplicationInfo::SideStage);
445− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
446 m_availableApplications.append(application);
477 m_availableApplications.append(application);
447
478
448 application = new ApplicationInfo(this);
479 application = new ApplicationInfo(this);
@@ -450,21 +481,18 @@ void ApplicationManager::buildListOfAvailableApplications()
450 application->setName("Media Player");
481 application->setName("Media Player");
451 application->setIcon(QUrl("mediaplayer-app"));
482 application->setIcon(QUrl("mediaplayer-app"));
452 application->setFullscreen(true);
483 application->setFullscreen(true);
453− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
454 m_availableApplications.append(application);
484 m_availableApplications.append(application);
455
485
456 application = new ApplicationInfo(this);
486 application = new ApplicationInfo(this);
457 application->setAppId("evernote");
487 application->setAppId("evernote");
458 application->setName("Evernote");
488 application->setName("Evernote");
459 application->setIcon(QUrl("evernote"));
489 application->setIcon(QUrl("evernote"));
460− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
461 m_availableApplications.append(application);
490 m_availableApplications.append(application);
462
491
463 application = new ApplicationInfo(this);
492 application = new ApplicationInfo(this);
464 application->setAppId("map");
493 application->setAppId("map");
465 application->setName("Map");
494 application->setName("Map");
466 application->setIcon(QUrl("map"));
495 application->setIcon(QUrl("map"));
467− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
468 generateQmlStrings(application);
496 generateQmlStrings(application);
469 m_availableApplications.append(application);
497 m_availableApplications.append(application);
470
498
@@ -472,28 +500,24 @@ void ApplicationManager::buildListOfAvailableApplications()
472 application->setAppId("pinterest");
500 application->setAppId("pinterest");
473 application->setName("Pinterest");
501 application->setName("Pinterest");
474 application->setIcon(QUrl("pinterest"));
502 application->setIcon(QUrl("pinterest"));
475− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
476 m_availableApplications.append(application);
503 m_availableApplications.append(application);
477
504
478 application = new ApplicationInfo(this);
505 application = new ApplicationInfo(this);
479 application->setAppId("soundcloud");
506 application->setAppId("soundcloud");
480 application->setName("SoundCloud");
507 application->setName("SoundCloud");
481 application->setIcon(QUrl("soundcloud"));
508 application->setIcon(QUrl("soundcloud"));
482− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
483 m_availableApplications.append(application);
509 m_availableApplications.append(application);
484
510
485 application = new ApplicationInfo(this);
511 application = new ApplicationInfo(this);
486 application->setAppId("wikipedia");
512 application->setAppId("wikipedia");
487 application->setName("Wikipedia");
513 application->setName("Wikipedia");
488 application->setIcon(QUrl("wikipedia"));
514 application->setIcon(QUrl("wikipedia"));
489− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
490 m_availableApplications.append(application);
515 m_availableApplications.append(application);
491
516
492 application = new ApplicationInfo(this);
517 application = new ApplicationInfo(this);
493 application->setAppId("youtube");
518 application->setAppId("youtube");
494 application->setName("YouTube");
519 application->setName("YouTube");
495 application->setIcon(QUrl("youtube"));
520 application->setIcon(QUrl("youtube"));
496− application->setScreenshot(QString("image://application/%1/%2").arg(application->appId()).arg(QDateTime::currentMSecsSinceEpoch()));
497 m_availableApplications.append(application);
521 m_availableApplications.append(application);
498}
522}
499
523
@@ -590,3 +614,8 @@ void ApplicationManager::setRightMargin(int rightMargin)
590 generateQmlStrings(app);
614 generateQmlStrings(app);
591 }
615 }
592}
616}
617+
618+bool ApplicationManager::isEmpty() const
619+{
620+ return m_runningApplications.isEmpty();
621+}
tests/mocks/Unity/Application/ApplicationManager.h+15−9
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2013-2014 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -36,8 +36,7 @@ class ApplicationManager : public ApplicationManagerInterface {
36 Q_ENUMS(FavoriteApplication)
36 Q_ENUMS(FavoriteApplication)
37 Q_FLAGS(ExecFlags)
37 Q_FLAGS(ExecFlags)
38
38
39− Q_PROPERTY(int keyboardHeight READ keyboardHeight NOTIFY keyboardHeightChanged)
39+ Q_PROPERTY(bool empty READ isEmpty NOTIFY emptyChanged)
40− Q_PROPERTY(bool keyboardVisible READ keyboardVisible NOTIFY keyboardVisibleChanged)
41
40
42 Q_PROPERTY(int sideStageWidth READ sideStageWidth)
41 Q_PROPERTY(int sideStageWidth READ sideStageWidth)
43 Q_PROPERTY(StageHint stageHint READ stageHint)
42 Q_PROPERTY(StageHint stageHint READ stageHint)
@@ -53,6 +52,12 @@ class ApplicationManager : public ApplicationManagerInterface {
53 ApplicationManager(QObject *parent = NULL);
52 ApplicationManager(QObject *parent = NULL);
54 virtual ~ApplicationManager();
53 virtual ~ApplicationManager();
55
54
55+ static ApplicationManager *singleton();
56+
57+ enum MoreRoles {
58+ RoleSurface = RoleScreenshot+1,
59+ RoleFullscreen,
60+ };
56 enum Role {
61 enum Role {
57 Dash, Default, Indicators, Notifications, Greeter, Launcher, OnScreenKeyboard,
62 Dash, Default, Indicators, Notifications, Greeter, Launcher, OnScreenKeyboard,
58 ShutdownDialog
63 ShutdownDialog
@@ -74,8 +79,6 @@ class ApplicationManager : public ApplicationManagerInterface {
74 };
79 };
75 Q_DECLARE_FLAGS(ExecFlags, Flag)
80 Q_DECLARE_FLAGS(ExecFlags, Flag)
76
81
77− int keyboardHeight() const;
78− bool keyboardVisible() const;
79 int sideStageWidth() const;
82 int sideStageWidth() const;
80 StageHint stageHint() const;
83 StageHint stageHint() const;
81 FormFactorHint formFactorHint() const;
84 FormFactorHint formFactorHint() const;
@@ -108,11 +111,14 @@ class ApplicationManager : public ApplicationManagerInterface {
108 int rightMargin() const;
111 int rightMargin() const;
109 void setRightMargin(int rightMargin);
112 void setRightMargin(int rightMargin);
110
113
114+ QModelIndex findIndex(ApplicationInfo* application);
115+
116+ bool isEmpty() const;
117+
111 Q_SIGNALS:
118 Q_SIGNALS:
112− void keyboardHeightChanged();
113− void keyboardVisibleChanged();
114 void focusRequested(FavoriteApplication favoriteApplication);
119 void focusRequested(FavoriteApplication favoriteApplication);
115 void focusRequested(const QString &appId);
120 void focusRequested(const QString &appId);
121+ void emptyChanged(bool empty);
116
122
117 private:
123 private:
118 void add(ApplicationInfo *application);
124 void add(ApplicationInfo *application);
@@ -124,8 +130,6 @@ class ApplicationManager : public ApplicationManagerInterface {
124 void createMainStage();
130 void createMainStage();
125 void createSideStageComponent();
131 void createSideStageComponent();
126 void createSideStage();
132 void createSideStage();
127− int m_keyboardHeight;
128− bool m_keyboardVisible;
129 bool m_suspended;
133 bool m_suspended;
130 QList<ApplicationInfo*> m_runningApplications;
134 QList<ApplicationInfo*> m_runningApplications;
131 QList<ApplicationInfo*> m_availableApplications;
135 QList<ApplicationInfo*> m_availableApplications;
@@ -135,6 +139,8 @@ class ApplicationManager : public ApplicationManagerInterface {
135 QQuickItem *m_sideStage;
139 QQuickItem *m_sideStage;
136
140
137 int m_rightMargin;
141 int m_rightMargin;
142+
143+ static ApplicationManager *the_application_manager;
138};
144};
139
145
140Q_DECLARE_OPERATORS_FOR_FLAGS(ApplicationManager::ExecFlags)
146Q_DECLARE_OPERATORS_FOR_FLAGS(ApplicationManager::ExecFlags)
tests/mocks/Unity/Application/CMakeLists.txt+6−2
@@ -2,10 +2,14 @@ pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application)
2
2
3set(FakeUnityApplicationQml_SOURCES
3set(FakeUnityApplicationQml_SOURCES
4 plugin.cpp
4 plugin.cpp
5+ ApplicationDBusAdaptor.cpp
5 ApplicationInfo.cpp
6 ApplicationInfo.cpp
6 ApplicationImage.cpp
7 ApplicationImage.cpp
7 ApplicationManager.cpp
8 ApplicationManager.cpp
8 ApplicationScreenshotProvider.cpp
9 ApplicationScreenshotProvider.cpp
10+ MirSurfaceItem.cpp
11+ SurfaceManager.cpp
12+ VirtualKeyboard.cpp
9 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationInfoInterface.h
13 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationInfoInterface.h
10 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationManagerInterface.h
14 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationManagerInterface.h
11)
15)
@@ -15,8 +19,8 @@ add_library(FakeUnityApplicationQml MODULE ${FakeUnityApplicationQml_SOURCES})
15add_library(NonMirUnityApplicationQml MODULE ${FakeUnityApplicationQml_SOURCES})
19add_library(NonMirUnityApplicationQml MODULE ${FakeUnityApplicationQml_SOURCES})
16set_target_properties(NonMirUnityApplicationQml PROPERTIES OUTPUT_NAME FakeUnityApplicationQml)
20set_target_properties(NonMirUnityApplicationQml PROPERTIES OUTPUT_NAME FakeUnityApplicationQml)
17
21
18−qt5_use_modules(FakeUnityApplicationQml Core Quick)
22+qt5_use_modules(FakeUnityApplicationQml Core Quick DBus)
19−qt5_use_modules(NonMirUnityApplicationQml Core Quick)
23+qt5_use_modules(NonMirUnityApplicationQml Core Quick DBus)
20
24
21add_unity8_mock(Unity.Application 0.1 Unity/Application PREFIX mocks TARGETS FakeUnityApplicationQml)
25add_unity8_mock(Unity.Application 0.1 Unity/Application PREFIX mocks TARGETS FakeUnityApplicationQml)
22add_unity8_mock(Unity.Application 0.1 Unity/Application
26add_unity8_mock(Unity.Application 0.1 Unity/Application
tests/mocks/Unity/Application/MirSurfaceItem.cppnew file+172
@@ -0,0 +1,172 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "MirSurfaceItem.h"
18+#include "ApplicationInfo.h"
19+
20+#include <QPainter>
21+#include <QQmlEngine>
22+
23+MirSurfaceItem::MirSurfaceItem(const QString& name,
24+ MirSurfaceItem::Type type,
25+ MirSurfaceItem::State state,
26+ const QUrl& screenshot,
27+ QQuickItem *parent)
28+ : QQuickPaintedItem(parent)
29+ , m_application(nullptr)
30+ , m_name(name)
31+ , m_type(type)
32+ , m_state(state)
33+ , m_img(screenshot.isLocalFile() ? screenshot.toLocalFile() : screenshot.toString())
34+ , m_parentSurface(nullptr)
35+ , m_haveInputMethod(false)
36+{
37+ QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership);
38+
39+ // The virtual keyboard (input method) has a big transparent area so that
40+ // content behind it show through
41+ setFillColor(Qt::transparent);
42+
43+ connect(this, &QQuickItem::focusChanged,
44+ this, &MirSurfaceItem::onFocusChanged);
45+}
46+
47+MirSurfaceItem::~MirSurfaceItem()
48+{
49+ QList<MirSurfaceItem*> children(m_children);
50+ for (MirSurfaceItem* child : children) {
51+ child->setParentSurface(nullptr);
52+ }
53+ if (m_parentSurface)
54+ m_parentSurface->removeChildSurface(this);
55+
56+ if (m_application)
57+ m_application->setSurface(nullptr);
58+}
59+
60+void MirSurfaceItem::paint(QPainter * painter)
61+{
62+ if (!m_img.isNull()) {
63+ painter->drawImage(contentsBoundingRect(), m_img, QRect(QPoint(0,0), m_img.size()));
64+ }
65+}
66+
67+void MirSurfaceItem::release()
68+{
69+ QList<MirSurfaceItem*> children(m_children);
70+ for (MirSurfaceItem* child : children) {
71+ child->release();
72+ }
73+ if (m_parentSurface) {
74+ m_parentSurface->removeChildSurface(this);
75+ }
76+
77+ if (m_application) {
78+ m_application->setSurface(nullptr);
79+ }
80+ if (!parent()) {
81+ deleteLater();
82+ }
83+}
84+
85+void MirSurfaceItem::setApplication(ApplicationInfo* application)
86+{
87+ m_application = application;
88+}
89+
90+void MirSurfaceItem::setParentSurface(MirSurfaceItem* surface)
91+{
92+ if (m_parentSurface == surface || surface == this)
93+ return;
94+
95+ if (m_parentSurface) {
96+ m_parentSurface->removeChildSurface(this);
97+ }
98+
99+ m_parentSurface = surface;
100+
101+ if (m_parentSurface) {
102+ m_parentSurface->addChildSurface(this);
103+ }
104+ Q_EMIT parentSurfaceChanged(surface);
105+}
106+
107+void MirSurfaceItem::removeChildSurface(MirSurfaceItem* surface)
108+{
109+ if (m_children.contains(surface)) {
110+ m_children.removeOne(surface);
111+ Q_EMIT childSurfacesChanged();
112+ }
113+}
114+
115+void MirSurfaceItem::addChildSurface(MirSurfaceItem* surface)
116+{
117+ m_children.append(surface);
118+ Q_EMIT childSurfacesChanged();
119+}
120+
121+QList<MirSurfaceItem*> MirSurfaceItem::childSurfaceList()
122+{
123+ return m_children;
124+}
125+
126+QQmlListProperty<MirSurfaceItem> MirSurfaceItem::childSurfaces()
127+{
128+ return QQmlListProperty<MirSurfaceItem>(this,
129+ 0,
130+ MirSurfaceItem::childSurfaceCount,
131+ MirSurfaceItem::childSurfaceAt);
132+}
133+
134+int MirSurfaceItem::childSurfaceCount(QQmlListProperty<MirSurfaceItem> *prop)
135+{
136+ MirSurfaceItem *p = qobject_cast<MirSurfaceItem*>(prop->object);
137+ return p->m_children.count();
138+}
139+
140+MirSurfaceItem* MirSurfaceItem::childSurfaceAt(QQmlListProperty<MirSurfaceItem> *prop, int index)
141+{
142+ MirSurfaceItem *p = qobject_cast<MirSurfaceItem*>(prop->object);
143+
144+ if (index < 0 || index >= p->m_children.count())
145+ return nullptr;
146+ return p->m_children[index];
147+}
148+
149+
150+void MirSurfaceItem::touchEvent(QTouchEvent * event)
151+{
152+ if (event->type() == QEvent::TouchBegin && hasFocus()) {
153+ Q_EMIT inputMethodRequested();
154+ m_haveInputMethod = true;
155+ }
156+}
157+
158+void MirSurfaceItem::onFocusChanged()
159+{
160+ if (!hasFocus() && m_haveInputMethod) {
161+ Q_EMIT inputMethodDismissed();
162+ m_haveInputMethod = false;
163+ }
164+}
165+
166+void MirSurfaceItem::setState(MirSurfaceItem::State newState)
167+{
168+ if (newState != m_state) {
169+ m_state = newState;
170+ Q_EMIT stateChanged(newState);
171+ }
172+}
tests/mocks/Unity/Application/MirSurfaceItem.hnew file+121
@@ -0,0 +1,121 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef MIRSURFACEITEM_H
18+#define MIRSURFACEITEM_H
19+
20+#include <QQuickPaintedItem>
21+#include <QImage>
22+
23+class ApplicationInfo;
24+
25+class MirSurfaceItem : public QQuickPaintedItem
26+{
27+ Q_OBJECT
28+ Q_ENUMS(Type)
29+ Q_ENUMS(State)
30+
31+ Q_PROPERTY(Type type READ type NOTIFY typeChanged)
32+ Q_PROPERTY(State state READ state NOTIFY stateChanged)
33+ Q_PROPERTY(QString name READ name NOTIFY nameChanged)
34+ Q_PROPERTY(MirSurfaceItem* parentSurface READ parentSurface NOTIFY parentSurfaceChanged)
35+ Q_PROPERTY(QQmlListProperty<MirSurfaceItem> childSurfaces READ childSurfaces NOTIFY childSurfacesChanged DESIGNABLE false)
36+
37+public:
38+ enum Type {
39+ Normal,
40+ Utility,
41+ Dialog,
42+ Overlay,
43+ Freestyle,
44+ Popover,
45+ InputMethod,
46+ };
47+
48+ enum State {
49+ Unknown,
50+ Restored,
51+ Minimized,
52+ Maximized,
53+ VertMaximized,
54+ /* SemiMaximized, */
55+ Fullscreen,
56+ };
57+
58+ explicit MirSurfaceItem(const QString& name,
59+ Type type,
60+ State state,
61+ const QUrl& screenshot,
62+ QQuickItem *parent = 0);
63+ ~MirSurfaceItem();
64+
65+ //getters
66+ ApplicationInfo* application() const { return m_application; }
67+ Type type() const { return m_type; }
68+ State state() const { return m_state; }
69+ QString name() const { return m_name; }
70+ MirSurfaceItem* parentSurface() const { return m_parentSurface; }
71+ QList<MirSurfaceItem*> childSurfaceList();
72+
73+ void setApplication(ApplicationInfo* item);
74+ void setParentSurface(MirSurfaceItem* item);
75+
76+ Q_INVOKABLE void setState(State newState);
77+ Q_INVOKABLE void release();
78+
79+ void paint(QPainter * painter) override;
80+ void touchEvent(QTouchEvent * event) override;
81+
82+Q_SIGNALS:
83+ void typeChanged(Type);
84+ void stateChanged(State);
85+ void nameChanged(QString);
86+ void parentSurfaceChanged(MirSurfaceItem*);
87+ void childSurfacesChanged();
88+
89+ void removed();
90+
91+ void inputMethodRequested();
92+ void inputMethodDismissed();
93+
94+private Q_SLOTS:
95+ void onFocusChanged();
96+
97+protected:
98+ const QImage &screenshotImage() { return m_img; }
99+
100+private:
101+ void addChildSurface(MirSurfaceItem* surface);
102+ void removeChildSurface(MirSurfaceItem* surface);
103+
104+ QQmlListProperty<MirSurfaceItem> childSurfaces();
105+ static int childSurfaceCount(QQmlListProperty<MirSurfaceItem> *prop);
106+ static MirSurfaceItem* childSurfaceAt(QQmlListProperty<MirSurfaceItem> *prop, int index);
107+
108+ ApplicationInfo* m_application;
109+ const QString m_name;
110+ const Type m_type;
111+ State m_state;
112+ const QImage m_img;
113+
114+ MirSurfaceItem* m_parentSurface;
115+ QList<MirSurfaceItem*> m_children;
116+ bool m_haveInputMethod;
117+};
118+
119+Q_DECLARE_METATYPE(MirSurfaceItem*)
120+
121+#endif // MIRSURFACEITEM_H
tests/mocks/Unity/Application/SurfaceManager.cppnew file+73
@@ -0,0 +1,73 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "SurfaceManager.h"
18+
19+#include "MirSurfaceItem.h"
20+#include "VirtualKeyboard.h"
21+
22+
23+SurfaceManager *SurfaceManager::the_surface_manager = nullptr;
24+
25+SurfaceManager *SurfaceManager::singleton()
26+{
27+ if (!the_surface_manager) {
28+ the_surface_manager = new SurfaceManager();
29+ }
30+ return the_surface_manager;
31+}
32+
33+SurfaceManager::SurfaceManager(QObject *parent) :
34+ QObject(parent)
35+ , m_virtualKeyboard(nullptr)
36+{
37+}
38+
39+void SurfaceManager::registerSurface(MirSurfaceItem *surface)
40+{
41+ connect(surface, &MirSurfaceItem::inputMethodRequested,
42+ this, &SurfaceManager::showInputMethod);
43+ connect(surface, &MirSurfaceItem::inputMethodDismissed,
44+ this, &SurfaceManager::hideInputMethod);
45+ Q_EMIT surfaceCreated(surface);
46+}
47+
48+void SurfaceManager::unregisterSurface(MirSurfaceItem *surface)
49+{
50+ disconnect(surface, 0, this, 0);
51+ Q_EMIT surfaceDestroyed(surface);
52+}
53+
54+void SurfaceManager::showInputMethod()
55+{
56+ inputMethodSurface()->setState(MirSurfaceItem::Restored);
57+}
58+
59+void SurfaceManager::hideInputMethod()
60+{
61+ if (m_virtualKeyboard) {
62+ m_virtualKeyboard->setState(MirSurfaceItem::Minimized);
63+ }
64+}
65+
66+MirSurfaceItem *SurfaceManager::inputMethodSurface()
67+{
68+ if (!m_virtualKeyboard) {
69+ m_virtualKeyboard = new VirtualKeyboard(MirSurfaceItem::Minimized);
70+ Q_EMIT surfaceCreated(m_virtualKeyboard);
71+ }
72+ return m_virtualKeyboard;
73+}
tests/mocks/Unity/Application/SurfaceManager.hnew file+54
@@ -0,0 +1,54 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef SURFACEMANAGER_H
18+#define SURFACEMANAGER_H
19+
20+#include <QObject>
21+
22+class MirSurfaceItem;
23+class VirtualKeyboard;
24+
25+class SurfaceManager : public QObject
26+{
27+ Q_OBJECT
28+public:
29+ explicit SurfaceManager(QObject *parent = 0);
30+
31+ static SurfaceManager *singleton();
32+
33+ // Internal mock use
34+ void registerSurface(MirSurfaceItem *surface);
35+ void unregisterSurface(MirSurfaceItem *surface);
36+
37+ // To be used in the tests
38+ Q_INVOKABLE MirSurfaceItem *inputMethodSurface();
39+
40+Q_SIGNALS:
41+ void countChanged();
42+ void surfaceCreated(MirSurfaceItem *surface);
43+ void surfaceDestroyed(MirSurfaceItem *surface);
44+
45+private Q_SLOTS:
46+ void showInputMethod();
47+ void hideInputMethod();
48+
49+private:
50+ static SurfaceManager *the_surface_manager;
51+ VirtualKeyboard *m_virtualKeyboard;
52+};
53+
54+#endif // SURFACEMANAGER_H
tests/mocks/Unity/Application/VirtualKeyboard.cppnew file+55
@@ -0,0 +1,55 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "VirtualKeyboard.h"
18+
19+#include <paths.h>
20+
21+VirtualKeyboard::VirtualKeyboard(State state, QQuickItem *parent)
22+ : MirSurfaceItem("input-method",
23+ MirSurfaceItem::InputMethod,
24+ state,
25+ QString("file://%1/Dash/graphics/phone/screenshots/vkb_portrait.png").arg(qmlDirectory()),
26+ parent)
27+{
28+}
29+
30+void VirtualKeyboard::touchEvent(QTouchEvent *event)
31+{
32+ if (event->type() == QEvent::TouchBegin && !hasTouchInsideKeyboard(event)) {
33+ event->ignore();
34+ }
35+}
36+
37+bool VirtualKeyboard::hasTouchInsideKeyboard(QTouchEvent *event)
38+{
39+ const QList<QTouchEvent::TouchPoint> &touchPoints = event->touchPoints();
40+ for (int i = 0; i < touchPoints.count(); ++i) {
41+ QPoint pos = touchPoints.at(i).pos().toPoint();
42+
43+ // Map to image coords
44+ int imageX = (int)( ( ((qreal)pos.x()) / width() ) * ((qreal)screenshotImage().size().width()) );
45+ int imageY = (int)( ( ((qreal)pos.y()) / height() ) * ((qreal)screenshotImage().size().height()) );
46+
47+ QRgb pixelHit = screenshotImage().pixel(imageX, imageY);
48+
49+ // The keyboard depicted in the image is in its opaque part.
50+ if (qAlpha(pixelHit) != 0) {
51+ return true;
52+ }
53+ }
54+ return false;
55+}
qml/Stages/SidestageHandle.qml → tests/mocks/Unity/Application/VirtualKeyboard.hrenamed+19−6
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2014 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -14,9 +14,22 @@
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
15 */
16
16
17−import QtQuick 2.0
17+#ifndef VIRTUALKEYBOARD_H
18−import Ubuntu.Components 0.1
18+#define VIRTUALKEYBOARD_H
19
19
20−BorderImage {
20+#include "MirSurfaceItem.h"
21− source: "graphics/sidestage_handle.sci"
21+
22+class VirtualKeyboard : public MirSurfaceItem
23+{
24+ Q_OBJECT
25+public:
26+ VirtualKeyboard(State state,
27+ QQuickItem *parent = 0);
28+
29+ void touchEvent(QTouchEvent * event) override;
30+
31+private:
32+ bool hasTouchInsideKeyboard(QTouchEvent *event);
22−}
33+};
34+
35+#endif // VIRTUALKEYBOARD_H
tests/mocks/Unity/Application/plugin.cpp+16−9
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2013-2014 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -19,29 +19,37 @@
19#include "ApplicationImage.h"
19#include "ApplicationImage.h"
20#include "ApplicationManager.h"
20#include "ApplicationManager.h"
21#include "ApplicationScreenshotProvider.h"
21#include "ApplicationScreenshotProvider.h"
22+#include "MirSurfaceItem.h"
23+#include "SurfaceManager.h"
22
24
23#include <qqml.h>
25#include <qqml.h>
24#include <QQmlEngine>
26#include <QQmlEngine>
25
27
26−ApplicationManager *s_appManager = 0;
27−
28static QObject* applicationManagerSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) {
28static QObject* applicationManagerSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) {
29 Q_UNUSED(engine);
29 Q_UNUSED(engine);
30 Q_UNUSED(scriptEngine);
30 Q_UNUSED(scriptEngine);
31− if (!s_appManager) {
32− s_appManager = new ApplicationManager();
31+ return ApplicationManager::singleton();
33− }
32+}
34− return s_appManager;
33+
34+static QObject* surfaceManagerSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) {
35+ Q_UNUSED(engine);
36+ Q_UNUSED(scriptEngine);
37+ return SurfaceManager::singleton();
35}
38}
36
39
37void FakeUnityApplicationQmlPlugin::registerTypes(const char *uri)
40void FakeUnityApplicationQmlPlugin::registerTypes(const char *uri)
38{
41{
42+ qRegisterMetaType<MirSurfaceItem*>("MirSurfaceItem*");
43+
39 qmlRegisterUncreatableType<unity::shell::application::ApplicationManagerInterface>(uri, 0, 1, "ApplicationManagerInterface", "Abstract interface. Cannot be created in QML");
44 qmlRegisterUncreatableType<unity::shell::application::ApplicationManagerInterface>(uri, 0, 1, "ApplicationManagerInterface", "Abstract interface. Cannot be created in QML");
40 qmlRegisterSingletonType<ApplicationManager>(uri, 0, 1, "ApplicationManager", applicationManagerSingleton);
45 qmlRegisterSingletonType<ApplicationManager>(uri, 0, 1, "ApplicationManager", applicationManagerSingleton);
46+ qmlRegisterSingletonType<SurfaceManager>(uri, 0, 1, "SurfaceManager", surfaceManagerSingleton);
41
47
42 qmlRegisterUncreatableType<unity::shell::application::ApplicationInfoInterface>(uri, 0, 1, "ApplicationInfoInterface", "Abstract interface. Cannot be created in QML");
48 qmlRegisterUncreatableType<unity::shell::application::ApplicationInfoInterface>(uri, 0, 1, "ApplicationInfoInterface", "Abstract interface. Cannot be created in QML");
43 qmlRegisterType<ApplicationInfo>(uri, 0, 1, "ApplicationInfo");
49 qmlRegisterType<ApplicationInfo>(uri, 0, 1, "ApplicationInfo");
44
50
51+ qmlRegisterUncreatableType<MirSurfaceItem>(uri, 0, 1, "MirSurfaceItem", "MirSurfaceItem can't be instantiated from QML");
52+
45 qmlRegisterType<ApplicationImage>(uri, 0, 1, "ApplicationImage");
53 qmlRegisterType<ApplicationImage>(uri, 0, 1, "ApplicationImage");
46}
54}
47
55
@@ -49,6 +57,5 @@ void FakeUnityApplicationQmlPlugin::initializeEngine(QQmlEngine *engine, const c
49{
57{
50 QQmlExtensionPlugin::initializeEngine(engine, uri);
58 QQmlExtensionPlugin::initializeEngine(engine, uri);
51
59
52− ApplicationManager* appManager = static_cast<ApplicationManager*>(applicationManagerSingleton(engine, NULL));
53− engine->addImageProvider(QLatin1String("application"), new ApplicationScreenshotProvider(appManager));
60+ engine->addImageProvider(QLatin1String("application"), new ApplicationScreenshotProvider(ApplicationManager::singleton()));
54}
61}
tests/mocks/Unity/fake_categories.cpp+13−1
@@ -145,9 +145,12 @@ Categories::data(const QModelIndex& index, int role) const
145 } else {
145 } else {
146 map["category-layout"] = "carousel";
146 map["category-layout"] = "carousel";
147 map["card-size"] = "medium";
147 map["card-size"] = "medium";
148− map["collapsed-rows"] = 2;
149 map["overlay"] = true;
148 map["overlay"] = true;
150 }
149 }
150+ if (index.row() == 19) {
151+ map["category-layout"] = "grid";
152+ map["collapsed-rows"] = 0;
153+ }
151 map["card-size"] = "small";
154 map["card-size"] = "small";
152 return map;
155 return map;
153 }
156 }
@@ -166,6 +169,9 @@ Categories::data(const QModelIndex& index, int role) const
166 return map;
169 return map;
167 }
170 }
168 case RoleHeaderLink:
171 case RoleHeaderLink:
172+ if (index.row() == 1 || index.row() == 4) {
173+ return QString("scope://query/1");
174+ }
169 return QString();
175 return QString();
170 case RoleResults:
176 case RoleResults:
171 return QVariant::fromValue(resultsModel);
177 return QVariant::fromValue(resultsModel);
@@ -177,3 +183,9 @@ Categories::data(const QModelIndex& index, int role) const
177 }
183 }
178 }
184 }
179}
185}
186+
187+QVariant
188+Categories::data(int row, int role) const
189+{
190+ return data(index(row, 0), role);
191+}
tests/mocks/Unity/fake_categories.h+2
@@ -37,6 +37,8 @@ public:
37 Q_INVOKABLE void addSpecialCategory(QString const& categoryId, QString const& name, QString const& icon, QString const& rawTemplate, QObject* countObject) override;
37 Q_INVOKABLE void addSpecialCategory(QString const& categoryId, QString const& name, QString const& icon, QString const& rawTemplate, QObject* countObject) override;
38 Q_INVOKABLE bool overrideCategoryJson(QString const& categoryId, QString const& json) override;
38 Q_INVOKABLE bool overrideCategoryJson(QString const& categoryId, QString const& json) override;
39
39
40+ Q_INVOKABLE QVariant data(int row, int role) const;
41+
40private Q_SLOTS:
42private Q_SLOTS:
41 void countChanged();
43 void countChanged();
42
44
tests/mocks/Unity/fake_scope.cpp+8−11
@@ -24,7 +24,7 @@ Scope::Scope(QObject* parent) : Scope(QString(), QString(), false, parent)
24{
24{
25}
25}
26
26
27−Scope::Scope(QString const& id, QString const& name, bool visible, QObject* parent)
27+Scope::Scope(QString const& id, QString const& name, bool visible, QObject* parent, int categories)
28 : unity::shell::scopes::ScopeInterface(parent)
28 : unity::shell::scopes::ScopeInterface(parent)
29 , m_id(id)
29 , m_id(id)
30 , m_name(name)
30 , m_name(name)
@@ -33,7 +33,7 @@ Scope::Scope(QString const& id, QString const& name, bool visible, QObject* pare
33 , m_isActive(false)
33 , m_isActive(false)
34 , m_currentDeparment("root")
34 , m_currentDeparment("root")
35 , m_previewRendererName("preview-generic")
35 , m_previewRendererName("preview-generic")
36− , m_categories(new Categories(20, this))
36+ , m_categories(new Categories(categories, this))
37{
37{
38}
38}
39
39
@@ -182,14 +182,16 @@ bool Scope::hasDepartments() const
182
182
183QVariantMap Scope::customizations() const
183QVariantMap Scope::customizations() const
184{
184{
185− QVariantMap m;
185+ QVariantMap m, h;
186 if (m_id == "clickscope") {
186 if (m_id == "clickscope") {
187+ h["foreground-color"] = "yellow";
187 m["background-color"] = "red";
188 m["background-color"] = "red";
188 m["foreground-color"] = "blue";
189 m["foreground-color"] = "blue";
190+ m["page-header"] = h;
189 } else if (m_id == "MockScope5") {
191 } else if (m_id == "MockScope5") {
190− QVariantMap pageHeader;
192+ h["background"] = "gradient:///lightgrey/grey";
191− pageHeader["logo"] = QUrl("../../../tests/qmltests/Components/tst_PageHeader/logo-ubuntu-orange.svg");
193+ h["logo"] = QUrl("../../../tests/qmltests/Components/tst_PageHeader/logo-ubuntu-orange.svg");
192− m["page-header"] = pageHeader;
194+ m["page-header"] = h;
193 }
195 }
194 return m;
196 return m;
195}
197}
@@ -216,8 +218,3 @@ void Scope::loadDepartment(const QString& id)
216 m_currentDeparment = id;
218 m_currentDeparment = id;
217 Q_EMIT currentDepartmentIdChanged();
219 Q_EMIT currentDepartmentIdChanged();
218}
220}
219−
220−void Scope::performQuery(const QString& query)
221−{
222− Q_UNUSED(query);
223−}
tests/mocks/Unity/fake_scope.h+2−2
@@ -30,7 +30,7 @@ class Scope : public unity::shell::scopes::ScopeInterface
30
30
31public:
31public:
32 Scope(QObject* parent = 0);
32 Scope(QObject* parent = 0);
33− Scope(QString const& id, QString const& name, bool visible, QObject* parent = 0);
33+ Scope(QString const& id, QString const& name, bool visible, QObject* parent = 0, int categories = 20);
34
34
35 /* getters */
35 /* getters */
36 QString id() const override;
36 QString id() const override;
@@ -64,7 +64,7 @@ public:
64 bool hasDepartments() const override;
64 bool hasDepartments() const override;
65 Q_INVOKABLE unity::shell::scopes::DepartmentInterface* getDepartment(const QString& id) override;
65 Q_INVOKABLE unity::shell::scopes::DepartmentInterface* getDepartment(const QString& id) override;
66 Q_INVOKABLE void loadDepartment(const QString& id) override;
66 Q_INVOKABLE void loadDepartment(const QString& id) override;
67− Q_INVOKABLE void performQuery(const QString& query) override;
67+ Q_SIGNAL void performQuery(const QString& query) override;
68
68
69 QVariantMap customizations() const override;
69 QVariantMap customizations() const override;
70
70
tests/mocks/Unity/fake_scopes.cpp+1
@@ -46,6 +46,7 @@ void Scopes::updateScopes()
46 addScope(new Scope("MockScope2", "Music", false, this));
46 addScope(new Scope("MockScope2", "Music", false, this));
47 addScope(new Scope("clickscope", "Apps", true, this));
47 addScope(new Scope("clickscope", "Apps", true, this));
48 addScope(new Scope("MockScope5", "Videos", true, this));
48 addScope(new Scope("MockScope5", "Videos", true, this));
49+ addScope(new Scope("SingleCategoryScope", "Single", true, this, 1));
49
50
50 if (!m_loaded) {
51 if (!m_loaded) {
51 m_loaded = true;
52 m_loaded = true;
tests/plugins/Dash/tst_ScopeStyle.qml+27−2
@@ -36,8 +36,8 @@ Rectangle {
36 property var styles: [
36 property var styles: [
37 {},
37 {},
38 { "foreground-color": "red", "background-color": "black", "page-header": { "logo": "/foo/bar" } },
38 { "foreground-color": "red", "background-color": "black", "page-header": { "logo": "/foo/bar" } },
39− { "foreground-color": "green", "background-color": "white" },
39+ { "foreground-color": "green", "background-color": "white", "page-header": { "foreground-color": "black" } },
40− { "foreground-color": "blue", "background-color": "darkgrey" },
40+ { "foreground-color": "blue", "background-color": "darkgrey", "page-header": { "background": "gradient:///white/blue" } },
41 ]
41 ]
42
42
43 function cleanup() {
43 function cleanup() {
@@ -147,5 +147,30 @@ Rectangle {
147 tool.style = testCase.styles[data.index];
147 tool.style = testCase.styles[data.index];
148 compare(tool.headerLogo, data.headerLogo, "Header logo was incorrect.");
148 compare(tool.headerLogo, data.headerLogo, "Header logo was incorrect.");
149 }
149 }
150+
151+ function test_headerForeground_data() {
152+ return [
153+ { tag: "default", index: 0, headerForeground: "grey" },
154+ { tag: "black", index: 2, headerForeground: "black" },
155+ ];
156+ }
157+
158+ function test_headerForeground(data) {
159+ tool.style = testCase.styles[data.index];
160+ verify(Qt.colorEqual(tool.headerForeground, data.headerForeground),
161+ "Header foreground not equal: %1 != %2".arg(tool.headerForeground).arg(data.headerForeground));
162+ }
163+
164+ function test_headerBackground_data() {
165+ return [
166+ { tag: "default", index: 0, headerBackground: "" },
167+ { tag: "black", index: 3, headerBackground: "gradient:///white/blue" },
168+ ];
169+ }
170+
171+ function test_headerBackground(data) {
172+ tool.style = testCase.styles[data.index];
173+ compare(tool.headerBackground, data.headerBackground, "Header background was incorrect.");
174+ }
150 }
175 }
151}
176}
tests/qmltests/CMakeLists.txt+1−1
@@ -21,10 +21,10 @@ set(qmltest_DEFAULT_PROPERTIES ENVIRONMENT "LC_ALL=C")
21
21
22add_qml_test(. Shell ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/LightDM/single")
22add_qml_test(. Shell ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/LightDM/single")
23add_qml_test(. ShellWithPin ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/LightDM/single-pin")
23add_qml_test(. ShellWithPin ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/LightDM/single-pin")
24+add_qml_test(Components Background)
24add_qml_test(Components Carousel)
25add_qml_test(Components Carousel)
25add_qml_test(Components DraggingArea)
26add_qml_test(Components DraggingArea)
26add_qml_test(Components EdgeDemoOverlay)
27add_qml_test(Components EdgeDemoOverlay)
27−add_qml_test(Components FilterGrid)
28add_qml_test(Components LazyImage)
28add_qml_test(Components LazyImage)
29add_qml_test(Components Rating)
29add_qml_test(Components Rating)
30add_qml_test(Components ResponsiveFlowView)
30add_qml_test(Components ResponsiveFlowView)
tests/qmltests/Components/tst_Background.qmlnew file+90
@@ -0,0 +1,90 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.2
18+import QtTest 1.0
19+import Unity.Test 0.1
20+
21+import "../../../qml/Components"
22+
23+Rectangle {
24+ width: units.gu(40)
25+ height: units.gu(71)
26+
27+ Background {
28+ id: background
29+ }
30+
31+ UnityTestCase {
32+ id: testCase
33+ name: "Background"
34+ when: windowShown
35+
36+ SignalSpy {
37+ id: loadedSpy
38+ target: background
39+ signalName: "loaded"
40+ }
41+
42+ function cleanup() {
43+ background.style = "";
44+ loadedSpy.clear();
45+ }
46+
47+ function test_style_data() {
48+ return [
49+ { tag: "empty", style: "" },
50+ { tag: "solid", style: "color:///black" },
51+ { tag: "gradient", style: "gradient:///black/red" },
52+ { tag: "image", style: "/some/path" },
53+ ];
54+ }
55+
56+ function test_style(data) {
57+ background.style = data.style;
58+ expectFail("empty", "Empty style should not create a background.");
59+ loadedSpy.wait();
60+ compare(background.item.objectName, data.tag, "Background should be %1".arg(data.style));
61+ }
62+
63+ function test_solid() {
64+ background.style = "color:///black";
65+ loadedSpy.wait();
66+
67+ verify(Qt.colorEqual(background.item.color, "black"),
68+ "Solid color not equal: %1 != black".arg(background.item.color));
69+ }
70+
71+ function test_gradient() {
72+ background.style = "gradient:///black/red";
73+ loadedSpy.wait();
74+
75+ var stops = background.item.gradient.stops;
76+
77+ verify(Qt.colorEqual(stops[0].color, "black"),
78+ "Top gradient color not equal: %1 != black".arg(stops[0].color));
79+ verify(Qt.colorEqual(stops[1].color, "red"),
80+ "Bottom gradient color not equal: %1 != black".arg(stops[1].color));
81+ }
82+
83+ function test_image() {
84+ background.style = "/some/path";
85+ loadedSpy.wait();
86+
87+ compare(background.item.source, Qt.resolvedUrl("/some/path"), "Image path is incorrect.");
88+ }
89+ }
90+}
tests/qmltests/Components/tst_FilterGrid.qmldeleted−190
@@ -1,190 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import QtTest 1.0
19−import "../../../qml/Components"
20−import Ubuntu.Components.ListItems 0.1 as ListItem
21−import Ubuntu.Components 0.1
22−import Unity.Test 0.1 as UT
23−import Utils 0.1
24−
25−/*
26− You should see 6 green squares (from "A" to "F") and a button "View all (12)".
27− Once you press that button other 6 green squares (from "G" to "L") should show up.
28−*/
29−Rectangle {
30− width: gridRect.width + controls.width
31− height: units.gu(50)
32− color: "white"
33−
34− Column {
35− id: controls
36− width: units.gu(30)
37− height: parent.height
38− anchors.top: parent.top
39− anchors.right: parent.right
40− ListItem.ValueSelector {
41− id: collapsedRowCountSelector
42− text: "collapsedRowCount"
43− values: [1,2,3,4]
44− selectedIndex: 1
45− }
46− Row {
47− spacing: units.gu(1)
48− Label { anchors.verticalCenter: parent.verticalCenter
49− text: "Filter" }
50− CheckBox {
51− id: filterCheckBox
52− checked: true
53− onCheckedChanged: filterGrid.setFilter(checked, false /*animate*/)
54− }
55− }
56− }
57−
58− ListModel {
59− id: fakeModel
60− ListElement { name: "A" }
61− ListElement { name: "B" }
62− ListElement { name: "C" }
63− ListElement { name: "D" }
64− ListElement { name: "E" }
65− ListElement { name: "F" }
66− ListElement { name: "G" }
67− ListElement { name: "H" }
68− ListElement { name: "I" }
69− ListElement { name: "J" }
70− ListElement { name: "K" }
71− ListElement { name: "L" }
72− }
73−
74− ListModel {
75− id: fakeModelTwoItems
76− ListElement { name: "A" }
77− ListElement { name: "B" }
78− }
79−
80− ListModel {
81− id: fakeModelFourItems
82− ListElement { name: "A" }
83− ListElement { name: "B" }
84− ListElement { name: "C" }
85− ListElement { name: "D" }
86− }
87−
88− Rectangle {
89− id: gridRect
90− width: units.gu(30)
91− height: parent.height
92− color: "grey"
93− anchors.top: parent.top
94− anchors.left: parent.left
95−
96− FilterGrid {
97− id: filterGrid
98− anchors.fill: parent
99− model: fakeModel
100− maximumNumberOfColumns: 3
101− collapsedRowCount:
102− collapsedRowCountSelector.values[collapsedRowCountSelector.selectedIndex]
103− minimumHorizontalSpacing: units.gu(1)
104− delegateWidth: units.gu(6)
105− delegateHeight: units.gu(6)
106− verticalSpacing: units.gu(1)
107−
108− delegate: Rectangle {
109− // So that it can be identified by countVisibleDelegates()
110− property bool isGridDelegate: true
111−
112− color: "green"
113− width: units.gu(6)
114− height: units.gu(6)
115− Text {
116− anchors.centerIn: parent
117− text: name
118− }
119− }
120− }
121− }
122−
123− UT.UnityTestCase {
124− name: "FilterGrid"
125− when: windowShown
126−
127− function init() {
128− filterGrid.model = fakeModel
129− }
130−
131− function cleanup() {
132− filterCheckBox.checked = true
133− collapsedRowCountSelector.selectedIndex = 1
134− }
135−
136− function test_turningFilterOffShowsAllElements() {
137− tryCompareFunction(countVisibleDelegates, 6)
138−
139− filterCheckBox.checked = false
140−
141− tryCompareFunction(countVisibleDelegates, 12)
142− }
143−
144− function test_collapsedRowCount() {
145− for (var i = 0; i < 4; ++i) {
146− collapsedRowCountSelector.selectedIndex = i
147− // We have 3 elements per row.
148− // row count == index + 1
149− tryCompareFunction(countVisibleDelegates, 3*(i+1))
150− }
151− }
152−
153− function test_modelSizeAffectsCollapsedRowCount_data() {
154− return [
155− { tag: "2 items, collapsedRows 1", model: fakeModelTwoItems, collapsedRowCountIndex: 0,
156− rowsWhenCollapsed: 1, visibleDelegates: 2 },
157− { tag: "2 items, collapsedRows 2", model: fakeModelTwoItems, collapsedRowCountIndex: 1,
158− rowsWhenCollapsed: 1, visibleDelegates: 2 },
159− { tag: "4 items, collapsedRows 1", model: fakeModelFourItems, collapsedRowCountIndex: 0,
160− rowsWhenCollapsed: 1, visibleDelegates: 3 },
161− { tag: "4 items, collapsedRows 2", model: fakeModelFourItems, collapsedRowCountIndex: 1,
162− rowsWhenCollapsed: 2, visibleDelegates: 4 },
163− ]
164− }
165−
166− function test_modelSizeAffectsCollapsedRowCount(data) {
167− filterGrid.model = data.model
168− collapsedRowCountSelector.selectedIndex = data.collapsedRowCountIndex
169−
170− tryCompare(filterGrid, "rowsWhenCollapsed", data.rowsWhenCollapsed)
171− tryCompareFunction(countVisibleDelegates, data.visibleDelegates)
172− }
173−
174− function countVisibleDelegates() {
175− return __countVisibleDelegates(filterGrid.visibleChildren, 0)
176− }
177−
178− function __countVisibleDelegates(objList, total) {
179− for (var i = 0; i < objList.length; ++i) {
180− var child = objList[i];
181− if (child.isGridDelegate !== undefined) {
182− ++total;
183− } else {
184− total = __countVisibleDelegates(child.visibleChildren, total)
185− }
186− }
187− return total
188− }
189− }
190−}
tests/qmltests/Dash/Apps/tst_RunningApplicationsGrid.qml+23−2
@@ -19,10 +19,11 @@ import QtTest 1.0
19import "../../../../qml/Dash/Apps"
19import "../../../../qml/Dash/Apps"
20import Unity.Test 0.1 as UT
20import Unity.Test 0.1 as UT
21import Unity.Application 0.1
21import Unity.Application 0.1
22+import Ubuntu.Components 1.1
22
23
23// Using Rectangle to have an opaque surface because AppManager paints app surfaces behind it.
24// Using Rectangle to have an opaque surface because AppManager paints app surfaces behind it.
24Rectangle {
25Rectangle {
25− width: units.gu(50)
26+ width: units.gu(70)
26 height: units.gu(40)
27 height: units.gu(40)
27
28
28 function resetRunningApplications() {
29 function resetRunningApplications() {
@@ -41,10 +42,30 @@ Rectangle {
41 // The component under test
42 // The component under test
42 RunningApplicationsGrid {
43 RunningApplicationsGrid {
43 id: runningApplicationsGrid
44 id: runningApplicationsGrid
45+ orientationAngle: orientationAngleSelector.selectedIndex * 90
46+ anchors.left: parent.left
47+ anchors.right: controlPanel.left
44− anchors.fill: parent
48+ anchors.top: parent.top
49+ anchors.bottom: parent.bottom
45 model: ApplicationManager
50 model: ApplicationManager
46 }
51 }
47
52
53+ Rectangle {
54+ id: controlPanel
55+ anchors.right: parent.right
56+ anchors.top: parent.top
57+ anchors.bottom: parent.bottom
58+ width: units.gu(20)
59+ color: "black"
60+
61+ OptionSelector {
62+ id: orientationAngleSelector
63+ model: ["0","90","180","270"]
64+ text: "Orientation Angle"
65+ width: parent.width
66+ }
67+ }
68+
48 UT.UnityTestCase {
69 UT.UnityTestCase {
49 name: "RunningApplicationsGrid"
70 name: "RunningApplicationsGrid"
50 when: windowShown
71 when: windowShown
tests/qmltests/Dash/tst_Dash.qml+1−1
@@ -86,7 +86,7 @@ Item {
86 tryCompare(dashContentList, "count", 0);
86 tryCompare(dashContentList, "count", 0);
87 scopes.load();
87 scopes.load();
88 tryCompare(scopes, "loaded", true);
88 tryCompare(scopes, "loaded", true);
89− tryCompare(dashContentList, "count", 3);
89+ tryCompare(dashContentList, "count", 4);
90
90
91 verify(dashContentList != undefined);
91 verify(dashContentList != undefined);
92 tryCompare(dashContentList, "currentIndex", data.visualIndex);
92 tryCompare(dashContentList, "currentIndex", data.visualIndex);
tests/qmltests/Dash/tst_DashContent.qml+15−6
@@ -61,6 +61,11 @@ Item {
61 signalName: "movementStarted"
61 signalName: "movementStarted"
62 }
62 }
63
63
64+ SignalSpy {
65+ id: loadedSpy
66+ signalName: "loaded"
67+ }
68+
64 UT.UnityTestCase {
69 UT.UnityTestCase {
65 name: "DashContent"
70 name: "DashContent"
66 when: scopesModel.loaded && windowShown
71 when: scopesModel.loaded && windowShown
@@ -78,6 +83,7 @@ Item {
78
83
79 function cleanup() {
84 function cleanup() {
80 movementStartedSpy.clear();
85 movementStartedSpy.clear();
86+ loadedSpy.clear();
81 dashContent.visible = true;
87 dashContent.visible = true;
82
88
83 var dashContentList = findChild(dashContent, "dashContentList");
89 var dashContentList = findChild(dashContent, "dashContentList");
@@ -116,10 +122,11 @@ Item {
116
122
117 function test_show_header_on_list_movement() {
123 function test_show_header_on_list_movement() {
118 var dashContentList = findChild(dashContent, "dashContentList");
124 var dashContentList = findChild(dashContent, "dashContentList");
119− verify(dashContentList != undefined);
125+ verify(dashContentList !== null);
120− var categoryListView = findChild(dashContentList, "categoryListView");
126+ var scope = findChild(dashContent, "MockScope1 loader");
121− verify(categoryListView != undefined);
127+ waitForRendering(scope);
122
128
129+ var categoryListView = findChild(scope, "categoryListView");
123 waitForRendering(categoryListView);
130 waitForRendering(categoryListView);
124
131
125 categoryListView.contentY = units.gu(15);
132 categoryListView.contentY = units.gu(15);
@@ -133,10 +140,12 @@ Item {
133
140
134 function test_set_current_scope_reset() {
141 function test_set_current_scope_reset() {
135 var dashContentList = findChild(dashContent, "dashContentList");
142 var dashContentList = findChild(dashContent, "dashContentList");
136− verify(dashContentList != undefined);
143+ verify(dashContentList, "Couldn't find dashContentList");
137− var categoryListView = findChild(dashContentList, "categoryListView");
144+ var scope = findChild(dashContent, "MockScope1 loader");
138− verify(categoryListView != undefined);
139
145
146+ tryCompare(scope, "status", Loader.Ready);
147+
148+ var categoryListView = findChild(dashContentList, "categoryListView");
140 categoryListView.contentY = units.gu(10);
149 categoryListView.contentY = units.gu(10);
141
150
142 compare(dashContentList.currentItem.item.objectName, "MockScope1")
151 compare(dashContentList.currentItem.item.objectName, "MockScope1")
tests/qmltests/Dash/tst_GenericScopeView.qml+137−49
@@ -39,6 +39,10 @@ Item {
39 id: scopes
39 id: scopes
40 }
40 }
41
41
42+ SignalSpy {
43+ id: spy
44+ }
45+
42 property Item applicationManager: Item {
46 property Item applicationManager: Item {
43 signal sideStageFocusedApplicationChanged()
47 signal sideStageFocusedApplicationChanged()
44 signal mainStageFocusedApplicationChanged()
48 signal mainStageFocusedApplicationChanged()
@@ -54,12 +58,20 @@ Item {
54 when: scopes.loaded && windowShown
58 when: scopes.loaded && windowShown
55
59
56 property Item previewListView: findChild(genericScopeView, "previewListView")
60 property Item previewListView: findChild(genericScopeView, "previewListView")
61+ property Item header: findChild(genericScopeView, "scopePageHeader")
57
62
58 function init() {
63 function init() {
59 genericScopeView.scope = scopes.getScope(1)
64 genericScopeView.scope = scopes.getScope(1)
60 shell.width = units.gu(120)
65 shell.width = units.gu(120)
61 genericScopeView.categoryView.positionAtBeginning();
66 genericScopeView.categoryView.positionAtBeginning();
62− tryCompare(genericScopeView.categoryView, "contentY", 0)
67+ waitForRendering(genericScopeView.categoryView);
68+ }
69+
70+ function cleanup() {
71+ genericScopeView.scope = null;
72+ spy.clear();
73+ spy.target = null;
74+ spy.signalName = "";
63 }
75 }
64
76
65 function test_isActive() {
77 function test_isActive() {
@@ -104,90 +116,146 @@ Item {
104 tryCompare(genericScopeView.scope, "searchQuery", "test")
116 tryCompare(genericScopeView.scope, "searchQuery", "test")
105 }
117 }
106
118
107− function test_filter_expand_collapse() {
119+ function test_expand_collapse() {
108− // wait for the item to be there
109− waitForRendering(genericScopeView);
110 tryCompareFunction(function() { return findChild(genericScopeView, "dashSectionHeader0") != null; }, true);
120 tryCompareFunction(function() { return findChild(genericScopeView, "dashSectionHeader0") != null; }, true);
111
121
112− var header = findChild(genericScopeView, "dashSectionHeader0")
113 var category = findChild(genericScopeView, "dashCategory0")
122 var category = findChild(genericScopeView, "dashCategory0")
123+ var seeAll = findChild(category, "seeAll")
114
124
115− waitForRendering(header);
125+ waitForRendering(seeAll);
116 verify(category.expandable);
126 verify(category.expandable);
117− verify(category.filtered);
127+ verify(!category.expanded);
118
128
119 var initialHeight = category.height;
129 var initialHeight = category.height;
120− var middleHeight;
121− mouseClick(header, header.width / 2, header.height / 2);
130+ mouseClick(seeAll, seeAll.width / 2, seeAll.height / 2);
131+ verify(category.expanded);
122− tryCompareFunction(function() { middleHeight = category.height; return category.height > initialHeight; }, true);
132+ tryCompareFunction(function() { return category.height > initialHeight; }, true);
123− tryCompare(category, "filtered", false);
124− tryCompareFunction(function() { return category.height > middleHeight; }, true);
125
133
126− mouseClick(header, header.width / 2, header.height / 2);
134+ mouseClick(seeAll, seeAll.width / 2, seeAll.height / 2);
127− verify(category.expandable);
135+ verify(!category.expanded);
128− tryCompare(category, "filtered", true);
129 }
136 }
130
137
131− function test_filter_expand_expand_collapse() {
138+ function test_expand_expand_collapse() {
132 // wait for the item to be there
139 // wait for the item to be there
133 tryCompareFunction(function() { return findChild(genericScopeView, "dashSectionHeader2") != null; }, true);
140 tryCompareFunction(function() { return findChild(genericScopeView, "dashSectionHeader2") != null; }, true);
134
141
135 var categoryListView = findChild(genericScopeView, "categoryListView");
142 var categoryListView = findChild(genericScopeView, "categoryListView");
136 categoryListView.contentY = categoryListView.height;
143 categoryListView.contentY = categoryListView.height;
137
144
138− var header2 = findChild(genericScopeView, "dashSectionHeader2")
139 var category2 = findChild(genericScopeView, "dashCategory2")
145 var category2 = findChild(genericScopeView, "dashCategory2")
140− var category2FilterGrid = category2.children[1].children[2];
146+ var seeAll2 = findChild(category2, "seeAll")
141− verify(UT.Util.isInstanceOf(category2FilterGrid, "CardFilterGrid"));
142
147
143− waitForRendering(header2);
148+ waitForRendering(seeAll2);
144 verify(category2.expandable);
149 verify(category2.expandable);
145− verify(category2.filtered);
150+ verify(!category2.expanded);
146
151
147− mouseClick(header2, header2.width / 2, header2.height / 2);
152+ mouseClick(seeAll2, seeAll2.width / 2, seeAll2.height / 2);
148− tryCompare(category2, "filtered", false);
153+ tryCompare(category2, "expanded", true);
149− tryCompare(category2FilterGrid, "filtered", false);
150
154
151 categoryListView.positionAtBeginning();
155 categoryListView.positionAtBeginning();
152
156
153− var header0 = findChild(genericScopeView, "dashSectionHeader0")
154 var category0 = findChild(genericScopeView, "dashCategory0")
157 var category0 = findChild(genericScopeView, "dashCategory0")
158+ var seeAll0 = findChild(category0, "seeAll")
155− mouseClick(header0, header0.width / 2, header0.height / 2);
159+ mouseClick(seeAll0, seeAll0.width / 2, seeAll0.height / 2);
156− tryCompare(category0, "filtered", false);
160+ tryCompare(category0, "expanded", true);
157− tryCompare(category2, "filtered", true);
161+ tryCompare(category2, "expanded", false);
158− tryCompare(category2FilterGrid, "filtered", true);
162+ mouseClick(seeAll0, seeAll0.width / 2, seeAll0.height / 2);
163+ tryCompare(category0, "expanded", false);
164+ tryCompare(category2, "expanded", false);
165+ }
166+
167+ function test_headerLink() {
168+ tryCompareFunction(function() { return findChild(genericScopeView, "dashSectionHeader1") != null; }, true);
169+ var header = findChild(genericScopeView, "dashSectionHeader1");
170+
171+ spy.target = genericScopeView.scope;
172+ spy.signalName = "performQuery";
173+
159− mouseClick(header0, header0.width / 2, header0.height / 2);
174+ mouseClick(header, header.width / 2, header.height / 2);
160− tryCompare(category0, "filtered", true);
175+
161− tryCompare(category2, "filtered", true);
176+ spy.wait();
177+ compare(spy.signalArguments[0][0], genericScopeView.scope.categories.data(1, Categories.RoleHeaderLink));
178+ }
179+
180+ function test_headerLink_disable_expansion() {
181+ var categoryListView = findChild(genericScopeView, "categoryListView");
182+ waitForRendering(categoryListView);
183+
184+ categoryListView.contentY = categoryListView.height * 2;
185+
186+ // wait for the item to be there
187+ tryCompareFunction(function() { return findChild(genericScopeView, "dashSectionHeader4") != null; }, true);
188+
189+ var categoryView = findChild(genericScopeView, "dashCategory4");
190+ verify(categoryView, "Can't find the category view.");
191+
192+ var seeAll = findChild(categoryView, "seeAll");
193+ verify(seeAll, "Can't find the seeAll element");
194+
195+ compare(seeAll.height, 0, "SeeAll should be 0-height.");
196+
197+ openPreview(4, 0);
198+
199+ compare(testCase.previewListView.count, 12, "There should only be 12 items in preview.");
162 }
200 }
163
201
164 function test_narrow_delegate_ranges_expand() {
202 function test_narrow_delegate_ranges_expand() {
165− tryCompareFunction(function() { return findChild(genericScopeView, "dashCategory0") != undefined; }, true);
203+ tryCompareFunction(function() { return findChild(genericScopeView, "dashCategory0") !== null; }, true);
166 var category = findChild(genericScopeView, "dashCategory0")
204 var category = findChild(genericScopeView, "dashCategory0")
167− tryCompare(category, "filtered", true);
205+ tryCompare(category, "expanded", false);
168
206
169 shell.width = units.gu(20)
207 shell.width = units.gu(20)
170 var categoryListView = findChild(genericScopeView, "categoryListView");
208 var categoryListView = findChild(genericScopeView, "categoryListView");
171 categoryListView.contentY = units.gu(20);
209 categoryListView.contentY = units.gu(20);
172− var header0 = findChild(genericScopeView, "dashSectionHeader0")
210+ var seeAll = findChild(category, "seeAll")
173− mouseClick(header0, header0.width / 2, header0.height / 2);
211+ mouseClick(seeAll, seeAll.width / 2, seeAll.height / 2);
174− tryCompare(category, "filtered", false);
212+ tryCompare(category, "expanded", true);
175 tryCompareFunction(function() { return category.item.height == genericScopeView.height - category.item.displayMarginBeginning - category.item.displayMarginEnd; }, true);
213 tryCompareFunction(function() { return category.item.height == genericScopeView.height - category.item.displayMarginBeginning - category.item.displayMarginEnd; }, true);
176− mouseClick(header0, header0.width / 2, header0.height / 2);
214+ mouseClick(seeAll, seeAll.width / 2, seeAll.height / 2);
177− tryCompare(category, "filtered", true);
215+ tryCompare(category, "expanded", false);
216+ }
217+
218+ function test_forced_category_expansion() {
219+ tryCompareFunction(function() {
220+ mouseFlick(genericScopeView, genericScopeView.width/2, genericScopeView.height,
221+ genericScopeView.width/2, genericScopeView.y)
222+ return findChild(genericScopeView, "dashCategory19") !== null;
223+ }, true);
224+ var category = findChild(genericScopeView, "dashCategory19")
225+ compare(category.expandable, false, "Category with collapsed-rows: 0 should not be expandable");
226+
227+ var grid = findChild(category, "19");
228+ verify(grid, "Could not find the category renderer.");
229+
230+ compare(grid.height, grid.expandedHeight, "Category with collapsed-rows: 0 should always be expanded.");
231+ }
232+
233+ function test_single_category_expansion() {
234+ genericScopeView.scope = scopes.getScope(4);
235+
236+ tryCompareFunction(function() { return findChild(genericScopeView, "dashCategory0") != undefined; }, true);
237+ var category = findChild(genericScopeView, "dashCategory0")
238+ compare(category.expandable, false, "Only category should not be expandable.");
239+
240+ var grid = findChild(category, "0");
241+ verify(grid, "Could not find the category renderer.");
242+
243+ compare(grid.height, grid.expandedHeight, "Only category should always be expanded");
178 }
244 }
179
245
180− function openPreview() {
246+ function openPreview(category, delegate) {
247+ if (category === undefined) category = 0;
248+ if (delegate === undefined) delegate = 0;
181 tryCompareFunction(function() {
249 tryCompareFunction(function() {
182− var filterGrid = findChild(genericScopeView, "0");
250+ var cardGrid = findChild(genericScopeView, category);
183− if (filterGrid != null) {
251+ if (cardGrid != null) {
184− var tile = findChild(filterGrid, "delegate0");
252+ var tile = findChild(cardGrid, "delegate"+delegate);
185 return tile != null;
253 return tile != null;
186 }
254 }
187 return false;
255 return false;
188 },
256 },
189 true);
257 true);
190− var tile = findChild(findChild(genericScopeView, "0"), "delegate0");
258+ var tile = findChild(findChild(genericScopeView, category), "delegate"+delegate);
191 mouseClick(tile, tile.width / 2, tile.height / 2);
259 mouseClick(tile, tile.width / 2, tile.height / 2);
192 tryCompare(testCase.previewListView, "open", true);
260 tryCompare(testCase.previewListView, "open", true);
193 tryCompare(testCase.previewListView, "x", 0);
261 tryCompare(testCase.previewListView, "x", 0);
@@ -257,13 +325,33 @@ Item {
257 closePreview();
325 closePreview();
258 }
326 }
259
327
260− function test_haeder_logo() {
328+ function test_header_style_data() {
261− genericScopeView.scope = scopes.getScope(3);
329+ return [
330+ { tag: "Default", index: 0, foreground: "grey", background: "", logo: "" },
331+ { tag: "Foreground", index: 2, foreground: "yellow", background: "", logo: "" },
332+ { tag: "Logo+Background", index: 3, foreground: "grey", background: "gradient:///lightgrey/grey",
333+ logo: Qt.resolvedUrl("../Components/tst_PageHeader/logo-ubuntu-orange.svg") },
334+ ];
335+ }
262
336
263− var image = findChild(genericScopeView, "titleImage");
337+ function test_header_style(data) {
338+ genericScopeView.scope = scopes.getScope(data.index);
339+ waitForRendering(genericScopeView);
340+ verify(header, "Could not find the header.");
341+
342+ var innerHeader = findChild(header, "innerPageHeader");
264− verify(image, "Could not find the title image");
343+ verify(innerHeader, "Could not find the inner header");
265− compare(image.source, Qt.resolvedUrl("../Components/tst_PageHeader/logo-ubuntu-orange.svg"), "Title image has the wrong source");
344+ verify(Qt.colorEqual(innerHeader.textColor, data.foreground),
345+ "Foreground color not equal: %1 != %2".arg(innerHeader.textColor).arg(data.foreground));
266
346
347+ var background = findChild(header, "headerBackground");
348+ verify(background, "Could not find the background");
349+ compare(background.style, data.background);
350+
351+ var image = findChild(genericScopeView, "titleImage");
352+ if (data.logo == "") expectFail(data.tag, "Title image should not exist.");
353+ verify(image, "Could not find the title image.");
354+ compare(image.source, data.logo, "Title image has the wrong source");
267 }
355 }
268 }
356 }
269 }
357 }
tests/qmltests/Launcher/tst_Launcher.qml+11−2
@@ -94,9 +94,16 @@ Item {
94 name: "Launcher"
94 name: "Launcher"
95 when: windowShown && initTestCase.completed
95 when: windowShown && initTestCase.completed
96
96
97+ function cleanup() {
98+ mouseClick(root, root.width / 2, root.height / 2);
99+ revealer.waitUntilLauncherDisappears();
100+ }
101+
97 // Drag from the left edge of the screen rightwards and check that the launcher
102 // Drag from the left edge of the screen rightwards and check that the launcher
98 // appears (as if being dragged by the finger/pointer)
103 // appears (as if being dragged by the finger/pointer)
99 function test_dragLeftEdgeToRevealLauncherAndTapCenterToDismiss() {
104 function test_dragLeftEdgeToRevealLauncherAndTapCenterToDismiss() {
105+ revealer.waitUntilLauncherDisappears();
106+
100 var panel = findChild(launcher, "launcherPanel")
107 var panel = findChild(launcher, "launcherPanel")
101 verify(panel != undefined)
108 verify(panel != undefined)
102
109
@@ -117,10 +124,9 @@ Item {
117 corresponding desktop file. E.g. clicking on phone icon should yield
124 corresponding desktop file. E.g. clicking on phone icon should yield
118 launcherApplicationSelected("[...]dialer-app.desktop") */
125 launcherApplicationSelected("[...]dialer-app.desktop") */
119 function test_clickingOnAppIconCausesSignalEmission() {
126 function test_clickingOnAppIconCausesSignalEmission() {
127+ revealer.dragLauncherIntoView();
120 launcher.lastSelectedApplication = ""
128 launcher.lastSelectedApplication = ""
121
129
122− revealer.dragLauncherIntoView()
123−
124 var listView = findChild(launcher, "launcherListView");
130 var listView = findChild(launcher, "launcherListView");
125 listView.positionViewAtEnd();
131 listView.positionViewAtEnd();
126
132
@@ -184,6 +190,7 @@ Item {
184 }
190 }
185
191
186 function test_countEmblems() {
192 function test_countEmblems() {
193+ revealer.dragLauncherIntoView();
187 var launcherListView = findChild(launcher, "launcherListView");
194 var launcherListView = findChild(launcher, "launcherListView");
188 for (var i = 0; i < launcherListView.count; ++i) {
195 for (var i = 0; i < launcherListView.count; ++i) {
189 var delegate = findChild(launcherListView, "launcherDelegate" + i)
196 var delegate = findChild(launcherListView, "launcherDelegate" + i)
@@ -192,6 +199,7 @@ Item {
192 }
199 }
193
200
194 function test_progressOverlays() {
201 function test_progressOverlays() {
202+ revealer.dragLauncherIntoView();
195 var launcherListView = findChild(launcher, "launcherListView");
203 var launcherListView = findChild(launcher, "launcherListView");
196 for (var i = 0; i < launcherListView.count; ++i) {
204 for (var i = 0; i < launcherListView.count; ++i) {
197 var delegate = findChild(launcherListView, "launcherDelegate" + i)
205 var delegate = findChild(launcherListView, "launcherDelegate" + i)
@@ -200,6 +208,7 @@ Item {
200 }
208 }
201
209
202 function test_focusedHighlight() {
210 function test_focusedHighlight() {
211+ revealer.dragLauncherIntoView();
203 var launcherListView = findChild(launcher, "launcherListView");
212 var launcherListView = findChild(launcher, "launcherListView");
204 for (var i = 0; i < launcherListView.count; ++i) {
213 for (var i = 0; i < launcherListView.count; ++i) {
205 var delegate = findChild(launcherListView, "launcherDelegate" + i)
214 var delegate = findChild(launcherListView, "launcherDelegate" + i)
tests/qmltests/Panel/tst_ActiveCallHint.qml+1
@@ -95,6 +95,7 @@ Item {
95 function test_activeHint(data) {
95 function test_activeHint(data) {
96 if (data.dialer) {
96 if (data.dialer) {
97 var application = ApplicationManager.startApplication("dialer-app");
97 var application = ApplicationManager.startApplication("dialer-app");
98+ ApplicationManager.focusApplication("dialer-app");
98 tryCompare(ApplicationManager, "focusedApplicationId", "dialer-app");
99 tryCompare(ApplicationManager, "focusedApplicationId", "dialer-app");
99 tryCompare(application, "state", ApplicationInfo.Running);
100 tryCompare(application, "state", ApplicationInfo.Running);
100
101
tests/qmltests/Stages/tst_PhoneStage.qml+9−56
@@ -33,7 +33,6 @@ Item {
33 PhoneStage {
33 PhoneStage {
34 id: phoneStage
34 id: phoneStage
35 anchors { fill: parent; rightMargin: units.gu(30) }
35 anchors { fill: parent; rightMargin: units.gu(30) }
36− shown: true
37 dragAreaWidth: units.gu(2)
36 dragAreaWidth: units.gu(2)
38 }
37 }
39
38
@@ -45,7 +44,6 @@ Item {
45
44
46 Rectangle {
45 Rectangle {
47 anchors { fill: parent; leftMargin: phoneStage.width }
46 anchors { fill: parent; leftMargin: phoneStage.width }
48−// color: "blue"
49
47
50 Column {
48 Column {
51 anchors { left: parent.left; right: parent.right; top: parent.top; margins: units.gu(1) }
49 anchors { left: parent.left; right: parent.right; top: parent.top; margins: units.gu(1) }
@@ -59,7 +57,10 @@ Item {
59 }
57 }
60 Button {
58 Button {
61 anchors { left: parent.left; right: parent.right }
59 anchors { left: parent.left; right: parent.right }
62− text: "Add App"
60+ text: "Remove App"
61+ onClicked: {
62+ ApplicationManager.stopApplication(ApplicationManager.get(0).appId)
63+ }
63 }
64 }
64 }
65 }
65 }
66 }
@@ -74,11 +75,8 @@ Item {
74 for (var i = 0; i < count; i++) {
75 for (var i = 0; i < count; i++) {
75 var app = ApplicationManager.startApplication(ApplicationManager.availableApplications()[ApplicationManager.count])
76 var app = ApplicationManager.startApplication(ApplicationManager.availableApplications()[ApplicationManager.count])
76 tryCompare(app, "state", ApplicationInfoInterface.Running)
77 tryCompare(app, "state", ApplicationInfoInterface.Running)
77− // Fixme: Right now there is a timeout in the PhoneStage that displays a white splash
78+ var spreadView = findChild(phoneStage, "spreadView");
78− // screen rectangle when an app starts. This is because we don't yet have a way of
79+ tryCompare(spreadView, "contentX", -spreadView.shift);
79− // knowing when an app has finished launching. That workaround and this wait() should
80− // go away at some point and the app's state only changing to Running when ready for real.
81−// wait(1000)
82 waitForRendering(phoneStage)
80 waitForRendering(phoneStage)
83 }
81 }
84 }
82 }
@@ -114,8 +112,6 @@ Item {
114 true /* beginTouch */, true /* endTouch */, units.gu(10), 50);
112 true /* beginTouch */, true /* endTouch */, units.gu(10), 50);
115
113
116 tryCompare(ApplicationManager, "focusedApplicationId", activeApp.appId)
114 tryCompare(ApplicationManager, "focusedApplicationId", activeApp.appId)
117−
118− tryCompare(phoneStage, "painting", false);
119 }
115 }
120
116
121 function test_enterSpread_data() {
117 function test_enterSpread_data() {
@@ -139,7 +135,7 @@ Item {
139 var startX = phoneStage.width;
135 var startX = phoneStage.width;
140 var startY = phoneStage.height / 2;
136 var startY = phoneStage.height / 2;
141 var endY = startY;
137 var endY = startY;
142− var endX = spreadView.width - (spreadView.width * spreadView[data.positionMarker]) - data.offset - phoneStage.dragAreaWidth;
138+ var endX = spreadView.width - (spreadView.width * spreadView[data.positionMarker]) - data.offset;
143
139
144 var oldFocusedApp = ApplicationManager.get(0);
140 var oldFocusedApp = ApplicationManager.get(0);
145 var newFocusedApp = ApplicationManager.get(data.newFocusedIndex);
141 var newFocusedApp = ApplicationManager.get(data.newFocusedIndex);
@@ -165,7 +161,6 @@ Item {
165 mouseClick(app2, units.gu(1), units.gu(1));
161 mouseClick(app2, units.gu(1), units.gu(1));
166 }
162 }
167
163
168− tryCompare(phoneStage, "painting", false);
169 tryCompare(ApplicationManager, "focusedApplicationId", newFocusedApp.appId);
164 tryCompare(ApplicationManager, "focusedApplicationId", newFocusedApp.appId);
170 }
165 }
171
166
@@ -212,16 +207,6 @@ Item {
212 tryCompare(spreadView, "phase", 0);
207 tryCompare(spreadView, "phase", 0);
213 }
208 }
214
209
215− function test_animateAppStartup() {
216− compare(phoneStage.painting, false);
217− addApps(2);
218− tryCompare(phoneStage, "painting", true);
219− tryCompare(phoneStage, "painting", false);
220− addApps(1);
221− tryCompare(phoneStage, "painting", true);
222− tryCompare(phoneStage, "painting", false);
223− }
224−
225 function test_select_data() {
210 function test_select_data() {
226 return [
211 return [
227 { tag: "0", index: 0 },
212 { tag: "0", index: 0 },
@@ -240,41 +225,9 @@ Item {
240
225
241 phoneStage.select(selectedApp.appId);
226 phoneStage.select(selectedApp.appId);
242
227
243− tryCompare(phoneStage, "painting", false);
228+ tryCompare(spreadView, "contentX", -spreadView.shift);
244− compare(ApplicationManager.focusedApplicationId, selectedApp.appId);
245− }
246
229
247− function test_fullscreenMode() {
230+ compare(ApplicationManager.focusedApplicationId, selectedApp.appId);
248− var fullscreenApp = null;
249− var normalApp = null;
250−
251− for (var i = 0; i < 5; i++) {
252− addApps(1);
253− var newApp = ApplicationManager.get(0);
254− tryCompare(phoneStage, "fullscreen", newApp.fullscreen);
255− if (newApp.fullscreen && fullscreenApp == null) {
256− fullscreenApp = newApp;
257− } else if (!newApp.fullscreen && normalApp == null){
258− normalApp = newApp;
259− }
260− }
261− verify(fullscreenApp != null); // Can't continue the test without having a fullscreen app
262− verify(normalApp != null); // Can't continue the test without having a non-fullscreen app
263−
264− // Select a normal app
265− goToSpread();
266− phoneStage.select(normalApp.appId);
267− tryCompare(phoneStage, "fullscreen", false);
268−
269− // Select a fullscreen app
270− goToSpread();
271− phoneStage.select(fullscreenApp.appId);
272− tryCompare(phoneStage, "fullscreen", true);
273−
274− // Select a normal app
275− goToSpread();
276− phoneStage.select(normalApp.appId);
277− tryCompare(phoneStage, "fullscreen", false);
278 }
231 }
279
232
280 function cleanup() {
233 function cleanup() {
tests/qmltests/tst_Shell.qml+108−7
@@ -236,6 +236,7 @@ Item {
236
236
237 // wait until the animation has finished
237 // wait until the animation has finished
238 tryCompare(greeter, "showProgress", 0);
238 tryCompare(greeter, "showProgress", 0);
239+ waitForRendering(greeter);
239 }
240 }
240
241
241 /*
242 /*
@@ -358,6 +359,58 @@ Item {
358 verify(itemIsOnScreen(runningApplicationsGrid));
359 verify(itemIsOnScreen(runningApplicationsGrid));
359 }
360 }
360
361
362+ function test_showInputMethod() {
363+ var item = findChild(shell, "inputMethod");
364+ var surface = SurfaceManager.inputMethodSurface();
365+
366+ surface.setState(MirSurfaceItem.Minimized);
367+ tryCompare(item, "visible", false);
368+
369+ surface.setState(MirSurfaceItem.Restored);
370+ tryCompare(item, "visible", true);
371+
372+ surface.setState(MirSurfaceItem.Minimized);
373+ tryCompare(item, "visible", false);
374+
375+ surface.setState(MirSurfaceItem.Maximized);
376+ tryCompare(item, "visible", true);
377+
378+ surface.setState(MirSurfaceItem.Minimized);
379+ tryCompare(item, "visible", false);
380+ }
381+
382+ function test_surfaceLosesFocusWhilePanelIsOpen() {
383+ var app = ApplicationManager.startApplication("dialer-app");
384+ // wait until the app is fully loaded (ie, real surface replaces splash screen)
385+ tryCompareFunction(function() { return app.surface != null }, true);
386+
387+ tryCompare(app.surface, "focus", true);
388+
389+ // Drag the indicators panel half-open
390+ var touchX = shell.width / 2;
391+ var indicators = findChild(shell, "indicators");
392+ touchFlick(indicators,
393+ touchX /* fromX */, indicators.panelHeight * 0.5 /* fromY */,
394+ touchX /* toX */, shell.height * 0.5 /* toY */,
395+ true /* beginTouch */, false /* endTouch */);
396+ verify(indicators.partiallyOpened);
397+
398+ tryCompare(app.surface, "focus", false);
399+
400+ // And finish getting it open
401+ touchFlick(indicators,
402+ touchX /* fromX */, shell.height * 0.5 /* fromY */,
403+ touchX /* toX */, shell.height * 0.9 /* toY */,
404+ false /* beginTouch */, true /* endTouch */);
405+ tryCompare(indicators, "fullyOpened", true);
406+
407+ tryCompare(app.surface, "focus", false);
408+
409+ dragToCloseIndicatorsPanel();
410+
411+ tryCompare(app.surface, "focus", true);
412+ }
413+
361 // Wait for the whole UI to settle down
414 // Wait for the whole UI to settle down
362 function waitForUIToSettle() {
415 function waitForUIToSettle() {
363 waitUntilApplicationWindowIsFullyHidden();
416 waitUntilApplicationWindowIsFullyHidden();
@@ -365,6 +418,18 @@ Item {
365 tryCompare(dashContentList, "moving", false);
418 tryCompare(dashContentList, "moving", false);
366 }
419 }
367
420
421+ function dragToCloseIndicatorsPanel() {
422+ var indicators = findChild(shell, "indicators");
423+
424+ var touchStartX = shell.width / 2;
425+ var touchStartY = shell.height - (indicators.panelHeight * 0.5);
426+ touchFlick(shell,
427+ touchStartX, touchStartY,
428+ touchStartX, shell.height * 0.1);
429+
430+ tryCompare(indicators, "fullyClosed", true);
431+ }
432+
368 function dragLauncherIntoView() {
433 function dragLauncherIntoView() {
369 var launcherPanel = findChild(shell, "launcherPanel");
434 var launcherPanel = findChild(shell, "launcherPanel");
370 verify(launcherPanel.x = - launcherPanel.width);
435 verify(launcherPanel.x = - launcherPanel.width);
@@ -489,7 +554,7 @@ Item {
489 {tag: "under greeter", greeter: true, app: false, launcher: false, indicators: false, expectedShown: false},
554 {tag: "under greeter", greeter: true, app: false, launcher: false, indicators: false, expectedShown: false},
490 {tag: "under app", greeter: false, app: true, launcher: false, indicators: false, expectedShown: false},
555 {tag: "under app", greeter: false, app: true, launcher: false, indicators: false, expectedShown: false},
491 {tag: "under launcher", greeter: false, app: false, launcher: true, indicators: false, expectedShown: true},
556 {tag: "under launcher", greeter: false, app: false, launcher: true, indicators: false, expectedShown: true},
492− {tag: "under indicators", greeter: false, app: false, launcher: false, indicators: true, expectedShown: true},
557+ {tag: "under indicators", greeter: false, app: false, launcher: false, indicators: true, expectedShown: false},
493 ]
558 ]
494 }
559 }
495
560
@@ -519,16 +584,39 @@ Item {
519 }
584 }
520
585
521 function test_focusRequestedHidesGreeter() {
586 function test_focusRequestedHidesGreeter() {
522− var greeter = findChild(shell, "greeter")
587+ var greeter = findChild(shell, "greeter");
523
588
524− greeter.show()
589+ var app = ApplicationManager.startApplication("dialer-app");
525− tryCompare(greeter, "showProgress", 1)
590+ // wait until the app is fully loaded (ie, real surface replaces splash screen)
591+ tryCompareFunction(function() { return app.surface != null }, true);
526
592
593+ // Minimize the application we just launched
594+ swipeFromLeftEdge(units.gu(27));
595+
596+ // Wait for the whole UI to settle down
597+ waitUntilApplicationWindowIsFullyHidden();
598+
599+ greeter.show();
600+ tryCompare(greeter, "showProgress", 1);
601+
602+ // The main point of this test
527− ApplicationManager.focusRequested("notes-app")
603+ ApplicationManager.requestFocusApplication("dialer-app");
528− tryCompare(greeter, "showProgress", 0)
604+ tryCompare(greeter, "showProgress", 0);
529− waitUntilApplicationWindowIsFullyVisible()
605+ waitForRendering(greeter);
530 }
606 }
531
607
608+ function test_focusRequestedHidesIndicators() {
609+ var indicators = findChild(shell, "indicators");
610+
611+ showIndicators();
612+
613+ ApplicationManager.startApplication("camera-app");
614+ tryCompare(ApplicationManager, "count", 1);
615+
616+ tryCompare(indicators, "fullyClosed", true);
617+ }
618+
619+
532 function test_showGreeterDBusCall() {
620 function test_showGreeterDBusCall() {
533 var greeter = findChild(shell, "greeter")
621 var greeter = findChild(shell, "greeter")
534 tryCompare(greeter, "showProgress", 0)
622 tryCompare(greeter, "showProgress", 0)
@@ -547,5 +635,18 @@ Item {
547 swipeAwayGreeter()
635 swipeAwayGreeter()
548 tryCompare(sessionSpy, "count", 1)
636 tryCompare(sessionSpy, "count", 1)
549 }
637 }
638+
639+ function test_fullscreen() {
640+ var panel = findChild(shell, "panel");
641+ compare(panel.fullscreenMode, false);
642+ ApplicationManager.startApplication("camera-app");
643+ tryCompare(panel, "fullscreenMode", true);
644+ ApplicationManager.startApplication("gallery-app");
645+ tryCompare(panel, "fullscreenMode", false);
646+ ApplicationManager.requestFocusApplication("camera-app");
647+ tryCompare(panel, "fullscreenMode", true);
648+ ApplicationManager.requestFocusApplication("gallery-app");
649+ tryCompare(panel, "fullscreenMode", false);
650+ }
550 }
651 }
551}
652}