on xenial help sign in
Merge from dialer-above
e7c4f0fMichael Terry
.bazaar/plugins/makecheck_unity_phablet.py+16−8
@@ -1,5 +1,5 @@
1#!/usr/bin/python
1#!/usr/bin/python
2−# Copyright 2013 Canonical Ltd.
2+# Copyright 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 Lesser General Public License as published by
5# it under the terms of the GNU Lesser General Public License as published by
@@ -13,11 +13,15 @@
13# You should have received a copy of the GNU Lesser General Public License
13# You should have received a copy of the GNU Lesser General Public License
14# along with this program. If not, see <http://www.gnu.org/licenses/>.
14# along with this program. If not, see <http://www.gnu.org/licenses/>.
15
15
16−import os, subprocess
16+import os
17+import subprocess
17−from bzrlib import branch, errors
18+from bzrlib import branch
18−from bzrlib.urlutils import dirname, local_path_from_url
19+from bzrlib.urlutils import local_path_from_url
19
20
21+
22+def execute_makecheck(
23+ local_branch, master_branch, old_revision_number, old_revision_id,
20−def execute_makecheck(local_branch, master_branch, old_revision_number, old_revision_id, future_revision_number, future_revision_id, tree_delta, future_tree):
24+ future_revision_number, future_revision_id, tree_delta, future_tree):
21 if not master_branch.basis_tree().has_filename("qml/Shell.qml"):
25 if not master_branch.basis_tree().has_filename("qml/Shell.qml"):
22 return
26 return
23
27
@@ -27,7 +31,9 @@ def execute_makecheck(local_branch, master_branch, old_revision_number, old_revi
27 os.environ['CTEST_OUTPUT_ON_FAILURE'] = "1"
31 os.environ['CTEST_OUTPUT_ON_FAILURE'] = "1"
28 if (subprocess.call("make -C builddir test", shell=True) != 0):
32 if (subprocess.call("make -C builddir test", shell=True) != 0):
29
33
34+ print("\n\n*** Warning ***\n\n"
30− print("\n\n*** Warning ***\n\nBasic tests failed. This commit will not pass continuous integration.")
35+ "Basic tests failed. This commit will not pass continuous "
36+ "integration.")
31
37
32 branch = local_branch or master_branch
38 branch = local_branch or master_branch
33 revision = branch.repository.get_revision(future_revision_id)
39 revision = branch.repository.get_revision(future_revision_id)
@@ -36,8 +42,10 @@ def execute_makecheck(local_branch, master_branch, old_revision_number, old_revi
36 msg_file.close()
42 msg_file.close()
37
43
38 print("\n\nSaved commit message to $SRC_DIR/message.txt.")
44 print("\n\nSaved commit message to $SRC_DIR/message.txt.")
39− print("You can uncommit this revision, fix the tests and reuse your message running:\n\nbzr commit -F message.txt\n\n")
45+ print("You can uncommit this revision, fix the tests and reuse your "
46+ "message running:\n\nbzr commit -F message.txt\n\n")
40 elif os.path.isfile("message.txt"):
47 elif os.path.isfile("message.txt"):
41 os.remove("message.txt")
48 os.remove("message.txt")
42
49
50+branch.Branch.hooks.install_named_hook(
43−branch.Branch.hooks.install_named_hook('pre_commit', execute_makecheck, 'make check pre-commit')
51+ 'pre_commit', execute_makecheck, 'make check pre-commit')
build.sh+2
@@ -42,11 +42,13 @@ install_dependencies() {
42 equivs \
42 equivs \
43 gsettings-desktop-schemas \
43 gsettings-desktop-schemas \
44 gsettings-ubuntu-schemas \
44 gsettings-ubuntu-schemas \
45+ pay-service \
45 qmenumodel-qml \
46 qmenumodel-qml \
46 qml-module-qtquick-xmllistmodel \
47 qml-module-qtquick-xmllistmodel \
47 qtdeclarative5-gsettings1.0 \
48 qtdeclarative5-gsettings1.0 \
48 qtdeclarative5-ubuntu-ui-toolkit-plugin \
49 qtdeclarative5-ubuntu-ui-toolkit-plugin \
49 qtdeclarative5-ubuntu-settings-components \
50 qtdeclarative5-ubuntu-settings-components \
51+ qtdeclarative5-ubuntu-telephony0.1 \
50 qtdeclarative5-ubuntu-thumbnailer0.1 \
52 qtdeclarative5-ubuntu-thumbnailer0.1 \
51 unity-notifications-impl \
53 unity-notifications-impl \
52 ubuntu-mobile-icons \
54 ubuntu-mobile-icons \
cmake/modules/QmlPlugins.cmake+29−22
@@ -12,6 +12,12 @@ if(NOT TARGET qmlplugindump)
12 set_target_properties(qmlplugindump PROPERTIES IMPORTED_LOCATION ${qmlplugindump_exe})
12 set_target_properties(qmlplugindump PROPERTIES IMPORTED_LOCATION ${qmlplugindump_exe})
13endif()
13endif()
14
14
15+#
16+# A custom target for building the qmltypes files manually.
17+#
18+if (NOT TARGET qmltypes)
19+ add_custom_target(qmltypes)
20+endif()
15
21
16# Creates a target for copying resource files into build dir and optionally installing them.
22# Creates a target for copying resource files into build dir and optionally installing them.
17#
23#
@@ -51,6 +57,7 @@ macro(export_qmlfiles PLUGIN PATH)
51 ${QMLFILES_SEARCH_PATH}/*.png
57 ${QMLFILES_SEARCH_PATH}/*.png
52 ${QMLFILES_SEARCH_PATH}/*.sci
58 ${QMLFILES_SEARCH_PATH}/*.sci
53 ${QMLFILES_SEARCH_PATH}/*.svg
59 ${QMLFILES_SEARCH_PATH}/*.svg
60+ ${QMLFILES_SEARCH_PATH}/*.qmltypes
54 ${QMLFILES_SEARCH_PATH}/qmldir
61 ${QMLFILES_SEARCH_PATH}/qmldir
55 )
62 )
56
63
@@ -69,14 +76,14 @@ macro(export_qmlfiles PLUGIN PATH)
69 DESTINATION ${QMLFILES_DESTINATION}/${PATH}
76 DESTINATION ${QMLFILES_DESTINATION}/${PATH}
70 )
77 )
71 endif()
78 endif()
72−endmacro(export_qmlfiles)
79+endmacro()
73
80
74
81
75−# Creates a target for generating the typeinfo file for a QML plugin and optionally installs it
82+# Creates a target for generating the typeinfo file for a QML plugin and/or installs the plugin
76−# and additional targets.
83+# targets.
77#
84#
78# Files will be copied into ${BINARY_DIR}/${path} or ${CMAKE_CURRENT_BINARY_DIR} and installed
85# Files will be copied into ${BINARY_DIR}/${path} or ${CMAKE_CURRENT_BINARY_DIR} and installed
79−# into ${DESTINATION}/${path}. If you don't pass BINARY_DIR, it's assumed that current source
86+# into ${DESTINATION}/${path}. If you don't pass BINARY_DIR, it's assumed that current source
80# path ends with ${path}.
87# path ends with ${path}.
81#
88#
82# The generated file will be named after the last segment of the plugin name, e.g. Foo.qmltypes.
89# The generated file will be named after the last segment of the plugin name, e.g. Foo.qmltypes.
@@ -87,15 +94,18 @@ endmacro(export_qmlfiles)
87# [TARGET_PREFIX string] # Will be prefixed to the target name
94# [TARGET_PREFIX string] # Will be prefixed to the target name
88# [ENVIRONMENT string] # Will be added to qmlplugindump's env
95# [ENVIRONMENT string] # Will be added to qmlplugindump's env
89# [TARGETS target1 [target2 ...]] # Targets to depend on and install (e.g. the plugin shared object)
96# [TARGETS target1 [target2 ...]] # Targets to depend on and install (e.g. the plugin shared object)
97+# [NO_TYPES] # Do not create the qmltypes target
90# )
98# )
91#
99#
92# Created target:
100# Created target:
93−# - ${TARGET_PREFIX}${plugin}-qmltypes - Generates the qmltypes file in the binary dir.
101+# - ${TARGET_PREFIX}${plugin}-qmltypes - Generates the qmltypes file in the source dir.
102+# It will be made a dependency of the "qmltypes" target.
94
103
95macro(export_qmlplugin PLUGIN VERSION PATH)
104macro(export_qmlplugin PLUGIN VERSION PATH)
105+ set(options NO_TYPES)
96 set(single BINARY_DIR DESTINATION TARGET_PREFIX ENVIRONMENT)
106 set(single BINARY_DIR DESTINATION TARGET_PREFIX ENVIRONMENT)
97 set(multi TARGETS)
107 set(multi TARGETS)
98− cmake_parse_arguments(QMLPLUGIN "" "${single}" "${multi}" ${ARGN})
108+ cmake_parse_arguments(QMLPLUGIN "${options}" "${single}" "${multi}" ${ARGN})
99
109
100 get_target_property(qmlplugindump_executable qmlplugindump LOCATION)
110 get_target_property(qmlplugindump_executable qmlplugindump LOCATION)
101
111
@@ -103,29 +113,26 @@ macro(export_qmlplugin PLUGIN VERSION PATH)
103 set(qmlplugin_dir ${QMLPLUGIN_BINARY_DIR}/${PATH})
113 set(qmlplugin_dir ${QMLPLUGIN_BINARY_DIR}/${PATH})
104 else()
114 else()
105 # Find import path to point qmlplugindump at
115 # Find import path to point qmlplugindump at
106− string(REGEX REPLACE "${PATH}$" "" QMLPLUGIN_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
116+ string(REGEX REPLACE "/${PATH}$" "" QMLPLUGIN_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
107 set(qmlplugin_dir ${CMAKE_CURRENT_BINARY_DIR})
117 set(qmlplugin_dir ${CMAKE_CURRENT_BINARY_DIR})
108 endif()
118 endif()
109
119
120+ if(NOT QMLPLUGIN_NO_TYPES)
121+ # Relative path for the module
122+ string(REPLACE "${CMAKE_BINARY_DIR}/" "" QMLPLUGIN_MODULE_DIR "${QMLPLUGIN_BINARY_DIR}")
123+
110− # Find the last segment of the plugin name to use as qmltypes basename
124+ # Find the last segment of the plugin name to use as qmltypes basename
111− string(REGEX MATCH "[^.]+$" plugin_suffix ${PLUGIN})
125+ string(REGEX MATCH "[^.]+$" plugin_suffix ${PLUGIN})
112− set(target_prefix ${QMLPLUGIN_TARGET_PREFIX}${PLUGIN})
126+ set(target_prefix ${QMLPLUGIN_TARGET_PREFIX}${PLUGIN})
113− set(qmltypes_path ${qmlplugin_dir}/${plugin_suffix}.qmltypes)
127+ set(qmltypes_path ${CMAKE_CURRENT_SOURCE_DIR}/${plugin_suffix}.qmltypes)
114
128
115− # Only generate typeinfo if not cross compiling
116− if(NOT CMAKE_CROSSCOMPILING)
117− add_custom_target(${target_prefix}-qmltypes ALL
129+ add_custom_target(${target_prefix}-qmltypes
118 COMMAND env ${QMLPLUGIN_ENVIRONMENT} ${qmlplugindump_executable} -notrelocatable
130 COMMAND env ${QMLPLUGIN_ENVIRONMENT} ${qmlplugindump_executable} -notrelocatable
119− ${PLUGIN} ${VERSION} ${QMLPLUGIN_BINARY_DIR} > ${qmltypes_path}
131+ ${PLUGIN} ${VERSION} ${QMLPLUGIN_MODULE_DIR} > ${qmltypes_path}
132+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
120 )
133 )
121 add_dependencies(${target_prefix}-qmltypes ${target_prefix}-qmlfiles ${QMLPLUGIN_TARGETS})
134 add_dependencies(${target_prefix}-qmltypes ${target_prefix}-qmlfiles ${QMLPLUGIN_TARGETS})
122−
135+ add_dependencies(qmltypes ${target_prefix}-qmltypes)
123− if (QMLPLUGIN_DESTINATION)
124− # Install the typeinfo file
125− install(FILES ${qmltypes_path}
126− DESTINATION ${QMLPLUGIN_DESTINATION}/${PATH}
127− )
128− endif()
129 endif()
136 endif()
130
137
131 set_target_properties(${QMLPLUGIN_TARGETS} PROPERTIES
138 set_target_properties(${QMLPLUGIN_TARGETS} PROPERTIES
cmake/modules/autopilot.cmake+2−2
@@ -2,7 +2,7 @@ add_custom_target(autopilot)
2
2
3function(declare_autopilot_test TEST_NAME TEST_SUITE WORKING_DIR)
3function(declare_autopilot_test TEST_NAME TEST_SUITE WORKING_DIR)
4 add_custom_target(autopilot-${TEST_NAME}
4 add_custom_target(autopilot-${TEST_NAME}
5− COMMAND LANG=C UBUNTU_ICON_THEME=ubuntu-mobile QML2_IMPORT_PATH=${SHELL_INSTALL_QML}/mocks python3 -m autopilot.run run ${TEST_SUITE}
5+ COMMAND LANG=C QML2_IMPORT_PATH=${SHELL_INSTALL_QML}/mocks python3 -m autopilot.run run ${TEST_SUITE}
6 WORKING_DIRECTORY ${WORKING_DIR}
6 WORKING_DIRECTORY ${WORKING_DIR}
7 DEPENDS fake_install
7 DEPENDS fake_install
8 )
8 )
@@ -14,7 +14,7 @@ function(declare_autopilot_test TEST_NAME TEST_SUITE WORKING_DIR)
14 add_dependencies(autopilot autopilot-${TEST_NAME})
14 add_dependencies(autopilot autopilot-${TEST_NAME})
15
15
16 add_custom_target(autopilot2-${TEST_NAME}
16 add_custom_target(autopilot2-${TEST_NAME}
17− COMMAND LANG=C UBUNTU_ICON_THEME=ubuntu-mobile QML2_IMPORT_PATH=${SHELL_INSTALL_QML}/mocks python2 -m autopilot.run run ${TEST_SUITE}
17+ COMMAND LANG=C QML2_IMPORT_PATH=${SHELL_INSTALL_QML}/mocks python2 -m autopilot.run run ${TEST_SUITE}
18 WORKING_DIRECTORY ${WORKING_DIR}
18 WORKING_DIRECTORY ${WORKING_DIR}
19 DEPENDS fake_install
19 DEPENDS fake_install
20 )
20 )
debian/changelog+148
@@ -1,3 +1,151 @@
1+unity8 (7.90+14.10.20140709.2-0ubuntu1) utopic; urgency=low
2+
3+ [ Michal Hruby ]
4+ * Fix FTBFS when using latest unity-api.
5+
6+ [ Michał Sawicz ]
7+ * Refactor carousel item activation.
8+ * Refactor ScopeItem into GenericScopeView.
9+ * Add initial support for scope customizations.
10+ * Make rating stars in PreviewReviewDisplay.qml non-interactive. (LP:
11+ #1337508)
12+
13+ [ Nick Dedekind ]
14+ * Added active call hint A hint is displayed in the indicator panel
15+ when an call is active on the Telephony Serivce
16+
17+ [ Albert Astals ]
18+ * We need to boostrap height also when we have 1 item ^_^ (LP:
19+ #1337408)
20+ * Add initial support for scope customizations.
21+ * CardCreator: Give a correct implicitHeight if we only have art The
22+ hasSubtitle change is really unrelated and not needed here, just
23+ sneaking it in to not create yet another review. (LP: #1330899)
24+ * Fake Scopes Plugin: Register PreviewModelInterface
25+
26+ [ Michael Zanetti ]
27+ * make the launcher's drag'n'drop indicator more prominent (LP:
28+ #1332042)
29+ * make launcher items live having them non-live is not really required
30+ and reveals an issue in combination with UbuntuShape (LP: #1302761)
31+ * Fade out launcher in place instead of moving it to the left on long
32+ left edge swipes. (LP: #1332096)
33+ * update launcher icon glow as requested by design (LP: #1336725)
34+ * update header in dash to use the new header from the SDK (LP:
35+ #1335491)
36+ * fix testPreview with larger GRID_UNIT_PX values
37+ * clip the corner of pinned icons in the launcher as per new design
38+ * update launcher background according to latest design (LP: #1336314)
39+ * Update Launcher's home button design according to new spec. (LP:
40+ #1329331)
41+
42+ [ CI bot ]
43+ * make launcher items live having them non-live is not really required
44+ and reveals an issue in combination with UbuntuShape (LP: #1302761)
45+
46+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Wed, 09 Jul 2014 19:46:11 +0000
47+
48+unity8 (7.90+14.10.20140707-0ubuntu1) utopic; urgency=low
49+
50+ [ Nick Dedekind ]
51+ * Added support for TransferMenu
52+
53+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Mon, 07 Jul 2014 11:40:59 +0000
54+
55+unity8 (7.90+14.10.20140703.1-0ubuntu1) utopic; urgency=low
56+
57+ [ Michał Sawicz ]
58+ * Initial code for a payment button widget, to handle purchasing apps
59+ from the click scope.
60+
61+ [ Nick Dedekind ]
62+ * Moved [Message]MenuItemFacotory from Unity.Indicators plugin to qml
63+ folder.
64+
65+ [ Albert Astals ]
66+ * EasingCurve: Initialize members
67+ * Fix valgrind warning by not emitting reset on model destructor That
68+ won't be supported until Qt 5.4 More info at https://bugreports.qt-
69+ project.org/browse/QTBUG-39780 Warning was ==16693== Invalid read of
70+ size 8 ==16693== at 0x72B19A0: QQmlContext::isValid() const
71+ (qqmlcontext.cpp:231) ==16693== by 0x736C82B:
72+ QQmlDelegateModelPrivate::emitChanges() (qqmldelegatemodel.cpp:1412)
73+ ==16693== by 0x7372AE6: QQmlDelegateModel::_q_modelReset()
74+ (qqmldelegatemodel.cpp:1463) ==16693== by 0x7397224:
75+ QQmlDelegateModel::qt_static_metacall(QObject*, QMetaObject::Call,
76+ int, void**) (moc_qqmldelegatemodel_p.cpp:196) ==16693== by
77+ 0x739769E: QQmlDelegateModel::qt_metacall(QMetaObject::Call, int,
78+ void**) (moc_qqmldelegatemodel_p.cpp:292) ==16693== by 0x66379CC:
79+ QMetaObject::activate(QObject*, int, int, void**) (in
80+ /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.3.0) ==16693== by
81+ 0x65AEEFD: QAbstractItemModel::endResetModel() (in /usr/lib/x86_64-
82+ linux-gnu/libQt5Core.so.5.3.0) ==16693== by 0x23461EFD:
83+ FakeIndicatorsModel::unload() (fakeindicatorsmodel.cpp:53) ==16693==
84+ by 0x23461E13: FakeIndicatorsModel::~FakeIndicatorsModel()
85+ (fakeindicatorsmodel.cpp:34) ==16693== by 0x2345C073:
86+ QQmlPrivate::QQmlElement<FakeIndicatorsModel>::~QQmlElement() (in
87+ /home/tsdgeos_work/phablet/unity8/investigate_test_shell_crash/build
88+ dir/tests/mocks/Unity/Indicators/libIndicatorsFakeQml.so) ==16693==
89+ by 0x2345C0A3:
90+ QQmlPrivate::QQmlElement<FakeIndicatorsModel>::~QQmlElement()
91+ (qqmlprivate.h:106) ==16693== by 0x663636B:
92+ QObjectPrivate::deleteChildren() (in /usr/lib/x86_64-linux-
93+ gnu/libQt5Core.so.5.3.0) ==16693== Address 0x1862d448 is 8 bytes
94+ inside a block of size 16 free'd ==16693== at 0x4C2C2BC: operator
95+ delete(void*) (vg_replace_malloc.c:503) ==16693== by 0x72B21B8:
96+ QQmlContextData::destroy() (qqmlcontext.cpp:647) ==16693== by
97+ 0x7293458: QQmlPrivate::qdeclarativeelement_destructor(QObject*)
98+ (qqmlengine.cpp:612) ==16693== by 0x6C0CADD:
99+ QQmlPrivate::QQmlElement<QQuickItem>::~QQmlElement()
100+ (qqmlprivate.h:105) ==16693== by 0x663636B:
101+ QObjectPrivate::deleteChildren() (in /usr/lib/x86_64-linux-
102+ gnu/libQt5Core.so.5.3.0) ==16693== by 0x663F0EB: QObject::~QObject()
103+ (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.3.0) ==16693== by
104+ 0x6BF64B5: QQuickItem::~QQuickItem() (qquickitem.cpp:2064) ==16693==
105+ by 0x6C0CAE5: QQmlPrivate::QQmlElement<QQuickItem>::~QQmlElement()
106+ (qqmlprivate.h:106) ==16693== by 0x663636B:
107+ QObjectPrivate::deleteChildren() (in /usr/lib/x86_64-linux-
108+ gnu/libQt5Core.so.5.3.0) ==16693== by 0x663F0EB: QObject::~QObject()
109+ (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.3.0) ==16693== by
110+ 0x6BF64B5: QQuickItem::~QQuickItem() (qquickitem.cpp:2064) ==16693==
111+ by 0x6C0CAE5: QQmlPrivate::QQmlElement<QQuickItem>::~QQmlElement()
112+ (qqmlprivate.h:106) (LP: #1332598)
113+
114+ [ Michael Zanetti ]
115+ * drop launcher item spacing (LP: #1332022)
116+ * change wording in launcher quicklist (LP: #1332035)
117+
118+ [ Alejandro J. Cura ]
119+ * Initial code for a payment button widget, to handle purchasing apps
120+ from the click scope.
121+
122+ [ Rodney Dawes ]
123+ * Initial code for a payment button widget, to handle purchasing apps
124+ from the click scope.
125+
126+ [ Renato Araujo Oliveira Filho ]
127+ * Create IndicatorsLight.qml component used to control indicator led.
128+ A blue led will pulse if the message indicator is blue and screen is
129+ off.
130+
131+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Thu, 03 Jul 2014 14:47:46 +0000
132+
133+unity8 (7.90+14.10.20140701.2-0ubuntu2) utopic; urgency=medium
134+
135+ * debian/control:
136+ list qtdeclarative5-ubuntu-ui-toolkit-plugin-gles as an alternative
137+ choice, since provides are not versionned, should restore installability
138+ on amd64 and i386
139+
140+ -- Sebastien Bacher <seb128@ubuntu.com> Thu, 03 Jul 2014 13:26:38 +0200
141+
142+unity8 (7.90+14.10.20140701.2-0ubuntu1) utopic; urgency=medium
143+
144+ [ Michał Sawicz ]
145+ * Adapt to suru theme.
146+
147+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Tue, 01 Jul 2014 15:10:35 +0000
148+
1unity8 (7.89+14.10.20140627-0ubuntu1) utopic; urgency=low
149unity8 (7.89+14.10.20140627-0ubuntu1) utopic; urgency=low
2
150
3 [ Michael Terry ]
151 [ Michael Terry ]
debian/control+11−6
@@ -13,12 +13,14 @@ Build-Depends: cmake,
13 libgles2-mesa-dev[armhf],
13 libgles2-mesa-dev[armhf],
14 libglib2.0-dev,
14 libglib2.0-dev,
15 libgsettings-qt-dev,
15 libgsettings-qt-dev,
16+ libhardware-dev,
16 libhud-client2-dev,
17 libhud-client2-dev,
17 libpam0g-dev,
18 libpam0g-dev,
19+ libpay1-dev,
18 libpulse-dev,
20 libpulse-dev,
19 libqmenumodel-dev (>= 0.2.7),
21 libqmenumodel-dev (>= 0.2.7),
20 libqt5xmlpatterns5-dev,
22 libqt5xmlpatterns5-dev,
21− libunity-api-dev (>= 7.83),
23+ libunity-api-dev (>= 7.85),
22 libunity-mir-dev,
24 libunity-mir-dev,
23 libusermetricsoutput1-dev,
25 libusermetricsoutput1-dev,
24 libxcb1-dev,
26 libxcb1-dev,
@@ -38,8 +40,8 @@ Build-Depends: cmake,
38 qtdeclarative5-dev-tools,
40 qtdeclarative5-dev-tools,
39 qtdeclarative5-private-dev (>= 5.2.1),
41 qtdeclarative5-private-dev (>= 5.2.1),
40 qtdeclarative5-qtmultimedia-plugin,
42 qtdeclarative5-qtmultimedia-plugin,
41− qtdeclarative5-ubuntu-settings-components,
43+ qtdeclarative5-ubuntu-settings-components (>= 0.3),
42− qtdeclarative5-ubuntu-ui-toolkit-plugin,
44+ qtdeclarative5-ubuntu-ui-toolkit-plugin (>= 0.1.49) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles (>= 0.1.49),
43 ttf-ubuntu-font-family,
45 ttf-ubuntu-font-family,
44Standards-Version: 3.9.4
46Standards-Version: 3.9.4
45Homepage: http://launchpad.net/unity
47Homepage: http://launchpad.net/unity
@@ -52,7 +54,7 @@ Vcs-Browser: https://bazaar.launchpad.net/~unity-team/unity8/trunk
52Package: indicators-client
54Package: indicators-client
53Architecture: amd64 armhf i386
55Architecture: amd64 armhf i386
54Depends: qmenumodel-qml (>= 0.2.7),
56Depends: qmenumodel-qml (>= 0.2.7),
55− qtdeclarative5-ubuntu-ui-toolkit-plugin,
57+ qtdeclarative5-ubuntu-ui-toolkit-plugin (>= 0.1.49) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles (>= 0.1.49),
56 unity8 (= ${binary:Version}),
58 unity8 (= ${binary:Version}),
57 ${misc:Depends},
59 ${misc:Depends},
58 ${shlibs:Depends},
60 ${shlibs:Depends},
@@ -79,7 +81,8 @@ Depends: gsettings-desktop-schemas,
79 qmenumodel-qml (>= 0.2.7),
81 qmenumodel-qml (>= 0.2.7),
80 qml-module-qtquick-xmllistmodel,
82 qml-module-qtquick-xmllistmodel,
81 qtdeclarative5-gsettings1.0,
83 qtdeclarative5-gsettings1.0,
82− qtdeclarative5-ubuntu-settings-components,
84+ qtdeclarative5-ubuntu-settings-components (>= 0.3),
85+ qtdeclarative5-ubuntu-telephony0.1,
83 unity-launcher-impl-3,
86 unity-launcher-impl-3,
84 unity8-common (= ${source:Version}),
87 unity8-common (= ${source:Version}),
85 unity8-private (= ${binary:Version}),
88 unity8-private (= ${binary:Version}),
@@ -100,7 +103,7 @@ Description: Unity 8 shell
100Package: unity8-common
103Package: unity8-common
101Architecture: all
104Architecture: all
102Depends: qtdeclarative5-ubuntu-thumbnailer0.1 | ubuntu-thumbnailer-impl,
105Depends: qtdeclarative5-ubuntu-thumbnailer0.1 | ubuntu-thumbnailer-impl,
103− qtdeclarative5-ubuntu-ui-toolkit-plugin,
106+ qtdeclarative5-ubuntu-ui-toolkit-plugin (>= 0.1.49) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles (>= 0.1.49),
104 qtdeclarative5-unity-notifications-plugin | unity-notifications-impl,
107 qtdeclarative5-unity-notifications-plugin | unity-notifications-impl,
105 ubuntu-thumbnailer-impl-0,
108 ubuntu-thumbnailer-impl-0,
106 unity-application-impl-2,
109 unity-application-impl-2,
@@ -160,7 +163,9 @@ Architecture: any
160Multi-Arch: same
163Multi-Arch: same
161Pre-Depends: ${misc:Pre-Depends},
164Pre-Depends: ${misc:Pre-Depends},
162Depends: gsettings-ubuntu-schemas,
165Depends: gsettings-ubuntu-schemas,
166+ libhardware2,
163 libunity-core-6.0-9,
167 libunity-core-6.0-9,
168+ pay-service,
164 ${misc:Depends},
169 ${misc:Depends},
165 ${shlibs:Depends},
170 ${shlibs:Depends},
166Provides: unity-launcher-impl,
171Provides: unity-launcher-impl,
debian/unity8-private.install+1
@@ -2,6 +2,7 @@ usr/lib/*/unity8/qml/AccountsService
2usr/lib/*/unity8/qml/Dash
2usr/lib/*/unity8/qml/Dash
3usr/lib/*/unity8/qml/HudClient
3usr/lib/*/unity8/qml/HudClient
4usr/lib/*/unity8/qml/LightDM
4usr/lib/*/unity8/qml/LightDM
5+usr/lib/*/unity8/qml/Lights
5usr/lib/*/unity8/qml/Powerd
6usr/lib/*/unity8/qml/Powerd
6usr/lib/*/unity8/qml/SessionBroadcast
7usr/lib/*/unity8/qml/SessionBroadcast
7usr/lib/*/unity8/qml/Ubuntu
8usr/lib/*/unity8/qml/Ubuntu
doc/CMakeLists.txt+2
@@ -15,6 +15,8 @@ else()
15 ${CMAKE_SOURCE_DIR}/src/*.cpp
15 ${CMAKE_SOURCE_DIR}/src/*.cpp
16 ${CMAKE_SOURCE_DIR}/plugins/*.h
16 ${CMAKE_SOURCE_DIR}/plugins/*.h
17 ${CMAKE_SOURCE_DIR}/plugins/*.cpp
17 ${CMAKE_SOURCE_DIR}/plugins/*.cpp
18+ ${CMAKE_SOURCE_DIR}/plugins/*.qml
19+ ${CMAKE_SOURCE_DIR}/plugins/*.js
18 ${CMAKE_SOURCE_DIR}/qml/*.qml
20 ${CMAKE_SOURCE_DIR}/qml/*.qml
19 ${CMAKE_SOURCE_DIR}/qml/*.js
21 ${CMAKE_SOURCE_DIR}/qml/*.js
20 ${CMAKE_SOURCE_DIR}/tests/autopilot/*.py
22 ${CMAKE_SOURCE_DIR}/tests/autopilot/*.py
include/paths.h.in−8
@@ -127,12 +127,4 @@ inline void appendImportPaths(QQmlEngine *engine, const QStringList &paths)
127 engine->setImportPathList(importPathList);
127 engine->setImportPathList(importPathList);
128}
128}
129
129
130−inline void resolveIconTheme() {
131− const char *ubuntuIconTheme = getenv("UBUNTU_ICON_THEME");
132− if (ubuntuIconTheme == NULL) {
133− ubuntuIconTheme = "ubuntu-mobile";
134− }
135− QIcon::setThemeName(ubuntuIconTheme);
136−}
137−
138#endif
130#endif
plugins/AccountsService/AccountsService.qmltypesnew file+22
@@ -0,0 +1,22 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable AccountsService 0.1 plugins'
8+
9+Module {
10+ Component {
11+ name: "AccountsService"
12+ prototype: "QObject"
13+ exports: ["AccountsService/AccountsService 0.1"]
14+ isCreatable: false
15+ isSingleton: true
16+ exportMetaObjectRevisions: [0]
17+ Property { name: "user"; type: "string" }
18+ Property { name: "demoEdges"; type: "bool" }
19+ Property { name: "backgroundFile"; type: "string"; isReadonly: true }
20+ Property { name: "statsWelcomeScreen"; type: "bool"; isReadonly: true }
21+ }
22+}
plugins/CMakeLists.txt+1
@@ -14,6 +14,7 @@ endmacro()
14add_subdirectory(AccountsService)
14add_subdirectory(AccountsService)
15add_subdirectory(HudClient)
15add_subdirectory(HudClient)
16add_subdirectory(LightDM)
16add_subdirectory(LightDM)
17+add_subdirectory(Lights)
17add_subdirectory(Dash)
18add_subdirectory(Dash)
18add_subdirectory(Powerd)
19add_subdirectory(Powerd)
19add_subdirectory(SessionBroadcast)
20add_subdirectory(SessionBroadcast)
plugins/Dash/CardCreator.js+7−4
@@ -289,6 +289,7 @@ function cardString(template, components) {
289 property var cardData; \n\
289 property var cardData; \n\
290 property var artShapeBorderSource: undefined; \n\
290 property var artShapeBorderSource: undefined; \n\
291 property real fontScale: 1.0; \n\
291 property real fontScale: 1.0; \n\
292+ property var scopeStyle: null; \n\
292 property int headerAlignment: Text.AlignLeft; \n\
293 property int headerAlignment: Text.AlignLeft; \n\
293 property int fixedHeaderHeight: -1; \n\
294 property int fixedHeaderHeight: -1; \n\
294 property size fixedArtShapeSize: Qt.size(-1, -1); \n\
295 property size fixedArtShapeSize: Qt.size(-1, -1); \n\
@@ -305,7 +306,7 @@ function cardString(template, components) {
305 var hasTitle = components["title"] || false;
306 var hasTitle = components["title"] || false;
306 var hasMascot = components["mascot"] || false;
307 var hasMascot = components["mascot"] || false;
307 var headerAsOverlay = hasArt && template && template["overlay"] === true && (hasTitle || hasMascot);
308 var headerAsOverlay = hasArt && template && template["overlay"] === true && (hasTitle || hasMascot);
308− var hasSubtitle = components["subtitle"] || false;
309+ var hasSubtitle = hasTitle && components["subtitle"] || false;
309 var hasHeaderRow = hasMascot && hasTitle;
310 var hasHeaderRow = hasMascot && hasTitle;
310
311
311 if (hasBackground) {
312 if (hasBackground) {
@@ -407,7 +408,7 @@ function cardString(template, components) {
407 mascotCode = kMascotImageCode.arg(anchors).arg(mascotImageVisible);
408 mascotCode = kMascotImageCode.arg(anchors).arg(mascotImageVisible);
408 }
409 }
409
410
410− var summaryColorWithBackground = 'backgroundLoader.active && backgroundLoader.item && backgroundLoader.item.luminance < 0.7 ? "white" : "grey"';
411+ var summaryColorWithBackground = 'backgroundLoader.active && backgroundLoader.item && backgroundLoader.item.luminance < 0.7 ? "white" : (root.scopeStyle ? root.scopeStyle.foreground : "grey")';
411
412
412 var titleSubtitleCode = "";
413 var titleSubtitleCode = "";
413 if (hasTitle) {
414 if (hasTitle) {
@@ -419,7 +420,7 @@ function cardString(template, components) {
419 } else if (hasBackground) {
420 } else if (hasBackground) {
420 color = summaryColorWithBackground;
421 color = summaryColorWithBackground;
421 } else {
422 } else {
422− color = '"grey"';
423+ color = 'root.scopeStyle ? root.scopeStyle.foreground : "grey"';
423 }
424 }
424
425
425 var titleAnchors;
426 var titleAnchors;
@@ -495,7 +496,7 @@ function cardString(template, components) {
495 if (hasBackground) {
496 if (hasBackground) {
496 color = summaryColorWithBackground;
497 color = summaryColorWithBackground;
497 } else {
498 } else {
498− color = '"grey"';
499+ color = 'root.scopeStyle ? root.scopeStyle.foreground : "grey"';
499 }
500 }
500
501
501 var summaryTopMargin = (hasMascot || hasSubtitle ? 'anchors.margins' : '0');
502 var summaryTopMargin = (hasMascot || hasSubtitle ? 'anchors.margins' : '0');
@@ -513,6 +514,8 @@ function cardString(template, components) {
513 code += 'implicitHeight: subtitleLabel.y + subtitleLabel.height + units.gu(1);\n';
514 code += 'implicitHeight: subtitleLabel.y + subtitleLabel.height + units.gu(1);\n';
514 } else if (hasTitle) {
515 } else if (hasTitle) {
515 code += 'implicitHeight: titleLabel.y + titleLabel.height + units.gu(1);\n';
516 code += 'implicitHeight: titleLabel.y + titleLabel.height + units.gu(1);\n';
517+ } else if (hasArt) {
518+ code += 'implicitHeight: artShapeHolder.height;\n';
516 }
519 }
517 // Close the AbstractButton
520 // Close the AbstractButton
518 code += '}\n';
521 code += '}\n';
plugins/Dash/Dash.qmltypesnew file+95
@@ -0,0 +1,95 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable Dash 0.1 plugins'
8+
9+Module {
10+ Component {
11+ name: "AbstractDashView"
12+ defaultProperty: "data"
13+ prototype: "QQuickItem"
14+ Property { name: "model"; type: "QAbstractItemModel"; isPointer: true }
15+ Property { name: "delegate"; type: "QQmlComponent"; isPointer: true }
16+ Property { name: "columnSpacing"; type: "double" }
17+ Property { name: "rowSpacing"; type: "double" }
18+ Property { name: "displayMarginBeginning"; type: "double" }
19+ Property { name: "displayMarginEnd"; type: "double" }
20+ }
21+ Component {
22+ name: "HorizontalJournal"
23+ defaultProperty: "data"
24+ prototype: "AbstractDashView"
25+ exports: ["Dash/HorizontalJournal 0.1"]
26+ exportMetaObjectRevisions: [0]
27+ Property { name: "rowHeight"; type: "double" }
28+ }
29+ Component {
30+ name: "ListViewWithPageHeader"
31+ defaultProperty: "flickableData"
32+ prototype: "QQuickFlickable"
33+ exports: ["Dash/ListViewWithPageHeader 0.1"]
34+ exportMetaObjectRevisions: [0]
35+ Property { name: "model"; type: "QAbstractItemModel"; isPointer: true }
36+ Property { name: "delegate"; type: "QQmlComponent"; isPointer: true }
37+ Property { name: "pageHeader"; type: "QQuickItem"; isPointer: true }
38+ Property { name: "sectionDelegate"; type: "QQmlComponent"; isPointer: true }
39+ Property { name: "sectionProperty"; type: "string" }
40+ Property { name: "forceNoClip"; type: "bool" }
41+ Property { name: "stickyHeaderHeight"; type: "int"; isReadonly: true }
42+ Signal { name: "headerChanged" }
43+ Method { name: "positionAtBeginning" }
44+ Method { name: "showHeader" }
45+ Method {
46+ name: "item"
47+ type: "QQuickItem*"
48+ Parameter { name: "modelIndex"; type: "int" }
49+ }
50+ Method {
51+ name: "maximizeVisibleArea"
52+ type: "bool"
53+ Parameter { name: "modelIndex"; type: "int" }
54+ }
55+ Method {
56+ name: "maximizeVisibleArea"
57+ type: "bool"
58+ Parameter { name: "modelIndex"; type: "int" }
59+ Parameter { name: "itemHeight"; type: "int" }
60+ }
61+ }
62+ Component {
63+ name: "OrganicGrid"
64+ defaultProperty: "data"
65+ prototype: "AbstractDashView"
66+ exports: ["Dash/OrganicGrid 0.1"]
67+ exportMetaObjectRevisions: [0]
68+ Property { name: "smallDelegateSize"; type: "QSizeF" }
69+ Property { name: "bigDelegateSize"; type: "QSizeF" }
70+ }
71+ Component {
72+ name: "VerticalJournal"
73+ defaultProperty: "data"
74+ prototype: "AbstractDashView"
75+ exports: ["Dash/VerticalJournal 0.1"]
76+ exportMetaObjectRevisions: [0]
77+ Property { name: "columnWidth"; type: "double" }
78+ }
79+ Component {
80+ prototype: "QObject"
81+ name: "CardCreatorCache"
82+ exports: ["CardCreatorCache -1.-1"]
83+ exportMetaObjectRevisions: [-1]
84+ isComposite: true
85+ isCreatable: false
86+ isSingleton: true
87+ Property { name: "cache"; type: "QVariant" }
88+ Method {
89+ name: "getCardComponent"
90+ type: "QVariant"
91+ Parameter { name: "template"; type: "QVariant" }
92+ Parameter { name: "components"; type: "QVariant" }
93+ }
94+ }
95+}
plugins/Dash/ScopeStyle.qmlnew file+87
@@ -0,0 +1,87 @@
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 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+
19+/*! \brief Helper for processing scope customization options.
20+
21+ It will take the customizations object passed by the scope and
22+ process it to provide the scope UI with data such as colors or
23+ image paths.
24+ */
25+
26+QtObject {
27+ /// Style object passed from the scope
28+ property var style: Object()
29+
30+ /*! \brief Calculate luminance of the passed color
31+
32+ \note If not fully opaque, luminance is dependant on blending.
33+ */
34+ function luminance(color) {
35+ return 0.2126 * color.r + 0.7152 * color.g + 0.0722 * color.b;
36+ }
37+
38+ /// Color used for text and symbolic icons
39+ readonly property color foreground: "foreground-color" in style ? style["foreground-color"] : d.defaultDark
40+
41+ /// Color used for the overall background
42+ readonly property color background: "background-color" in style ? style["background-color"] : "transparent"
43+
44+ /*! \brief Luminance threshold for switching between fore and background color
45+
46+ \note If background colour is not fully opaque, it's not taken into account.
47+ */
48+ readonly property real threshold: background.a !== 1.0 ? d.foregroundLuminance : (d.foregroundLuminance + d.backgroundLuminance) / 2
49+
50+ /*! \brief The lighter of foreground and background colors
51+
52+ \note If background color is not fully opaque, it's not taken into account
53+ and defaults to the theme-provided light color.
54+ */
55+ readonly property color light: {
56+ if (background.a !== 1.0) return d.foregroundLuminance > d.defaultLightLuminance ? foreground : d.defaultLight;
57+ return d.foregroundLuminance > d.backgroundLuminance ? foreground : background;
58+ }
59+
60+ /*! \brief The darker of foreground and background colors
61+
62+ \note If background color is not fully opaque, it's not taken into account
63+ and defaults to the theme-provided dark color.
64+ */
65+ readonly property color dark: {
66+ if (background.a !== 1.0) return d.foregroundLuminance < d.defaultDarkLuminance ? foreground : d.defaultDark;
67+ return d.foregroundLuminance < d.backgroundLuminance ? foreground : background;
68+ }
69+
70+ /// Source of the logo image for the header
71+ readonly property url headerLogo: "logo" in d.headerStyle ? d.headerStyle["logo"] : ""
72+
73+ //! @cond
74+ property var d: QtObject {
75+ readonly property real foregroundLuminance: luminance(foreground)
76+ readonly property real backgroundLuminance: luminance(background)
77+
78+ // FIXME: should be taken from the theme
79+ readonly property color defaultLight: "white"
80+ readonly property color defaultDark: "grey"
81+ readonly property real defaultLightLuminance: luminance(defaultLight)
82+ readonly property real defaultDarkLuminance: luminance(defaultDark)
83+
84+ readonly property var headerStyle: "page-header" in style ? style["page-header"] : { }
85+ }
86+ //! @endcond
87+}
plugins/Dash/qmldir+1
@@ -2,3 +2,4 @@ module Dash
2plugin Dash-qml
2plugin Dash-qml
3typeinfo Dash.qmltypes
3typeinfo Dash.qmltypes
4singleton CardCreatorCache 0.1 CardCreatorCache.qml
4singleton CardCreatorCache 0.1 CardCreatorCache.qml
5+ScopeStyle 0.1 ScopeStyle.qml
plugins/HudClient/HudClient.qmltypesnew file+91
@@ -0,0 +1,91 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable HudClient 0.1 plugins'
8+
9+Module {
10+ Component {
11+ name: "DeeListModel"
12+ prototype: "QAbstractListModel"
13+ Property { name: "name"; type: "string" }
14+ Property { name: "synchronized"; type: "bool"; isReadonly: true }
15+ Property { name: "count"; type: "int"; isReadonly: true }
16+ Signal {
17+ name: "nameChanged"
18+ Parameter { type: "string" }
19+ }
20+ Signal {
21+ name: "synchronizedChanged"
22+ Parameter { type: "bool" }
23+ }
24+ Signal {
25+ name: "roleNamesChanged"
26+ Parameter { type: "QHash<int,QByteArray>" }
27+ }
28+ Method {
29+ name: "get"
30+ type: "QVariantMap"
31+ Parameter { name: "row"; type: "int" }
32+ }
33+ Method { name: "count"; type: "int" }
34+ }
35+ Component {
36+ name: "HudClient"
37+ prototype: "QObject"
38+ exports: ["HudClient/HudClient 0.1"]
39+ exportMetaObjectRevisions: [0]
40+ Property { name: "results"; type: "DeeListModel"; isReadonly: true; isPointer: true }
41+ Property { name: "toolBarModel"; type: "QAbstractItemModel"; isReadonly: true; isPointer: true }
42+ Signal { name: "voiceQueryLoading" }
43+ Signal { name: "voiceQueryListening" }
44+ Signal { name: "voiceQueryHeardSomething" }
45+ Signal { name: "voiceQueryFailed" }
46+ Signal {
47+ name: "voiceQueryFinished"
48+ Parameter { name: "query"; type: "string" }
49+ }
50+ Signal { name: "commandExecuted" }
51+ Signal {
52+ name: "showParametrizedAction"
53+ Parameter { name: "action"; type: "string" }
54+ Parameter { name: "items"; type: "QVariant" }
55+ }
56+ Method {
57+ name: "executeCommand"
58+ Parameter { name: "index"; type: "int" }
59+ }
60+ Method {
61+ name: "setQuery"
62+ Parameter { name: "new_query"; type: "string" }
63+ }
64+ Method { name: "startVoiceQuery" }
65+ Method {
66+ name: "executeParametrizedAction"
67+ Parameter { name: "values"; type: "QVariant" }
68+ }
69+ Method {
70+ name: "updateParametrizedAction"
71+ Parameter { name: "values"; type: "QVariant" }
72+ }
73+ Method { name: "cancelParametrizedAction" }
74+ Method {
75+ name: "executeToolBarAction"
76+ Parameter { name: "action"; type: "HudClientQueryToolbarItems" }
77+ }
78+ }
79+ Component {
80+ name: "VolumePeakDetector"
81+ prototype: "QObject"
82+ exports: ["HudClient/VolumePeakDetector 0.1"]
83+ exportMetaObjectRevisions: [0]
84+ Property { name: "enabled"; type: "bool" }
85+ Property { name: "desiredInterval"; type: "int" }
86+ Signal {
87+ name: "newPeak"
88+ Parameter { name: "volume"; type: "float" }
89+ }
90+ }
91+}
plugins/LightDM/LightDM.qmltypesnew file+241
@@ -0,0 +1,241 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable LightDM 0.1 plugins'
8+
9+Module {
10+ Component {
11+ name: "Greeter"
12+ prototype: "QObject"
13+ exports: ["LightDM/Greeter 0.1"]
14+ isCreatable: false
15+ isSingleton: true
16+ exportMetaObjectRevisions: [0]
17+ Property { name: "authenticated"; type: "bool"; isReadonly: true }
18+ Property { name: "authenticationUser"; type: "string"; isReadonly: true }
19+ Property { name: "promptless"; type: "bool"; isReadonly: true }
20+ Signal {
21+ name: "showMessage"
22+ Parameter { name: "text"; type: "string" }
23+ Parameter { name: "isError"; type: "bool" }
24+ }
25+ Signal {
26+ name: "showPrompt"
27+ Parameter { name: "text"; type: "string" }
28+ Parameter { name: "isSecret"; type: "bool" }
29+ }
30+ Signal { name: "authenticationComplete" }
31+ Signal {
32+ name: "authenticationUserChanged"
33+ Parameter { name: "user"; type: "string" }
34+ }
35+ Signal {
36+ name: "requestAuthenticationUser"
37+ Parameter { name: "user"; type: "string" }
38+ }
39+ Method {
40+ name: "authenticate"
41+ Parameter { name: "username"; type: "string" }
42+ }
43+ Method { name: "authenticate" }
44+ Method {
45+ name: "respond"
46+ Parameter { name: "response"; type: "string" }
47+ }
48+ Method {
49+ name: "startSessionSync"
50+ type: "bool"
51+ Parameter { name: "session"; type: "string" }
52+ }
53+ Method { name: "startSessionSync"; type: "bool" }
54+ }
55+ Component {
56+ name: "QAbstractProxyModel"
57+ prototype: "QAbstractItemModel"
58+ Property { name: "sourceModel"; type: "QAbstractItemModel"; isPointer: true }
59+ }
60+ Component {
61+ name: "QLightDM::UsersModel"
62+ prototype: "QAbstractListModel"
63+ exports: ["LightDM/UserRoles 0.1"]
64+ isCreatable: false
65+ exportMetaObjectRevisions: [0]
66+ Enum {
67+ name: "UserModelRoles"
68+ values: {
69+ "NameRole": 256,
70+ "RealNameRole": 257,
71+ "LoggedInRole": 258,
72+ "BackgroundRole": 259,
73+ "SessionRole": 260,
74+ "HasMessagesRole": 261,
75+ "ImagePathRole": 262,
76+ "BackgroundPathRole": 263
77+ }
78+ }
79+ }
80+ Component {
81+ name: "QSortFilterProxyModel"
82+ prototype: "QAbstractProxyModel"
83+ Property { name: "filterRegExp"; type: "QRegExp" }
84+ Property { name: "filterKeyColumn"; type: "int" }
85+ Property { name: "dynamicSortFilter"; type: "bool" }
86+ Property { name: "filterCaseSensitivity"; type: "Qt::CaseSensitivity" }
87+ Property { name: "sortCaseSensitivity"; type: "Qt::CaseSensitivity" }
88+ Property { name: "isSortLocaleAware"; type: "bool" }
89+ Property { name: "sortRole"; type: "int" }
90+ Property { name: "filterRole"; type: "int" }
91+ Method {
92+ name: "setFilterRegExp"
93+ Parameter { name: "pattern"; type: "string" }
94+ }
95+ Method {
96+ name: "setFilterWildcard"
97+ Parameter { name: "pattern"; type: "string" }
98+ }
99+ Method {
100+ name: "setFilterFixedString"
101+ Parameter { name: "pattern"; type: "string" }
102+ }
103+ Method { name: "clear" }
104+ Method { name: "invalidate" }
105+ }
106+ Component {
107+ name: "QSortFilterProxyModelQML"
108+ prototype: "QSortFilterProxyModel"
109+ Property { name: "model"; type: "QAbstractItemModel"; isPointer: true }
110+ Property { name: "totalCount"; type: "int"; isReadonly: true }
111+ Property { name: "count"; type: "int"; isReadonly: true }
112+ Property { name: "invertMatch"; type: "bool" }
113+ Signal {
114+ name: "invertMatchChanged"
115+ Parameter { type: "bool" }
116+ }
117+ Method {
118+ name: "get"
119+ type: "QVariantMap"
120+ Parameter { name: "row"; type: "int" }
121+ }
122+ Method {
123+ name: "data"
124+ type: "QVariant"
125+ Parameter { name: "row"; type: "int" }
126+ Parameter { name: "role"; type: "int" }
127+ }
128+ Method { name: "count"; type: "int" }
129+ Method {
130+ name: "findFirst"
131+ type: "int"
132+ Parameter { name: "role"; type: "int" }
133+ Parameter { name: "value"; type: "QVariant" }
134+ }
135+ Method {
136+ name: "mapRowToSource"
137+ type: "int"
138+ Parameter { name: "row"; type: "int" }
139+ }
140+ Method {
141+ name: "mapFromSource"
142+ type: "int"
143+ Parameter { name: "row"; type: "int" }
144+ }
145+ Method {
146+ name: "mapToSource"
147+ type: "int"
148+ Parameter { name: "row"; type: "int" }
149+ }
150+ }
151+ Component {
152+ name: "UserMetricsOutput::ColorTheme"
153+ prototype: "QObject"
154+ Property { name: "start"; type: "QColor"; isReadonly: true }
155+ Property { name: "main"; type: "QColor"; isReadonly: true }
156+ Property { name: "end"; type: "QColor"; isReadonly: true }
157+ Signal {
158+ name: "startChanged"
159+ Parameter { name: "color"; type: "QColor" }
160+ }
161+ Signal {
162+ name: "mainChanged"
163+ Parameter { name: "color"; type: "QColor" }
164+ }
165+ Signal {
166+ name: "endChanged"
167+ Parameter { name: "color"; type: "QColor" }
168+ }
169+ }
170+ Component {
171+ name: "UserMetricsOutput::UserMetrics"
172+ prototype: "QObject"
173+ exports: ["LightDM/Infographic 0.1"]
174+ isCreatable: false
175+ isSingleton: true
176+ exportMetaObjectRevisions: [0]
177+ Property { name: "label"; type: "string"; isReadonly: true }
178+ Property { name: "username"; type: "string" }
179+ Property {
180+ name: "firstColor"
181+ type: "UserMetricsOutput::ColorTheme"
182+ isReadonly: true
183+ isPointer: true
184+ }
185+ Property {
186+ name: "secondColor"
187+ type: "UserMetricsOutput::ColorTheme"
188+ isReadonly: true
189+ isPointer: true
190+ }
191+ Property { name: "firstMonth"; type: "QAbstractItemModel"; isReadonly: true; isPointer: true }
192+ Property { name: "secondMonth"; type: "QAbstractItemModel"; isReadonly: true; isPointer: true }
193+ Property { name: "currentDay"; type: "int"; isReadonly: true }
194+ Signal {
195+ name: "labelChanged"
196+ Parameter { name: "label"; type: "string" }
197+ }
198+ Signal {
199+ name: "usernameChanged"
200+ Parameter { name: "username"; type: "string" }
201+ }
202+ Signal {
203+ name: "firstColorChanged"
204+ Parameter { name: "color"; type: "ColorTheme"; isPointer: true }
205+ }
206+ Signal {
207+ name: "firstMonthChanged"
208+ Parameter { name: "firstMonth"; type: "QAbstractItemModel"; isPointer: true }
209+ }
210+ Signal {
211+ name: "currentDayChanged"
212+ Parameter { name: "currentDay"; type: "int" }
213+ }
214+ Signal {
215+ name: "secondColorChanged"
216+ Parameter { name: "color"; type: "ColorTheme"; isPointer: true }
217+ }
218+ Signal {
219+ name: "secondMonthChanged"
220+ Parameter { name: "secondMonth"; type: "QAbstractItemModel"; isPointer: true }
221+ }
222+ Signal { name: "nextDataSource" }
223+ Signal { name: "readyForDataChange" }
224+ Signal { name: "dataAboutToAppear" }
225+ Signal { name: "dataAppeared" }
226+ Signal { name: "dataAboutToChange" }
227+ Signal { name: "dataChanged" }
228+ Signal { name: "dataAboutToDisappear" }
229+ Signal { name: "dataDisappeared" }
230+ Method { name: "nextDataSourceSlot" }
231+ Method { name: "readyForDataChangeSlot" }
232+ }
233+ Component {
234+ name: "UsersModel"
235+ prototype: "QSortFilterProxyModelQML"
236+ exports: ["LightDM/Users 0.1"]
237+ isCreatable: false
238+ isSingleton: true
239+ exportMetaObjectRevisions: [0]
240+ }
241+}
plugins/Lights/CMakeLists.txtnew file+18
@@ -0,0 +1,18 @@
1+include(FindPkgConfig)
2+
3+pkg_check_modules(ANDROID_HEADERS REQUIRED android-headers)
4+pkg_check_modules(ANDROID_HARDWARE REQUIRED libhardware)
5+
6+include_directories(
7+ ${ANDROID_HEADERS_INCLUDE_DIRS}
8+)
9+
10+add_library(Lights-qml MODULE
11+ plugin.cpp
12+ Lights.cpp
13+ )
14+
15+qt5_use_modules(Lights-qml Qml Gui)
16+target_link_libraries(Lights-qml ${ANDROID_HARDWARE_LIBRARIES})
17+
18+add_unity8_plugin(Lights 0.1 Lights TARGETS Lights-qml)
plugins/Lights/Lights.cppnew file+182
@@ -0,0 +1,182 @@
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: Renato Araujo Oliveira Filho <renato.filho@canonical.com>
17+ */
18+
19+#include "Lights.h"
20+#include <QtCore/QDebug>
21+
22+extern "C" {
23+#include <hardware/hardware.h>
24+#include <hardware/lights.h>
25+#include <string.h>
26+}
27+
28+Lights::Lights(QObject* parent)
29+ : QObject(parent),
30+ m_lightDevice(0),
31+ m_color("blue"),
32+ m_state(Lights::Off),
33+ m_onMs(1000),
34+ m_offMs(3000)
35+{
36+}
37+
38+Lights::~Lights()
39+{
40+ if (m_lightDevice) {
41+ hw_device_t* device = (hw_device_t*) m_lightDevice;
42+ device->close(device);
43+ }
44+}
45+
46+void Lights::setState(Lights::State newState)
47+{
48+ if (m_state != newState) {
49+ if (newState == Lights::On) {
50+ turnOn();
51+ } else {
52+ turnOff();
53+ }
54+ }
55+}
56+
57+Lights::State Lights::state() const
58+{
59+ return m_state;
60+}
61+
62+void Lights::setColor(const QColor &color)
63+{
64+ if (m_color != color) {
65+ m_color = color;
66+ Q_EMIT colorChanged(m_color);
67+ // FIXME: update the collor if the light is already on
68+ }
69+}
70+
71+QColor Lights::color() const
72+{
73+ return m_color;
74+}
75+
76+int Lights::onMillisec() const
77+{
78+ return m_onMs;
79+}
80+
81+void Lights::setOnMillisec(int onMs)
82+{
83+ if (m_onMs != onMs) {
84+ m_onMs = onMs;
85+ Q_EMIT onMillisecChanged(m_onMs);
86+ // FIXME: update the property if the light is already on
87+ }
88+}
89+
90+int Lights::offMillisec() const
91+{
92+ return m_offMs;
93+}
94+
95+void Lights::setOffMillisec(int offMs)
96+{
97+ if (m_offMs != offMs) {
98+ m_offMs = offMs;
99+ Q_EMIT offMillisecChanged(m_offMs);
100+ // FIXME: update the property if the light is already on
101+ }
102+}
103+
104+bool Lights::init()
105+{
106+ if (m_lightDevice) {
107+ return true;
108+ }
109+
110+ int err;
111+ hw_module_t* module;
112+
113+ err = hw_get_module(LIGHTS_HARDWARE_MODULE_ID, (hw_module_t const**)&module);
114+ if (err == 0) {
115+ hw_device_t* device;
116+ err = module->methods->open(module, LIGHT_ID_NOTIFICATIONS, &device);
117+ if (err == 0) {
118+ m_lightDevice = (light_device_t*)device;
119+ return true;
120+ } else {
121+ qWarning() << "Failed to access notification lights";
122+ }
123+ } else {
124+ qWarning() << "Failed to initialize lights hardware.";
125+ }
126+ return false;
127+}
128+
129+void Lights::turnOn()
130+{
131+ if (!init()) {
132+ qWarning() << "No lights device";
133+ return;
134+ }
135+
136+ if (m_state == Lights::On) {
137+ return;
138+ }
139+
140+ // pulse
141+ light_state_t state;
142+ memset(&state, 0, sizeof(light_state_t));
143+ state.color = m_color.rgba();
144+ state.flashMode = LIGHT_FLASH_TIMED;
145+ state.flashOnMS = m_onMs;
146+ state.flashOffMS = m_offMs;
147+ state.brightnessMode = BRIGHTNESS_MODE_USER;
148+
149+ if (m_lightDevice->set_light(m_lightDevice, &state) != 0) {
150+ qWarning() << "Failed to turn the light off";
151+ } else {
152+ m_state = Lights::On;
153+ Q_EMIT stateChanged(m_state);
154+ }
155+}
156+
157+void Lights::turnOff()
158+{
159+ if (!init()) {
160+ qWarning() << "No lights device";
161+ return;
162+ }
163+
164+ if (m_state == Lights::Off) {
165+ return;
166+ }
167+
168+ light_state_t state;
169+ memset(&state, 0, sizeof(light_state_t));
170+ state.color = 0x00000000;
171+ state.flashMode = LIGHT_FLASH_NONE;
172+ state.flashOnMS = 0;
173+ state.flashOffMS = 0;
174+ state.brightnessMode = 0;
175+
176+ if (m_lightDevice->set_light(m_lightDevice, &state) != 0) {
177+ qWarning() << "Failed to turn the light off";
178+ } else {
179+ m_state = Lights::Off;
180+ Q_EMIT stateChanged(m_state);
181+ }
182+}
plugins/Lights/Lights.hnew 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+ * Author: Renato Araujo Oliveira Filho <renato.filho@canonical.com>
17+ */
18+
19+#ifndef UNITY_LIGHTS_H
20+#define UNITY_LIGHTS_H
21+
22+#include <QtCore/QObject>
23+#include <QtGui/QColor>
24+
25+struct light_device_t;
26+
27+class Lights: public QObject
28+{
29+ Q_OBJECT
30+ Q_ENUMS(State)
31+ Q_PROPERTY(State state READ state WRITE setState NOTIFY stateChanged)
32+ Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
33+ Q_PROPERTY(int onMillisec READ onMillisec WRITE setOnMillisec NOTIFY onMillisecChanged)
34+ Q_PROPERTY(int offMillisec READ offMillisec WRITE setOffMillisec NOTIFY offMillisecChanged)
35+
36+public:
37+ enum State {
38+ Off,
39+ On,
40+ };
41+
42+ explicit Lights(QObject *parent = 0);
43+ ~Lights();
44+
45+ void setState(State newState);
46+ State state() const;
47+
48+ void setColor(const QColor &color);
49+ QColor color() const;
50+
51+ int onMillisec() const;
52+ void setOnMillisec(int onMs);
53+
54+ int offMillisec() const;
55+ void setOffMillisec(int offMs);
56+
57+Q_SIGNALS:
58+ void stateChanged(State newState);
59+ void colorChanged(const QColor &color);
60+ void onMillisecChanged(int onMs);
61+ void offMillisecChanged(int offMs);
62+
63+private:
64+ light_device_t* m_lightDevice;
65+ QColor m_color;
66+ State m_state;
67+ int m_onMs;
68+ int m_offMs;
69+
70+ bool init();
71+ void turnOff();
72+ void turnOn();
73+};
74+
75+#endif
plugins/Lights/plugin.cppnew file+35
@@ -0,0 +1,35 @@
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: Renato Araujo Oliveira Filho <renato.filho@canonical.com>
17+ */
18+
19+#include "plugin.h"
20+#include "Lights.h"
21+
22+#include <QtQml/qqml.h>
23+
24+static QObject *lights_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
25+{
26+ Q_UNUSED(engine)
27+ Q_UNUSED(scriptEngine)
28+ return new Lights();
29+}
30+
31+void LightsPlugin::registerTypes(const char *uri)
32+{
33+ Q_ASSERT(uri == QLatin1String("Lights"));
34+ qmlRegisterSingletonType<Lights>(uri, 0, 1, "Lights", lights_provider);
35+}
plugins/Lights/plugin.hnew file+34
@@ -0,0 +1,34 @@
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: Renato Araujo Oliveira Filho <renato.filho@canonical.com>
17+ */
18+
19+#ifndef LIGHTS_PLUGIN_H
20+#define LIGHTS_PLUGIN_H
21+
22+#include <QtQml/QQmlEngine>
23+#include <QtQml/QQmlExtensionPlugin>
24+
25+class LightsPlugin : public QQmlExtensionPlugin
26+{
27+ Q_OBJECT
28+ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
29+
30+public:
31+ void registerTypes(const char *uri);
32+};
33+
34+#endif
plugins/Lights/qmldirnew file+3
@@ -0,0 +1,3 @@
1+module Lights
2+plugin Lights-qml
3+typeinfo Lights.qmltypes
plugins/Powerd/Powerd.qmltypesnew file+46
@@ -0,0 +1,46 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable Powerd 0.1 plugins'
8+
9+Module {
10+ Component {
11+ name: "Powerd"
12+ prototype: "QObject"
13+ exports: ["Powerd/Powerd 0.1"]
14+ isCreatable: false
15+ isSingleton: true
16+ exportMetaObjectRevisions: [0]
17+ Enum {
18+ name: "DisplayFlag"
19+ values: {
20+ "UseProximity": 1,
21+ "DisableAutoBrightness": 2,
22+ "Bright": 4
23+ }
24+ }
25+ Enum {
26+ name: "DisplayFlags"
27+ values: {
28+ "UseProximity": 1,
29+ "DisableAutoBrightness": 2,
30+ "Bright": 4
31+ }
32+ }
33+ Enum {
34+ name: "Status"
35+ values: {
36+ "Off": 0,
37+ "On": 1
38+ }
39+ }
40+ Signal {
41+ name: "displayPowerStateChange"
42+ Parameter { name: "status"; type: "int" }
43+ Parameter { name: "flags"; type: "uint" }
44+ }
45+ }
46+}
plugins/SessionBroadcast/SessionBroadcast.qmltypesnew file+19
@@ -0,0 +1,19 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable SessionBroadcast 0.1 plugins'
8+
9+Module {
10+ Component {
11+ name: "SessionBroadcast"
12+ prototype: "QObject"
13+ exports: ["SessionBroadcast/SessionBroadcast 0.1"]
14+ isCreatable: false
15+ isSingleton: true
16+ exportMetaObjectRevisions: [0]
17+ Signal { name: "showHome" }
18+ }
19+}
plugins/Ubuntu/CMakeLists.txt+1
@@ -1,2 +1,3 @@
1add_subdirectory(Gestures)
1add_subdirectory(Gestures)
2add_subdirectory(DownloadDaemonListener)
2add_subdirectory(DownloadDaemonListener)
3+add_subdirectory(Payments)
plugins/Ubuntu/DownloadDaemonListener/DownloadDaemonListener.qmltypesnew file+60
@@ -0,0 +1,60 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable Ubuntu.DownloadDaemonListener 0.1 plugins'
8+
9+Module {
10+ Component {
11+ name: "DownloadTracker"
12+ prototype: "QObject"
13+ exports: ["Ubuntu.DownloadDaemonListener/DownloadTracker 0.1"]
14+ exportMetaObjectRevisions: [0]
15+ Property { name: "service"; type: "string" }
16+ Property { name: "dbusPath"; type: "string" }
17+ Property { name: "serviceReady"; type: "bool"; isReadonly: true }
18+ Signal {
19+ name: "serviceChanged"
20+ Parameter { name: "service"; type: "string" }
21+ }
22+ Signal {
23+ name: "dbusPathChanged"
24+ Parameter { name: "dbusPath"; type: "string" }
25+ }
26+ Signal {
27+ name: "serviceReadyChanged"
28+ Parameter { name: "serviceReady"; type: "bool" }
29+ }
30+ Signal {
31+ name: "canceled"
32+ Parameter { name: "success"; type: "bool" }
33+ }
34+ Signal {
35+ name: "error"
36+ Parameter { name: "error"; type: "string" }
37+ }
38+ Signal {
39+ name: "finished"
40+ Parameter { name: "path"; type: "string" }
41+ }
42+ Signal {
43+ name: "paused"
44+ Parameter { name: "success"; type: "bool" }
45+ }
46+ Signal {
47+ name: "progress"
48+ Parameter { name: "received"; type: "qulonglong" }
49+ Parameter { name: "total"; type: "qulonglong" }
50+ }
51+ Signal {
52+ name: "resumed"
53+ Parameter { name: "success"; type: "bool" }
54+ }
55+ Signal {
56+ name: "started"
57+ Parameter { name: "success"; type: "bool" }
58+ }
59+ }
60+}
plugins/Ubuntu/Gestures/DirectionalDragArea.cpp+1
@@ -378,6 +378,7 @@ void DirectionalDragArea::touchEvent_undecided(QTouchEvent *event)
378 // touch has ended before recognition concluded
378 // touch has ended before recognition concluded
379 DDA_DEBUG("Touch has ended before recognition concluded");
379 DDA_DEBUG("Touch has ended before recognition concluded");
380 setStatus(WaitingForTouch);
380 setStatus(WaitingForTouch);
381+ Q_EMIT tapped();
381 return;
382 return;
382 }
383 }
383
384
plugins/Ubuntu/Gestures/DirectionalDragArea.h+1
@@ -212,6 +212,7 @@ Q_SIGNALS:
212 void touchYChanged(qreal value);
212 void touchYChanged(qreal value);
213 void touchSceneXChanged(qreal value);
213 void touchSceneXChanged(qreal value);
214 void touchSceneYChanged(qreal value);
214 void touchSceneYChanged(qreal value);
215+ void tapped();
215
216
216protected:
217protected:
217 virtual void touchEvent(QTouchEvent *event);
218 virtual void touchEvent(QTouchEvent *event);
plugins/Ubuntu/Gestures/Gestures.qmltypesnew file+153
@@ -0,0 +1,153 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable Ubuntu.Gestures 0.1 plugins'
8+
9+Module {
10+ Component {
11+ name: "AxisVelocityCalculator"
12+ prototype: "QObject"
13+ exports: ["Ubuntu.Gestures/AxisVelocityCalculator 0.1"]
14+ exportMetaObjectRevisions: [0]
15+ Property { name: "trackedPosition"; type: "double" }
16+ Signal {
17+ name: "trackedPositionChanged"
18+ Parameter { name: "value"; type: "double" }
19+ }
20+ Method { name: "calculate"; type: "double" }
21+ Method { name: "reset" }
22+ }
23+ Component {
24+ name: "Direction"
25+ prototype: "QObject"
26+ exports: ["Ubuntu.Gestures/Direction 0.1"]
27+ isCreatable: false
28+ isSingleton: true
29+ exportMetaObjectRevisions: [0]
30+ Enum {
31+ name: "Type"
32+ values: {
33+ "Rightwards": 0,
34+ "Leftwards": 1,
35+ "Downwards": 2,
36+ "Upwards": 3
37+ }
38+ }
39+ Method {
40+ name: "isHorizontal"
41+ type: "bool"
42+ Parameter { name: "type"; type: "Direction::Type" }
43+ }
44+ Method {
45+ name: "isVertical"
46+ type: "bool"
47+ Parameter { name: "type"; type: "Direction::Type" }
48+ }
49+ Method {
50+ name: "isPositive"
51+ type: "bool"
52+ Parameter { name: "type"; type: "Direction::Type" }
53+ }
54+ }
55+ Component {
56+ name: "DirectionalDragArea"
57+ defaultProperty: "data"
58+ prototype: "QQuickItem"
59+ exports: ["Ubuntu.Gestures/DirectionalDragArea 0.1"]
60+ exportMetaObjectRevisions: [0]
61+ Enum {
62+ name: "Status"
63+ values: {
64+ "WaitingForTouch": 0,
65+ "Undecided": 1,
66+ "Recognized": 2
67+ }
68+ }
69+ Property { name: "direction"; type: "Direction::Type" }
70+ Property { name: "distance"; type: "double"; isReadonly: true }
71+ Property { name: "sceneDistance"; type: "double"; isReadonly: true }
72+ Property { name: "touchX"; type: "double"; isReadonly: true }
73+ Property { name: "touchY"; type: "double"; isReadonly: true }
74+ Property { name: "touchSceneX"; type: "double"; isReadonly: true }
75+ Property { name: "touchSceneY"; type: "double"; isReadonly: true }
76+ Property { name: "status"; type: "Status"; isReadonly: true }
77+ Property { name: "dragging"; type: "bool"; isReadonly: true }
78+ Property { name: "maxDeviation"; type: "double" }
79+ Property { name: "wideningAngle"; type: "double" }
80+ Property { name: "distanceThreshold"; type: "double" }
81+ Property { name: "minSpeed"; type: "double" }
82+ Property { name: "maxSilenceTime"; type: "int" }
83+ Property { name: "compositionTime"; type: "int" }
84+ Signal {
85+ name: "directionChanged"
86+ Parameter { name: "direction"; type: "Direction::Type" }
87+ }
88+ Signal {
89+ name: "statusChanged"
90+ Parameter { name: "value"; type: "Status" }
91+ }
92+ Signal {
93+ name: "draggingChanged"
94+ Parameter { name: "value"; type: "bool" }
95+ }
96+ Signal {
97+ name: "distanceChanged"
98+ Parameter { name: "value"; type: "double" }
99+ }
100+ Signal {
101+ name: "sceneDistanceChanged"
102+ Parameter { name: "value"; type: "double" }
103+ }
104+ Signal {
105+ name: "maxDeviationChanged"
106+ Parameter { name: "value"; type: "double" }
107+ }
108+ Signal {
109+ name: "wideningAngleChanged"
110+ Parameter { name: "value"; type: "double" }
111+ }
112+ Signal {
113+ name: "distanceThresholdChanged"
114+ Parameter { name: "value"; type: "double" }
115+ }
116+ Signal {
117+ name: "minSpeedChanged"
118+ Parameter { name: "value"; type: "double" }
119+ }
120+ Signal {
121+ name: "maxSilenceTimeChanged"
122+ Parameter { name: "value"; type: "int" }
123+ }
124+ Signal {
125+ name: "compositionTimeChanged"
126+ Parameter { name: "value"; type: "int" }
127+ }
128+ Signal {
129+ name: "touchXChanged"
130+ Parameter { name: "value"; type: "double" }
131+ }
132+ Signal {
133+ name: "touchYChanged"
134+ Parameter { name: "value"; type: "double" }
135+ }
136+ Signal {
137+ name: "touchSceneXChanged"
138+ Parameter { name: "value"; type: "double" }
139+ }
140+ Signal {
141+ name: "touchSceneYChanged"
142+ Parameter { name: "value"; type: "double" }
143+ }
144+ }
145+ Component {
146+ name: "PressedOutsideNotifier"
147+ defaultProperty: "data"
148+ prototype: "QQuickItem"
149+ exports: ["Ubuntu.Gestures/PressedOutsideNotifier 0.1"]
150+ exportMetaObjectRevisions: [0]
151+ Signal { name: "pressedOutside" }
152+ }
153+}
plugins/Ubuntu/Payments/CMakeLists.txtnew file+20
@@ -0,0 +1,20 @@
1+include_directories(
2+ ${CMAKE_CURRENT_SOURCE_DIR}
3+ ${CMAKE_CURRENT_BINARY_DIR}
4+)
5+
6+set(PAYMENTS_SOURCES
7+ plugin.cpp
8+ Payments.cpp
9+)
10+
11+add_library(Payments MODULE ${PAYMENTS_SOURCES})
12+
13+qt5_use_modules(Payments Qml Quick DBus Core)
14+
15+add_unity8_plugin(Ubuntu.Payments 0.1 Ubuntu/Payments TARGETS Payments)
16+
17+pkg_check_modules(LIBPAY REQUIRED pay-1)
18+add_definitions(${LIBPAY_CFLAGS} ${LIBPAY_CFLAGS_OTHER})
19+
20+target_link_libraries(Payments ${LIBPAY_LDFLAGS})
plugins/Ubuntu/Payments/Payments.cppnew file+118
@@ -0,0 +1,118 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "Payments.h"
18+
19+#include <QLocale>
20+
21+#include <libpay/pay-package.h>
22+
23+
24+// The observer callback for the package we are watching.
25+static void observer(PayPackage* /* package */, const char* itemid, PayPackageItemStatus status, void* user_data) {
26+ // This function is called in libpay's thread, so be careful what you call
27+ // Emitting signals should be fine as long as they use Queued or Auto
28+ // connections (the default)
29+ // http://qt-project.org/doc/qt-5/threads-qobject.html#signals-and-slots-across-threads
30+
31+ Payments *self = static_cast<Payments*>(user_data);
32+
33+ // If the item ID is different, ignore it.
34+ if (itemid != self->storeItemId()) {
35+ return;
36+ }
37+
38+ // FIXME: No error reporting from libpay, but we need to show some
39+ // types of errors to the user. https://launchpad.net/bugs/1333403
40+ switch (status) {
41+ case PAY_PACKAGE_ITEM_STATUS_PURCHASED:
42+ Q_EMIT self->purchaseCompleted();
43+ break;
44+ default:
45+ break;
46+ }
47+}
48+
49+Payments::Payments(QObject *parent)
50+ : QObject(parent)
51+{
52+ m_package = pay_package_new("click-scope");
53+ pay_package_item_observer_install(m_package, observer, this);
54+}
55+
56+Payments::~Payments()
57+{
58+ pay_package_item_observer_uninstall(m_package, observer, this);
59+ pay_package_delete(m_package);
60+}
61+
62+QString Payments::currency() const
63+{
64+ return m_currency;
65+}
66+
67+double Payments::price() const
68+{
69+ return m_price;
70+}
71+
72+QString Payments::storeItemId() const
73+{
74+ return m_store_item_id;
75+}
76+
77+QString Payments::formattedPrice() const
78+{
79+ QLocale locale;
80+ return locale.toCurrencyString(m_price, m_currency);
81+}
82+
83+void Payments::setCurrency(const QString &currency)
84+{
85+ if(m_currency != currency) {
86+ m_currency = currency;
87+ Q_EMIT currencyChanged(currency);
88+ Q_EMIT formattedPriceChanged(formattedPrice());
89+ }
90+}
91+
92+void Payments::setPrice(const double price)
93+{
94+ if(m_price != price) {
95+ m_price = price;
96+ Q_EMIT priceChanged(price);
97+ Q_EMIT formattedPriceChanged(formattedPrice());
98+ }
99+}
100+
101+void Payments::setStoreItemId(const QString &store_item_id)
102+{
103+ if (m_store_item_id != store_item_id) {
104+ m_store_item_id = store_item_id;
105+ Q_EMIT storeItemIdChanged(m_store_item_id);
106+ }
107+
108+ if (m_store_item_id.isEmpty()) {
109+ return;
110+ }
111+
112+ pay_package_item_start_verification(m_package, m_store_item_id.toLocal8Bit().data());
113+}
114+
115+void Payments::start()
116+{
117+ pay_package_item_start_purchase(m_package, m_store_item_id.toLocal8Bit().data());
118+}
plugins/Ubuntu/Payments/Payments.hnew file+65
@@ -0,0 +1,65 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef PAYMENTS_H
18+#define PAYMENTS_H
19+
20+#include <QObject>
21+
22+#include <libpay/pay-package.h>
23+
24+
25+class Payments : public QObject
26+{
27+ Q_OBJECT
28+ Q_DISABLE_COPY(Payments)
29+ Q_PROPERTY(QString currency READ currency WRITE setCurrency NOTIFY currencyChanged)
30+ Q_PROPERTY(double price READ price WRITE setPrice NOTIFY priceChanged)
31+ Q_PROPERTY(QString storeItemId READ storeItemId WRITE setStoreItemId NOTIFY storeItemIdChanged)
32+ Q_PROPERTY(QString formattedPrice READ formattedPrice NOTIFY formattedPriceChanged)
33+
34+public:
35+ explicit Payments(QObject *parent = 0);
36+ virtual ~Payments();
37+
38+ QString currency() const;
39+ double price() const;
40+ QString storeItemId() const;
41+ QString formattedPrice() const;
42+
43+ void setCurrency(const QString& currency);
44+ void setPrice(const double price);
45+ void setStoreItemId(const QString& store_item_id);
46+ Q_INVOKABLE void start();
47+
48+Q_SIGNALS:
49+ void currencyChanged(const QString& currency);
50+ void priceChanged(const double price);
51+ void storeItemIdChanged(const QString &store_item_id);
52+ void formattedPriceChanged(const QString &formatted_price);
53+
54+ void purchaseError(const QString &error);
55+ void purchaseCompleted();
56+
57+private:
58+ QString m_currency;
59+ double m_price;
60+ QString m_store_item_id;
61+
62+ PayPackage *m_package;
63+};
64+
65+#endif // PAYMENTS_H
plugins/Ubuntu/Payments/Payments.qmltypesnew file+42
@@ -0,0 +1,42 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable Ubuntu.Payments 0.1 plugins'
8+
9+Module {
10+ Component {
11+ name: "Payments"
12+ prototype: "QObject"
13+ exports: ["Ubuntu.Payments/Payments 0.1"]
14+ exportMetaObjectRevisions: [0]
15+ Property { name: "currency"; type: "string" }
16+ Property { name: "price"; type: "double" }
17+ Property { name: "storeItemId"; type: "string" }
18+ Property { name: "formattedPrice"; type: "string"; isReadonly: true }
19+ Signal {
20+ name: "currencyChanged"
21+ Parameter { name: "currency"; type: "string" }
22+ }
23+ Signal {
24+ name: "priceChanged"
25+ Parameter { name: "price"; type: "double" }
26+ }
27+ Signal {
28+ name: "storeItemIdChanged"
29+ Parameter { name: "store_item_id"; type: "string" }
30+ }
31+ Signal {
32+ name: "formattedPriceChanged"
33+ Parameter { name: "formatted_price"; type: "string" }
34+ }
35+ Signal {
36+ name: "purchaseError"
37+ Parameter { name: "error"; type: "string" }
38+ }
39+ Signal { name: "purchaseCompleted" }
40+ Method { name: "start" }
41+ }
42+}
plugins/Ubuntu/Payments/plugin.cppnew file+28
@@ -0,0 +1,28 @@
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 "plugin.h"
18+#include "Payments.h"
19+
20+#include <QtQml>
21+
22+
23+void BackendPlugin::registerTypes(const char *uri)
24+{
25+ Q_ASSERT(uri == QLatin1String("Ubuntu.Payments"));
26+
27+ qmlRegisterType<Payments>(uri, 0, 1, "Payments");
28+}
plugins/Ubuntu/Payments/plugin.hnew file+31
@@ -0,0 +1,31 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef PAYMENTS_PLUGIN_H
18+#define PAYMENTS_PLUGIN_H
19+
20+#include <QQmlExtensionPlugin>
21+
22+class BackendPlugin : public QQmlExtensionPlugin
23+{
24+ Q_OBJECT
25+ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
26+
27+public:
28+ void registerTypes(const char *uri);
29+};
30+
31+#endif // PAYMENTS_PLUGIN_H
plugins/Ubuntu/Payments/qmldirnew file+3
@@ -0,0 +1,3 @@
1+module Ubuntu.Payments
2+plugin Payments
3+typeinfo Payments.qmltypes
plugins/Unity/Indicators/CMakeLists.txt+1−4
@@ -51,7 +51,4 @@ target_link_libraries(IndicatorsQml
51
51
52qt5_use_modules(IndicatorsQml Core Qml Quick)
52qt5_use_modules(IndicatorsQml Core Qml Quick)
53
53
54−add_unity8_plugin(Unity.Indicators 0.1 Unity/Indicators
54+add_unity8_plugin(Unity.Indicators 0.1 Unity/Indicators TARGETS IndicatorsQml)
55− SEARCH_PATH qml
56− TARGETS IndicatorsQml
57−)
plugins/Unity/Indicators/qml/CachedUnityMenuModel.qml → plugins/Unity/Indicators/CachedUnityMenuModel.qmlrenamed

The content is the same.

plugins/Unity/Indicators/Indicators.qmltypesnew file+278
@@ -0,0 +1,278 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable Unity.Indicators 0.1 plugins'
8+
9+Module {
10+ Component {
11+ name: "ActionState"
12+ prototype: "QObject"
13+ exports: ["Unity.Indicators/ActionState 0.1"]
14+ isCreatable: false
15+ exportMetaObjectRevisions: [0]
16+ Enum {
17+ name: "ActionStates"
18+ values: {
19+ "Label": 0,
20+ "IconSource": 1,
21+ "AccessableName": 2,
22+ "Visible": 3
23+ }
24+ }
25+ }
26+ Component { name: "ActionStateParser"; prototype: "QObject" }
27+ Component {
28+ name: "FlatMenuProxyModelRole"
29+ prototype: "QObject"
30+ exports: ["Unity.Indicators/FlatMenuProxyModelRole 0.1"]
31+ isCreatable: false
32+ exportMetaObjectRevisions: [0]
33+ Enum {
34+ name: "Roles"
35+ values: {
36+ "Action": 1,
37+ "Label": 2,
38+ "Extra": 3,
39+ "Depth": 4,
40+ "hasSection": 5,
41+ "hasSubMenu": 6
42+ }
43+ }
44+ }
45+ Component {
46+ name: "IndicatorsManager"
47+ prototype: "QObject"
48+ exports: ["Unity.Indicators/IndicatorsManager 0.1"]
49+ exportMetaObjectRevisions: [0]
50+ Property { name: "loaded"; type: "bool"; isReadonly: true }
51+ Signal {
52+ name: "loadedChanged"
53+ Parameter { type: "bool" }
54+ }
55+ Signal {
56+ name: "indicatorLoaded"
57+ Parameter { name: "indicator_name"; type: "string" }
58+ }
59+ Signal {
60+ name: "indicatorAboutToBeUnloaded"
61+ Parameter { name: "indicator_name"; type: "string" }
62+ }
63+ Method {
64+ name: "load"
65+ Parameter { name: "profile"; type: "string" }
66+ }
67+ Method { name: "unload" }
68+ }
69+ Component {
70+ name: "IndicatorsModel"
71+ prototype: "QAbstractListModel"
72+ exports: ["Unity.Indicators/IndicatorsModel 0.1"]
73+ exportMetaObjectRevisions: [0]
74+ Property { name: "count"; type: "int"; isReadonly: true }
75+ Signal {
76+ name: "indicatorDataChanged"
77+ Parameter { name: "data"; type: "QVariant" }
78+ }
79+ Method {
80+ name: "load"
81+ Parameter { name: "profile"; type: "string" }
82+ }
83+ Method { name: "unload" }
84+ Method {
85+ name: "data"
86+ type: "QVariant"
87+ Parameter { name: "row"; type: "int" }
88+ Parameter { name: "role"; type: "int" }
89+ }
90+ }
91+ Component {
92+ name: "IndicatorsModelRole"
93+ prototype: "QObject"
94+ exports: ["Unity.Indicators/IndicatorsModelRole 0.1"]
95+ isCreatable: false
96+ exportMetaObjectRevisions: [0]
97+ Enum {
98+ name: "Roles"
99+ values: {
100+ "Identifier": 0,
101+ "Position": 1,
102+ "WidgetSource": 2,
103+ "PageSource": 3,
104+ "IndicatorProperties": 4,
105+ "IsVisible": 5
106+ }
107+ }
108+ }
109+ Component {
110+ name: "MenuContentActivator"
111+ prototype: "QObject"
112+ exports: ["Unity.Indicators/MenuContentActivator 0.1"]
113+ exportMetaObjectRevisions: [0]
114+ Property { name: "baseIndex"; type: "int" }
115+ Property { name: "running"; type: "bool" }
116+ Property { name: "count"; type: "int" }
117+ Property { name: "content"; type: "MenuContentState"; isList: true; isReadonly: true }
118+ Signal {
119+ name: "baseIndexChanged"
120+ Parameter { name: "baseIndex"; type: "int" }
121+ }
122+ Signal {
123+ name: "deltaChanged"
124+ Parameter { name: "delta"; type: "int" }
125+ }
126+ Signal {
127+ name: "runningChanged"
128+ Parameter { name: "running"; type: "bool" }
129+ }
130+ Signal {
131+ name: "countChanged"
132+ Parameter { name: "count"; type: "int" }
133+ }
134+ Method { name: "restart" }
135+ Method { name: "stop" }
136+ Method { name: "clear" }
137+ Method {
138+ name: "isMenuContentActive"
139+ type: "bool"
140+ Parameter { name: "index"; type: "int" }
141+ }
142+ }
143+ Component {
144+ name: "MenuContentState"
145+ prototype: "QObject"
146+ exports: ["Unity.Indicators/MenuContentState 0.1"]
147+ isCreatable: false
148+ exportMetaObjectRevisions: [0]
149+ Property { name: "active"; type: "bool"; isReadonly: true }
150+ }
151+ Component {
152+ name: "ModelPrinter"
153+ prototype: "QObject"
154+ exports: ["Unity.Indicators/ModelPrinter 0.1"]
155+ exportMetaObjectRevisions: [0]
156+ Property { name: "model"; type: "UnityMenuModel"; isPointer: true }
157+ Property { name: "text"; type: "string"; isReadonly: true }
158+ Method { name: "text"; type: "string" }
159+ }
160+ Component {
161+ name: "NetworkActionState"
162+ prototype: "QObject"
163+ exports: ["Unity.Indicators/NetworkActionState 0.1"]
164+ isCreatable: false
165+ exportMetaObjectRevisions: [0]
166+ Enum {
167+ name: "NetworkActionStates"
168+ values: {
169+ "Connection": 1,
170+ "SignalStrength": 2
171+ }
172+ }
173+ }
174+ Component {
175+ name: "NetworkConnection"
176+ prototype: "QObject"
177+ exports: ["Unity.Indicators/NetworkConnection 0.1"]
178+ isCreatable: false
179+ exportMetaObjectRevisions: [0]
180+ Enum {
181+ name: "NetworkConnectionStates"
182+ values: {
183+ "Initial": 0,
184+ "Activating": 1,
185+ "Activated": 2,
186+ "Deactivating": 3
187+ }
188+ }
189+ }
190+ Component {
191+ name: "QAbstractProxyModel"
192+ prototype: "QAbstractItemModel"
193+ Property { name: "sourceModel"; type: "QAbstractItemModel"; isPointer: true }
194+ }
195+ Component { name: "QIdentityProxyModel"; prototype: "QAbstractProxyModel" }
196+ Component {
197+ name: "RootActionState"
198+ prototype: "ActionStateParser"
199+ exports: ["Unity.Indicators/RootActionState 0.1"]
200+ exportMetaObjectRevisions: [0]
201+ Property { name: "menu"; type: "UnityMenuModel"; isPointer: true }
202+ Property { name: "valid"; type: "bool"; isReadonly: true }
203+ Property { name: "title"; type: "string"; isReadonly: true }
204+ Property { name: "leftLabel"; type: "string"; isReadonly: true }
205+ Property { name: "rightLabel"; type: "string"; isReadonly: true }
206+ Property { name: "icons"; type: "QStringList"; isReadonly: true }
207+ Property { name: "accessibleName"; type: "string"; isReadonly: true }
208+ Property { name: "visible"; type: "bool"; isReadonly: true }
209+ Signal { name: "updated" }
210+ Signal { name: "indexChanged" }
211+ }
212+ Component {
213+ name: "UnityMenuModelCache"
214+ prototype: "QObject"
215+ exports: ["Unity.Indicators/UnityMenuModelCache 0.1"]
216+ isCreatable: false
217+ isSingleton: true
218+ exportMetaObjectRevisions: [0]
219+ Method {
220+ name: "model"
221+ type: "UnityMenuModel*"
222+ Parameter { name: "path"; type: "string" }
223+ }
224+ Method {
225+ name: "registerModel"
226+ Parameter { name: "path"; type: "string" }
227+ Parameter { name: "menuModel"; type: "UnityMenuModel"; isPointer: true }
228+ }
229+ }
230+ Component {
231+ name: "UnityMenuModelStack"
232+ prototype: "QObject"
233+ exports: ["Unity.Indicators/UnityMenuModelStack 0.1"]
234+ exportMetaObjectRevisions: [0]
235+ Property { name: "head"; type: "UnityMenuModel"; isPointer: true }
236+ Property { name: "tail"; type: "UnityMenuModel"; isReadonly: true; isPointer: true }
237+ Property { name: "count"; type: "int"; isReadonly: true }
238+ Signal {
239+ name: "headChanged"
240+ Parameter { name: "head"; type: "UnityMenuModel"; isPointer: true }
241+ }
242+ Signal {
243+ name: "tailChanged"
244+ Parameter { name: "tail"; type: "UnityMenuModel"; isPointer: true }
245+ }
246+ Signal {
247+ name: "countChanged"
248+ Parameter { name: "count"; type: "int" }
249+ }
250+ Method {
251+ name: "push"
252+ Parameter { name: "model"; type: "UnityMenuModel"; isPointer: true }
253+ Parameter { name: "menuIndex"; type: "int" }
254+ }
255+ Method { name: "pop"; type: "UnityMenuModel*" }
256+ }
257+ Component {
258+ name: "VisibleIndicatorsModel"
259+ prototype: "QIdentityProxyModel"
260+ exports: ["Unity.Indicators/VisibleIndicatorsModel 0.1"]
261+ exportMetaObjectRevisions: [0]
262+ Property { name: "model"; type: "QAbstractItemModel"; isPointer: true }
263+ Property { name: "visible"; type: "QVariantMap" }
264+ Signal { name: "totalCountChanged" }
265+ Method {
266+ name: "onBeginRowInserted"
267+ Parameter { type: "QModelIndex" }
268+ Parameter { name: "start"; type: "int" }
269+ Parameter { name: "end"; type: "int" }
270+ }
271+ Method {
272+ name: "onRowInserted"
273+ Parameter { type: "QModelIndex" }
274+ Parameter { name: "start"; type: "int" }
275+ Parameter { name: "end"; type: "int" }
276+ }
277+ }
278+}
plugins/Unity/Indicators/qml/qmldir → plugins/Unity/Indicators/qmldirrenamed−4
@@ -4,7 +4,3 @@ typeinfo Indicators.qmltypes
4
4
5CachedUnityMenuModel 0.1 CachedUnityMenuModel.qml
5CachedUnityMenuModel 0.1 CachedUnityMenuModel.qml
6IndicatorBase 0.1 IndicatorBase.qml
6IndicatorBase 0.1 IndicatorBase.qml
7−MenuItemFactory 0.1 MenuItemFactory.qml
8−MessageMenuItemFactory 0.1 MessageMenuItemFactory.qml
9−
10−internal RemoveBackground RemoveBackground.qml
plugins/Unity/Launcher/Launcher.qmltypesnew file+174
@@ -0,0 +1,174 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable Unity.Launcher 0.1 plugins'
8+
9+Module {
10+ Component {
11+ name: "LauncherItem"
12+ prototype: "unity::shell::launcher::LauncherItemInterface"
13+ exports: ["Unity.Launcher/LauncherItem 0.1"]
14+ isCreatable: false
15+ exportMetaObjectRevisions: [0]
16+ Signal {
17+ name: "favoriteChanged"
18+ Parameter { name: "favorite"; type: "bool" }
19+ }
20+ Signal {
21+ name: "runningChanged"
22+ Parameter { name: "running"; type: "bool" }
23+ }
24+ }
25+ Component {
26+ name: "LauncherModel"
27+ prototype: "unity::shell::launcher::LauncherModelInterface"
28+ exports: ["Unity.Launcher/LauncherModel 0.1"]
29+ isCreatable: false
30+ isSingleton: true
31+ exportMetaObjectRevisions: [0]
32+ Method {
33+ name: "get"
34+ type: "unity::shell::launcher::LauncherItemInterface*"
35+ Parameter { name: "index"; type: "int" }
36+ }
37+ Method {
38+ name: "move"
39+ Parameter { name: "oldIndex"; type: "int" }
40+ Parameter { name: "newIndex"; type: "int" }
41+ }
42+ Method {
43+ name: "pin"
44+ Parameter { name: "appId"; type: "string" }
45+ Parameter { name: "index"; type: "int" }
46+ }
47+ Method {
48+ name: "pin"
49+ Parameter { name: "appId"; type: "string" }
50+ }
51+ Method {
52+ name: "requestRemove"
53+ Parameter { name: "appId"; type: "string" }
54+ }
55+ Method {
56+ name: "quickListActionInvoked"
57+ Parameter { name: "appId"; type: "string" }
58+ Parameter { name: "actionIndex"; type: "int" }
59+ }
60+ Method {
61+ name: "setUser"
62+ Parameter { name: "username"; type: "string" }
63+ }
64+ Method {
65+ name: "getUrlForAppId"
66+ type: "string"
67+ Parameter { name: "appId"; type: "string" }
68+ }
69+ }
70+ Component {
71+ name: "QuickListModel"
72+ prototype: "unity::shell::launcher::QuickListModelInterface"
73+ exports: ["Unity.Launcher/QuickListModel 0.1"]
74+ isCreatable: false
75+ exportMetaObjectRevisions: [0]
76+ }
77+ Component {
78+ name: "unity::shell::launcher::LauncherItemInterface"
79+ prototype: "QObject"
80+ exports: ["Unity.Launcher/LauncherItemInterface 0.1"]
81+ isCreatable: false
82+ exportMetaObjectRevisions: [0]
83+ Property { name: "appId"; type: "string"; isReadonly: true }
84+ Property { name: "name"; type: "string"; isReadonly: true }
85+ Property { name: "icon"; type: "string"; isReadonly: true }
86+ Property { name: "pinned"; type: "bool"; isReadonly: true }
87+ Property { name: "running"; type: "bool"; isReadonly: true }
88+ Property { name: "recent"; type: "bool"; isReadonly: true }
89+ Property { name: "progress"; type: "int"; isReadonly: true }
90+ Property { name: "count"; type: "int"; isReadonly: true }
91+ Property { name: "focused"; type: "bool"; isReadonly: true }
92+ Property {
93+ name: "quickList"
94+ type: "unity::shell::launcher::QuickListModelInterface"
95+ isReadonly: true
96+ isPointer: true
97+ }
98+ Signal {
99+ name: "pinnedChanged"
100+ Parameter { name: "pinned"; type: "bool" }
101+ }
102+ Signal {
103+ name: "runningChanged"
104+ Parameter { name: "running"; type: "bool" }
105+ }
106+ Signal {
107+ name: "recentChanged"
108+ Parameter { name: "running"; type: "bool" }
109+ }
110+ Signal {
111+ name: "progressChanged"
112+ Parameter { name: "progress"; type: "int" }
113+ }
114+ Signal {
115+ name: "countChanged"
116+ Parameter { name: "count"; type: "int" }
117+ }
118+ Signal {
119+ name: "focusedChanged"
120+ Parameter { name: "focused"; type: "bool" }
121+ }
122+ }
123+ Component {
124+ name: "unity::shell::launcher::LauncherModelInterface"
125+ prototype: "QAbstractListModel"
126+ exports: ["Unity.Launcher/LauncherModelInterface 0.1"]
127+ isCreatable: false
128+ exportMetaObjectRevisions: [0]
129+ Property {
130+ name: "applicationManager"
131+ type: "unity::shell::application::ApplicationManagerInterface"
132+ isPointer: true
133+ }
134+ Method {
135+ name: "move"
136+ Parameter { name: "oldIndex"; type: "int" }
137+ Parameter { name: "newIndex"; type: "int" }
138+ }
139+ Method {
140+ name: "get"
141+ type: "unity::shell::launcher::LauncherItemInterface*"
142+ Parameter { name: "index"; type: "int" }
143+ }
144+ Method {
145+ name: "pin"
146+ Parameter { name: "appId"; type: "string" }
147+ Parameter { name: "index"; type: "int" }
148+ }
149+ Method {
150+ name: "pin"
151+ Parameter { name: "appId"; type: "string" }
152+ }
153+ Method {
154+ name: "requestRemove"
155+ Parameter { name: "appId"; type: "string" }
156+ }
157+ Method {
158+ name: "quickListActionInvoked"
159+ Parameter { name: "appId"; type: "string" }
160+ Parameter { name: "actionIndex"; type: "int" }
161+ }
162+ Method {
163+ name: "setUser"
164+ Parameter { name: "username"; type: "string" }
165+ }
166+ }
167+ Component {
168+ name: "unity::shell::launcher::QuickListModelInterface"
169+ prototype: "QAbstractListModel"
170+ exports: ["Unity.Launcher/QuickListInterface 0.1"]
171+ isCreatable: false
172+ exportMetaObjectRevisions: [0]
173+ }
174+}
plugins/Unity/Launcher/launcheritem.cpp+2−2
@@ -40,7 +40,7 @@ LauncherItem::LauncherItem(const QString &appId, const QString &name, const QStr
40 m_quickList->appendAction(nameAction);
40 m_quickList->appendAction(nameAction);
41 QuickListEntry pinningAction;
41 QuickListEntry pinningAction;
42 pinningAction.setActionId("pin_item");
42 pinningAction.setActionId("pin_item");
43− pinningAction.setText(gettext("Lock to Launcher"));
43+ pinningAction.setText(gettext("Pin shortcut"));
44 m_quickList->appendAction(pinningAction);
44 m_quickList->appendAction(pinningAction);
45}
45}
46
46
@@ -70,7 +70,7 @@ void LauncherItem::setPinned(bool pinned)
70 m_pinned = pinned;
70 m_pinned = pinned;
71 QuickListEntry entry;
71 QuickListEntry entry;
72 entry.setActionId("pin_item");
72 entry.setActionId("pin_item");
73− entry.setText(pinned ? gettext("Unlock from Launcher") : gettext("Lock to Launcher"));
73+ entry.setText(pinned ? gettext("Unpin shortcut") : gettext("Pin shortcut"));
74 m_quickList->updateAction(entry);
74 m_quickList->updateAction(entry);
75 Q_EMIT pinnedChanged(pinned);
75 Q_EMIT pinnedChanged(pinned);
76 }
76 }
plugins/Unity/Launcher/launchermodel.cpp+3−1
@@ -128,7 +128,7 @@ void LauncherModel::pin(const QString &appId, int index)
128 if (index == -1 || index == currentIndex) {
128 if (index == -1 || index == currentIndex) {
129 m_list.at(currentIndex)->setPinned(true);
129 m_list.at(currentIndex)->setPinned(true);
130 QModelIndex modelIndex = this->index(currentIndex);
130 QModelIndex modelIndex = this->index(currentIndex);
131− Q_EMIT dataChanged(modelIndex, modelIndex);
131+ Q_EMIT dataChanged(modelIndex, modelIndex, QVector<int>() << RolePinned);
132 } else {
132 } else {
133 move(currentIndex, index);
133 move(currentIndex, index);
134 // move() will store the list to the backend itself, so just exit at this point.
134 // move() will store the list to the backend itself, so just exit at this point.
@@ -159,6 +159,8 @@ void LauncherModel::requestRemove(const QString &appId)
159
159
160 if (m_appManager->findApplication(appId)) {
160 if (m_appManager->findApplication(appId)) {
161 m_list.at(index)->setPinned(false);
161 m_list.at(index)->setPinned(false);
162+ QModelIndex modelIndex = this->index(index);
163+ Q_EMIT dataChanged(modelIndex, modelIndex, QVector<int>() << RolePinned);
162 return;
164 return;
163 }
165 }
164
166
plugins/Unity/Session/Session.qmltypesnew file+25
@@ -0,0 +1,25 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable Unity.Session 0.1 plugins'
8+
9+Module {
10+ Component {
11+ name: "DBusUnitySessionService"
12+ prototype: "QObject"
13+ exports: ["Unity.Session/DBusUnitySessionService 0.1"]
14+ isCreatable: false
15+ isSingleton: true
16+ exportMetaObjectRevisions: [0]
17+ Signal {
18+ name: "logoutRequested"
19+ Parameter { name: "have_inhibitors"; type: "bool" }
20+ }
21+ Signal { name: "logoutReady" }
22+ Method { name: "Logout" }
23+ Method { name: "RequestLogout" }
24+ }
25+}
plugins/Utils/Utils.qmltypesnew file+143
@@ -0,0 +1,143 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable Utils 0.1 plugins'
8+
9+Module {
10+ Component {
11+ name: "EasingCurve"
12+ prototype: "QObject"
13+ exports: ["Utils/EasingCurve 0.1"]
14+ exportMetaObjectRevisions: [0]
15+ Property { name: "type"; type: "QEasingCurve::Type" }
16+ Property { name: "period"; type: "double" }
17+ Property { name: "progress"; type: "double" }
18+ Property { name: "value"; type: "double"; isReadonly: true }
19+ }
20+ Component {
21+ name: "QAbstractProxyModel"
22+ prototype: "QAbstractItemModel"
23+ Property { name: "sourceModel"; type: "QAbstractItemModel"; isPointer: true }
24+ }
25+ Component { name: "QIdentityProxyModel"; prototype: "QAbstractProxyModel" }
26+ Component {
27+ name: "QLimitProxyModelQML"
28+ prototype: "QIdentityProxyModel"
29+ exports: ["Utils/LimitProxyModel 0.1"]
30+ exportMetaObjectRevisions: [0]
31+ Property { name: "model"; type: "QAbstractItemModel"; isPointer: true }
32+ Property { name: "limit"; type: "int" }
33+ Property { name: "count"; type: "int"; isReadonly: true }
34+ Signal { name: "totalCountChanged" }
35+ }
36+ Component {
37+ name: "QSortFilterProxyModel"
38+ prototype: "QAbstractProxyModel"
39+ Property { name: "filterRegExp"; type: "QRegExp" }
40+ Property { name: "filterKeyColumn"; type: "int" }
41+ Property { name: "dynamicSortFilter"; type: "bool" }
42+ Property { name: "filterCaseSensitivity"; type: "Qt::CaseSensitivity" }
43+ Property { name: "sortCaseSensitivity"; type: "Qt::CaseSensitivity" }
44+ Property { name: "isSortLocaleAware"; type: "bool" }
45+ Property { name: "sortRole"; type: "int" }
46+ Property { name: "filterRole"; type: "int" }
47+ Method {
48+ name: "setFilterRegExp"
49+ Parameter { name: "pattern"; type: "string" }
50+ }
51+ Method {
52+ name: "setFilterWildcard"
53+ Parameter { name: "pattern"; type: "string" }
54+ }
55+ Method {
56+ name: "setFilterFixedString"
57+ Parameter { name: "pattern"; type: "string" }
58+ }
59+ Method { name: "clear" }
60+ Method { name: "invalidate" }
61+ }
62+ Component {
63+ name: "QSortFilterProxyModelQML"
64+ prototype: "QSortFilterProxyModel"
65+ exports: ["Utils/SortFilterProxyModel 0.1"]
66+ exportMetaObjectRevisions: [0]
67+ Property { name: "model"; type: "QAbstractItemModel"; isPointer: true }
68+ Property { name: "totalCount"; type: "int"; isReadonly: true }
69+ Property { name: "count"; type: "int"; isReadonly: true }
70+ Property { name: "invertMatch"; type: "bool" }
71+ Signal {
72+ name: "invertMatchChanged"
73+ Parameter { type: "bool" }
74+ }
75+ Method {
76+ name: "get"
77+ type: "QVariantMap"
78+ Parameter { name: "row"; type: "int" }
79+ }
80+ Method {
81+ name: "data"
82+ type: "QVariant"
83+ Parameter { name: "row"; type: "int" }
84+ Parameter { name: "role"; type: "int" }
85+ }
86+ Method { name: "count"; type: "int" }
87+ Method {
88+ name: "findFirst"
89+ type: "int"
90+ Parameter { name: "role"; type: "int" }
91+ Parameter { name: "value"; type: "QVariant" }
92+ }
93+ Method {
94+ name: "mapRowToSource"
95+ type: "int"
96+ Parameter { name: "row"; type: "int" }
97+ }
98+ Method {
99+ name: "mapFromSource"
100+ type: "int"
101+ Parameter { name: "row"; type: "int" }
102+ }
103+ Method {
104+ name: "mapToSource"
105+ type: "int"
106+ Parameter { name: "row"; type: "int" }
107+ }
108+ }
109+ Component {
110+ name: "TimeFormatter"
111+ prototype: "QObject"
112+ exports: ["Utils/GDateTimeFormatter 0.1", "Utils/TimeFormatter 0.1"]
113+ exportMetaObjectRevisions: [0, 0]
114+ Property { name: "format"; type: "string" }
115+ Property { name: "timeString"; type: "string"; isReadonly: true }
116+ Property { name: "time"; type: "qlonglong" }
117+ Signal {
118+ name: "formatChanged"
119+ Parameter { name: "format"; type: "string" }
120+ }
121+ Signal {
122+ name: "timeStringChanged"
123+ Parameter { name: "timeString"; type: "string" }
124+ }
125+ Signal {
126+ name: "timeChanged"
127+ Parameter { name: "time"; type: "qlonglong" }
128+ }
129+ }
130+ Component {
131+ name: "UnityMenuModelPaths"
132+ prototype: "QObject"
133+ exports: ["Utils/UnityMenuModelPaths 0.1"]
134+ exportMetaObjectRevisions: [0]
135+ Property { name: "source"; type: "QVariant" }
136+ Property { name: "busName"; type: "QByteArray"; isReadonly: true }
137+ Property { name: "actions"; type: "QVariantMap"; isReadonly: true }
138+ Property { name: "menuObjectPath"; type: "QByteArray"; isReadonly: true }
139+ Property { name: "busNameHint"; type: "QByteArray" }
140+ Property { name: "actionsHint"; type: "QByteArray" }
141+ Property { name: "menuObjectPathHint"; type: "QByteArray" }
142+ }
143+}
plugins/Utils/easingcurve.cpp+3−1
@@ -20,7 +20,9 @@
20
20
21
21
22EasingCurve::EasingCurve(QObject *parent):
22EasingCurve::EasingCurve(QObject *parent):
23− QObject(parent)
23+ QObject(parent),
24+ m_progress(0),
25+ m_value(0)
24{
26{
25
27
26}
28}
po/am.po+33−9
@@ -7,24 +7,24 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11"PO-Revision-Date: 2014-01-18 19:28+0000\n"
11"PO-Revision-Date: 2014-01-18 19:28+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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:36+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "ማስነሻው ላይ መቆለፊያ"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "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,7 +80,7 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr ""
85msgstr ""
86
86
@@ -165,11 +165,35 @@ msgstr "የመግቢያ ቃል ማሳያ"
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr "መፈለጊያ"
194msgstr "መፈለጊያ"
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr "እባክዎን ያስገቡ %1"
199msgstr "እባክዎን ያስገቡ %1"
po/ar.po+33−9
@@ -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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:36+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "ثبّت في الشريط"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "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"
@@ -83,7 +83,7 @@ msgstr "مكالمة طوارئ"
83msgid "OK"
83msgid "OK"
84msgstr ""
84msgstr ""
85
85
86−#: qml/Components/PageHeader.qml:365
86+#: qml/Components/PageHeader.qml:366
87msgid "Recent searches"
87msgid "Recent searches"
88msgstr "عمليات البحث الأخيرة"
88msgstr "عمليات البحث الأخيرة"
89
89
@@ -168,11 +168,35 @@ msgstr "عرض كلمة السر"
168msgid "Please enter SIM PIN"
168msgid "Please enter SIM PIN"
169msgstr "من فضلك أدخِل رقم التعريف الشخصي لبطاقة SIM"
169msgstr "من فضلك أدخِل رقم التعريف الشخصي لبطاقة SIM"
170
170
171+#: qml/Panel/Indicators/MenuItemFactory.qml:583
172+msgid "In queue…"
173+msgstr ""
174+
175+#: qml/Panel/Indicators/MenuItemFactory.qml:587
176+msgid "Downloading"
177+msgstr ""
178+
179+#: qml/Panel/Indicators/MenuItemFactory.qml:589
180+msgid "Paused, tap to resume"
181+msgstr ""
182+
183+#: qml/Panel/Indicators/MenuItemFactory.qml:591
184+msgid "Canceled"
185+msgstr ""
186+
187+#: qml/Panel/Indicators/MenuItemFactory.qml:593
188+msgid "Finished"
189+msgstr ""
190+
191+#: qml/Panel/Indicators/MenuItemFactory.qml:595
192+msgid "Failed, tap to retry"
193+msgstr ""
194+
171#: qml/Panel/SearchIndicator.qml:27
195#: qml/Panel/SearchIndicator.qml:27
172msgid "Search"
196msgid "Search"
173msgstr "ابحث"
197msgstr "ابحث"
174
198
175−#: qml/Shell.qml:334
199+#: qml/Shell.qml:359
176#, qt-format
200#, qt-format
177msgid "Please enter %1"
201msgid "Please enter %1"
178msgstr "من فضلك أدخِل %1"
202msgstr "من فضلك أدخِل %1"
po/ast.po+42−18
@@ -7,24 +7,24 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11−"PO-Revision-Date: 2014-04-04 02:16+0000\n"
11+"PO-Revision-Date: 2014-07-04 15:29+0000\n"
12−"Last-Translator: Xuacu Saturio <xuacusk8@gmail.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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:36+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Caltener nel Llanzador"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27−msgstr "Nun caltener nel llanzador"
27+msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -73,8 +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−"Agora domina los xestos de los bordes y pue principiar a usar el "
76+"Agora yá domines los xestos de los berbesos y pues entamar a usar el "
77−"teléfonu<br><br>Toque la pantalla pa comenzar"
77+"teléfonu<br><br>Toca la pantalla pa comenzar"
78
78
79#: qml/Components/Lockscreen.qml:214
79#: qml/Components/Lockscreen.qml:214
80msgid "Emergency Call"
80msgid "Emergency Call"
@@ -82,9 +82,9 @@ msgstr "Llamada d'emerxencia"
82
82
83#: qml/Components/Lockscreen.qml:231
83#: qml/Components/Lockscreen.qml:231
84msgid "OK"
84msgid "OK"
85−msgstr ""
85+msgstr "Aceutar"
86
86
87−#: qml/Components/PageHeader.qml:365
87+#: qml/Components/PageHeader.qml:366
88msgid "Recent searches"
88msgid "Recent searches"
89msgstr "Busques recientes"
89msgstr "Busques recientes"
90
90
@@ -99,11 +99,11 @@ msgstr "Hola"
99
99
100#: qml/Components/PinLockscreen.qml:198
100#: qml/Components/PinLockscreen.qml:198
101msgid "CANCEL"
101msgid "CANCEL"
102−msgstr ""
102+msgstr "ENCABOXAR"
103
103
104#: qml/Components/PinLockscreen.qml:216
104#: qml/Components/PinLockscreen.qml:216
105msgid "DONE"
105msgid "DONE"
106−msgstr ""
106+msgstr "FECHO"
107
107
108#: qml/Components/SeeMore.qml:35
108#: qml/Components/SeeMore.qml:35
109msgid "See more"
109msgid "See more"
@@ -139,7 +139,7 @@ msgstr "Unviar"
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 "Esliza pa desbloquiar"
143
143
144#: qml/Hud/HudParametrizedActionsPage.qml:132
144#: qml/Hud/HudParametrizedActionsPage.qml:132
145msgid "Confirm"
145msgid "Confirm"
@@ -167,13 +167,37 @@ msgstr "Amosar contraseña"
167
167
168#: qml/Notifications/NotificationMenuItemFactory.qml:103
168#: qml/Notifications/NotificationMenuItemFactory.qml:103
169msgid "Please enter SIM PIN"
169msgid "Please enter SIM PIN"
170−msgstr "Escriba'l PIN de la SIM"
170+msgstr "Escribi'l PIN de la SIM"
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:583
173+msgid "In queue…"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:587
177+msgid "Downloading"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:589
181+msgid "Paused, tap to resume"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:591
185+msgid "Canceled"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:593
189+msgid "Finished"
190+msgstr ""
191+
192+#: qml/Panel/Indicators/MenuItemFactory.qml:595
193+msgid "Failed, tap to retry"
194+msgstr ""
171
195
172#: qml/Panel/SearchIndicator.qml:27
196#: qml/Panel/SearchIndicator.qml:27
173msgid "Search"
197msgid "Search"
174msgstr "Guetar"
198msgstr "Guetar"
175
199
176−#: qml/Shell.qml:334
200+#: qml/Shell.qml:359
177#, qt-format
201#, qt-format
178msgid "Please enter %1"
202msgid "Please enter %1"
179msgstr "Introduz %1"
203msgstr "Introduz %1"
po/az.po+33−9
@@ -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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:36+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Panelə Bərkit"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27−msgstr "Paneldən Qaldır"
27+msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -81,7 +81,7 @@ msgstr "Zərurət zəngi"
81msgid "OK"
81msgid "OK"
82msgstr ""
82msgstr ""
83
83
84−#: qml/Components/PageHeader.qml:365
84+#: qml/Components/PageHeader.qml:366
85msgid "Recent searches"
85msgid "Recent searches"
86msgstr "Son axtarışlar"
86msgstr "Son axtarışlar"
87
87
@@ -166,11 +166,35 @@ msgstr "Parolu göstər"
166msgid "Please enter SIM PIN"
166msgid "Please enter SIM PIN"
167msgstr ""
167msgstr ""
168
168
169+#: qml/Panel/Indicators/MenuItemFactory.qml:583
170+msgid "In queue…"
171+msgstr ""
172+
173+#: qml/Panel/Indicators/MenuItemFactory.qml:587
174+msgid "Downloading"
175+msgstr ""
176+
177+#: qml/Panel/Indicators/MenuItemFactory.qml:589
178+msgid "Paused, tap to resume"
179+msgstr ""
180+
181+#: qml/Panel/Indicators/MenuItemFactory.qml:591
182+msgid "Canceled"
183+msgstr ""
184+
185+#: qml/Panel/Indicators/MenuItemFactory.qml:593
186+msgid "Finished"
187+msgstr ""
188+
189+#: qml/Panel/Indicators/MenuItemFactory.qml:595
190+msgid "Failed, tap to retry"
191+msgstr ""
192+
169#: qml/Panel/SearchIndicator.qml:27
193#: qml/Panel/SearchIndicator.qml:27
170msgid "Search"
194msgid "Search"
171msgstr "Axtar"
195msgstr "Axtar"
172
196
173−#: qml/Shell.qml:334
197+#: qml/Shell.qml:359
174#, qt-format
198#, qt-format
175msgid "Please enter %1"
199msgid "Please enter %1"
176msgstr "Xahiş edirik daxil edin: %1"
200msgstr "Xahiş edirik daxil edin: %1"
po/bg.po+33−9
@@ -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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:36+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Заключване към панела"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "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"
@@ -87,7 +87,7 @@ msgstr "Спешно повикване"
87msgid "OK"
87msgid "OK"
88msgstr ""
88msgstr ""
89
89
90−#: qml/Components/PageHeader.qml:365
90+#: qml/Components/PageHeader.qml:366
91msgid "Recent searches"
91msgid "Recent searches"
92msgstr "Последни търсения"
92msgstr "Последни търсения"
93
93
@@ -172,11 +172,35 @@ msgstr "Покажи паролата"
172msgid "Please enter SIM PIN"
172msgid "Please enter SIM PIN"
173msgstr ""
173msgstr ""
174
174
175+#: qml/Panel/Indicators/MenuItemFactory.qml:583
176+msgid "In queue…"
177+msgstr ""
178+
179+#: qml/Panel/Indicators/MenuItemFactory.qml:587
180+msgid "Downloading"
181+msgstr ""
182+
183+#: qml/Panel/Indicators/MenuItemFactory.qml:589
184+msgid "Paused, tap to resume"
185+msgstr ""
186+
187+#: qml/Panel/Indicators/MenuItemFactory.qml:591
188+msgid "Canceled"
189+msgstr ""
190+
191+#: qml/Panel/Indicators/MenuItemFactory.qml:593
192+msgid "Finished"
193+msgstr ""
194+
195+#: qml/Panel/Indicators/MenuItemFactory.qml:595
196+msgid "Failed, tap to retry"
197+msgstr ""
198+
175#: qml/Panel/SearchIndicator.qml:27
199#: qml/Panel/SearchIndicator.qml:27
176msgid "Search"
200msgid "Search"
177msgstr "Търсене"
201msgstr "Търсене"
178
202
179−#: qml/Shell.qml:334
203+#: qml/Shell.qml:359
180#, qt-format
204#, qt-format
181msgid "Please enter %1"
205msgid "Please enter %1"
182msgstr "Моля, въведете %1"
206msgstr "Моля, въведете %1"
po/br.po+33−9
@@ -7,24 +7,24 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11"PO-Revision-Date: 2014-06-16 11:41+0000\n"
11"PO-Revision-Date: 2014-06-16 11:41+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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:36+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Stagañ ouzh al lañser"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27−msgstr "Distagañ diouzh al lañser"
27+msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -87,7 +87,7 @@ msgstr "Pellgomzadenn vallus"
87msgid "OK"
87msgid "OK"
88msgstr "Mat eo"
88msgstr "Mat eo"
89
89
90−#: qml/Components/PageHeader.qml:365
90+#: qml/Components/PageHeader.qml:366
91msgid "Recent searches"
91msgid "Recent searches"
92msgstr "Enklaskoù graet nevez zo"
92msgstr "Enklaskoù graet nevez zo"
93
93
@@ -172,11 +172,35 @@ 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/Indicators/MenuItemFactory.qml:583
176+msgid "In queue…"
177+msgstr ""
178+
179+#: qml/Panel/Indicators/MenuItemFactory.qml:587
180+msgid "Downloading"
181+msgstr ""
182+
183+#: qml/Panel/Indicators/MenuItemFactory.qml:589
184+msgid "Paused, tap to resume"
185+msgstr ""
186+
187+#: qml/Panel/Indicators/MenuItemFactory.qml:591
188+msgid "Canceled"
189+msgstr ""
190+
191+#: qml/Panel/Indicators/MenuItemFactory.qml:593
192+msgid "Finished"
193+msgstr ""
194+
195+#: qml/Panel/Indicators/MenuItemFactory.qml:595
196+msgid "Failed, tap to retry"
197+msgstr ""
198+
175#: qml/Panel/SearchIndicator.qml:27
199#: qml/Panel/SearchIndicator.qml:27
176msgid "Search"
200msgid "Search"
177msgstr "Klask"
201msgstr "Klask"
178
202
179−#: qml/Shell.qml:334
203+#: qml/Shell.qml:359
180#, qt-format
204#, qt-format
181msgid "Please enter %1"
205msgid "Please enter %1"
182msgstr "Ebarzhit %1, mar plij"
206msgstr "Ebarzhit %1, mar plij"
po/bs.po+31−7
@@ -7,23 +7,23 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:36+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23msgstr ""
23msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -80,7 +80,7 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr ""
85msgstr ""
86
86
@@ -165,11 +165,35 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr ""
194msgstr ""
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr ""
199msgstr ""
po/ca.po+33−9
@@ -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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11"PO-Revision-Date: 2014-06-13 07:47+0000\n"
11"PO-Revision-Date: 2014-06-13 07:47+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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:36+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Mantén-la al llançador"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27−msgstr "No la mantinguis al llançador"
27+msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -88,7 +88,7 @@ msgstr "Trucada d'emergència"
88msgid "OK"
88msgid "OK"
89msgstr "D'acord"
89msgstr "D'acord"
90
90
91−#: qml/Components/PageHeader.qml:365
91+#: qml/Components/PageHeader.qml:366
92msgid "Recent searches"
92msgid "Recent searches"
93msgstr "Cerques recents"
93msgstr "Cerques recents"
94
94
@@ -173,11 +173,35 @@ 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/Indicators/MenuItemFactory.qml:583
177+msgid "In queue…"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:587
181+msgid "Downloading"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:589
185+msgid "Paused, tap to resume"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:591
189+msgid "Canceled"
190+msgstr ""
191+
192+#: qml/Panel/Indicators/MenuItemFactory.qml:593
193+msgid "Finished"
194+msgstr ""
195+
196+#: qml/Panel/Indicators/MenuItemFactory.qml:595
197+msgid "Failed, tap to retry"
198+msgstr ""
199+
176#: qml/Panel/SearchIndicator.qml:27
200#: qml/Panel/SearchIndicator.qml:27
177msgid "Search"
201msgid "Search"
178msgstr "Cerca"
202msgstr "Cerca"
179
203
180−#: qml/Shell.qml:334
204+#: qml/Shell.qml:359
181#, qt-format
205#, qt-format
182msgid "Please enter %1"
206msgid "Please enter %1"
183msgstr "Introduïu %1"
207msgstr "Introduïu %1"
po/ckb.po+33−9
@@ -7,24 +7,24 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "چەسباندن بە لانچرەوە"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "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,7 +80,7 @@ msgstr "هێڵی فریاگوزاری"
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr "دوایین گەڕانەکان"
85msgstr "دوایین گەڕانەکان"
86
86
@@ -165,11 +165,35 @@ msgstr "تێپەڕەوشە پیشان بدە"
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr "گەڕان"
194msgstr "گەڕان"
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr "تکایە %1 بنووسە"
199msgstr "تکایە %1 بنووسە"
po/cs.po+33−9
@@ -7,24 +7,24 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:36+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Přidat do Launcheru"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27−msgstr "Odebrat z Launcheru"
27+msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -80,7 +80,7 @@ msgstr "Tísňové volání"
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr "Poslední vyhledávání"
85msgstr "Poslední vyhledávání"
86
86
@@ -165,11 +165,35 @@ msgstr "Zobrazit heslo"
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr "Hledat"
194msgstr "Hledat"
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr "Zadejte prosím %1"
199msgstr "Zadejte prosím %1"
po/da.po+31−7
@@ -7,23 +7,23 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11"PO-Revision-Date: 2014-01-14 20:16+0000\n"
11"PO-Revision-Date: 2014-01-14 20:16+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Danish <da@li.org>\n"
13"Language-Team: Danish <da@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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:36+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23msgstr ""
23msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -80,7 +80,7 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr ""
85msgstr ""
86
86
@@ -165,11 +165,35 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr ""
194msgstr ""
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr ""
199msgstr ""
po/de.po+33−9
@@ -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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11"PO-Revision-Date: 2014-06-06 19:34+0000\n"
11"PO-Revision-Date: 2014-06-06 19:34+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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Im Starter sperren"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27−msgstr "Aus dem Starter entsperren"
27+msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -85,7 +85,7 @@ msgstr "Notruf"
85msgid "OK"
85msgid "OK"
86msgstr ""
86msgstr ""
87
87
88−#: qml/Components/PageHeader.qml:365
88+#: qml/Components/PageHeader.qml:366
89msgid "Recent searches"
89msgid "Recent searches"
90msgstr "Zuletzt verwendete Suchbegriffe"
90msgstr "Zuletzt verwendete Suchbegriffe"
91
91
@@ -170,11 +170,35 @@ 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/Indicators/MenuItemFactory.qml:583
174+msgid "In queue…"
175+msgstr ""
176+
177+#: qml/Panel/Indicators/MenuItemFactory.qml:587
178+msgid "Downloading"
179+msgstr ""
180+
181+#: qml/Panel/Indicators/MenuItemFactory.qml:589
182+msgid "Paused, tap to resume"
183+msgstr ""
184+
185+#: qml/Panel/Indicators/MenuItemFactory.qml:591
186+msgid "Canceled"
187+msgstr ""
188+
189+#: qml/Panel/Indicators/MenuItemFactory.qml:593
190+msgid "Finished"
191+msgstr ""
192+
193+#: qml/Panel/Indicators/MenuItemFactory.qml:595
194+msgid "Failed, tap to retry"
195+msgstr ""
196+
173#: qml/Panel/SearchIndicator.qml:27
197#: qml/Panel/SearchIndicator.qml:27
174msgid "Search"
198msgid "Search"
175msgstr "Suchen"
199msgstr "Suchen"
176
200
177−#: qml/Shell.qml:334
201+#: qml/Shell.qml:359
178#, qt-format
202#, qt-format
179msgid "Please enter %1"
203msgid "Please enter %1"
180msgstr "Bitte geben Sie %1 ein"
204msgstr "Bitte geben Sie %1 ein"
po/el.po+33−9
@@ -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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11"PO-Revision-Date: 2014-02-26 09:58+0000\n"
11"PO-Revision-Date: 2014-02-26 09:58+0000\n"
12"Last-Translator: j3lc <x_nikos@yahoo.gr>\n"
12"Last-Translator: j3lc <x_nikos@yahoo.gr>\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Διατήρηση στον εκκινητή"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "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"
@@ -84,7 +84,7 @@ msgstr "Κλήση έκτακτης ανάγκης"
84msgid "OK"
84msgid "OK"
85msgstr ""
85msgstr ""
86
86
87−#: qml/Components/PageHeader.qml:365
87+#: qml/Components/PageHeader.qml:366
88msgid "Recent searches"
88msgid "Recent searches"
89msgstr "Πρόσφατες αναζητήσεις"
89msgstr "Πρόσφατες αναζητήσεις"
90
90
@@ -169,11 +169,35 @@ msgstr "Εμφάνιση κωδικού"
169msgid "Please enter SIM PIN"
169msgid "Please enter SIM PIN"
170msgstr "Παρακαλώ εισάγετε το PIN της κάρτας SIM"
170msgstr "Παρακαλώ εισάγετε το PIN της κάρτας SIM"
171
171
172+#: qml/Panel/Indicators/MenuItemFactory.qml:583
173+msgid "In queue…"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:587
177+msgid "Downloading"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:589
181+msgid "Paused, tap to resume"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:591
185+msgid "Canceled"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:593
189+msgid "Finished"
190+msgstr ""
191+
192+#: qml/Panel/Indicators/MenuItemFactory.qml:595
193+msgid "Failed, tap to retry"
194+msgstr ""
195+
172#: qml/Panel/SearchIndicator.qml:27
196#: qml/Panel/SearchIndicator.qml:27
173msgid "Search"
197msgid "Search"
174msgstr "Αναζήτηση"
198msgstr "Αναζήτηση"
175
199
176−#: qml/Shell.qml:334
200+#: qml/Shell.qml:359
177#, qt-format
201#, qt-format
178msgid "Please enter %1"
202msgid "Please enter %1"
179msgstr "Πληκτρολογήστε %1"
203msgstr "Πληκτρολογήστε %1"
po/en_AU.po+31−7
@@ -7,23 +7,23 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11"PO-Revision-Date: 2013-09-28 07:46+0000\n"
11"PO-Revision-Date: 2013-09-28 07:46+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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23msgstr ""
23msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -80,7 +80,7 @@ msgstr "Emergency Call"
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr "Recent searches"
85msgstr "Recent searches"
86
86
@@ -165,11 +165,35 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr "Search"
194msgstr "Search"
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr "Please enter %1"
199msgstr "Please enter %1"
po/en_GB.po+40−16
@@ -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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11−"PO-Revision-Date: 2014-03-07 13:27+0000\n"
11+"PO-Revision-Date: 2014-07-10 10:59+0000\n"
12−"Last-Translator: Andi Chandler <Unknown>\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-11 06:15+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17111)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Lock to Launcher"
23+msgstr "Pin shortcut"
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27−msgstr "Unlock from Launcher"
27+msgstr "Unpin shortcut"
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -80,9 +80,9 @@ msgstr "Emergency Call"
80
80
81#: qml/Components/Lockscreen.qml:231
81#: qml/Components/Lockscreen.qml:231
82msgid "OK"
82msgid "OK"
83−msgstr ""
83+msgstr "OK"
84
84
85−#: qml/Components/PageHeader.qml:365
85+#: qml/Components/PageHeader.qml:366
86msgid "Recent searches"
86msgid "Recent searches"
87msgstr "Recent searches"
87msgstr "Recent searches"
88
88
@@ -97,11 +97,11 @@ msgstr "Hello"
97
97
98#: qml/Components/PinLockscreen.qml:198
98#: qml/Components/PinLockscreen.qml:198
99msgid "CANCEL"
99msgid "CANCEL"
100−msgstr ""
100+msgstr "CANCEL"
101
101
102#: qml/Components/PinLockscreen.qml:216
102#: qml/Components/PinLockscreen.qml:216
103msgid "DONE"
103msgid "DONE"
104−msgstr ""
104+msgstr "DONE"
105
105
106#: qml/Components/SeeMore.qml:35
106#: qml/Components/SeeMore.qml:35
107msgid "See more"
107msgid "See more"
@@ -113,7 +113,7 @@ msgstr "See less"
113
113
114#: qml/Dash/DashApps.qml:37
114#: qml/Dash/DashApps.qml:37
115msgid "Recent"
115msgid "Recent"
116−msgstr ""
116+msgstr "Recent"
117
117
118#: qml/Dash/Previews/PreviewActionCombo.qml:34
118#: qml/Dash/Previews/PreviewActionCombo.qml:34
119msgid "More..."
119msgid "More..."
@@ -137,7 +137,7 @@ msgstr "Send"
137
137
138#: qml/Greeter/Greeter.qml:157
138#: qml/Greeter/Greeter.qml:157
139msgid "Swipe to unlock"
139msgid "Swipe to unlock"
140−msgstr ""
140+msgstr "Swipe to unlock"
141
141
142#: qml/Hud/HudParametrizedActionsPage.qml:132
142#: qml/Hud/HudParametrizedActionsPage.qml:132
143msgid "Confirm"
143msgid "Confirm"
@@ -167,11 +167,35 @@ 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/Indicators/MenuItemFactory.qml:583
171+msgid "In queue…"
172+msgstr "In queue…"
173+
174+#: qml/Panel/Indicators/MenuItemFactory.qml:587
175+msgid "Downloading"
176+msgstr "Downloading"
177+
178+#: qml/Panel/Indicators/MenuItemFactory.qml:589
179+msgid "Paused, tap to resume"
180+msgstr "Paused, tap to resume"
181+
182+#: qml/Panel/Indicators/MenuItemFactory.qml:591
183+msgid "Canceled"
184+msgstr "Cancelled"
185+
186+#: qml/Panel/Indicators/MenuItemFactory.qml:593
187+msgid "Finished"
188+msgstr "Finished"
189+
190+#: qml/Panel/Indicators/MenuItemFactory.qml:595
191+msgid "Failed, tap to retry"
192+msgstr "Failed, tap to retry"
193+
170#: qml/Panel/SearchIndicator.qml:27
194#: qml/Panel/SearchIndicator.qml:27
171msgid "Search"
195msgid "Search"
172msgstr "Search"
196msgstr "Search"
173
197
174−#: qml/Shell.qml:334
198+#: qml/Shell.qml:359
175#, qt-format
199#, qt-format
176msgid "Please enter %1"
200msgid "Please enter %1"
177msgstr "Please enter %1"
201msgstr "Please enter %1"
po/eo.po+31−7
@@ -7,23 +7,23 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23msgstr ""
23msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -80,7 +80,7 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr ""
85msgstr ""
86
86
@@ -165,11 +165,35 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr ""
194msgstr ""
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr ""
199msgstr ""
po/es.po+33−9
@@ -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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11"PO-Revision-Date: 2014-06-26 03:08+0000\n"
11"PO-Revision-Date: 2014-06-26 03:08+0000\n"
12"Last-Translator: Adolfo Jayme <fitoschido@gmail.com>\n"
12"Last-Translator: Adolfo Jayme <fitoschido@gmail.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-06-27 07:13+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17077)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Fijar al lanzador"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27−msgstr "Quitar del lanzador"
27+msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -85,7 +85,7 @@ msgstr "Llamada de emergencia"
85msgid "OK"
85msgid "OK"
86msgstr "Aceptar"
86msgstr "Aceptar"
87
87
88−#: qml/Components/PageHeader.qml:365
88+#: qml/Components/PageHeader.qml:366
89msgid "Recent searches"
89msgid "Recent searches"
90msgstr "Búsquedas recientes"
90msgstr "Búsquedas recientes"
91
91
@@ -170,11 +170,35 @@ 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/Indicators/MenuItemFactory.qml:583
174+msgid "In queue…"
175+msgstr ""
176+
177+#: qml/Panel/Indicators/MenuItemFactory.qml:587
178+msgid "Downloading"
179+msgstr ""
180+
181+#: qml/Panel/Indicators/MenuItemFactory.qml:589
182+msgid "Paused, tap to resume"
183+msgstr ""
184+
185+#: qml/Panel/Indicators/MenuItemFactory.qml:591
186+msgid "Canceled"
187+msgstr ""
188+
189+#: qml/Panel/Indicators/MenuItemFactory.qml:593
190+msgid "Finished"
191+msgstr ""
192+
193+#: qml/Panel/Indicators/MenuItemFactory.qml:595
194+msgid "Failed, tap to retry"
195+msgstr ""
196+
173#: qml/Panel/SearchIndicator.qml:27
197#: qml/Panel/SearchIndicator.qml:27
174msgid "Search"
198msgid "Search"
175msgstr "Buscar"
199msgstr "Buscar"
176
200
177−#: qml/Shell.qml:334
201+#: qml/Shell.qml:359
178#, qt-format
202#, qt-format
179msgid "Please enter %1"
203msgid "Please enter %1"
180msgstr "Introduzca %1"
204msgstr "Introduzca %1"
po/eu.po+33−9
@@ -7,24 +7,24 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11"PO-Revision-Date: 2014-03-30 12:44+0000\n"
11"PO-Revision-Date: 2014-03-30 12:44+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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:36+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Lotu abiarazlera"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27−msgstr "Askatu abiarazletik"
27+msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -84,7 +84,7 @@ msgstr "Larrialdi-deia"
84msgid "OK"
84msgid "OK"
85msgstr ""
85msgstr ""
86
86
87−#: qml/Components/PageHeader.qml:365
87+#: qml/Components/PageHeader.qml:366
88msgid "Recent searches"
88msgid "Recent searches"
89msgstr "Azken bilaketak"
89msgstr "Azken bilaketak"
90
90
@@ -169,11 +169,35 @@ 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/Indicators/MenuItemFactory.qml:583
173+msgid "In queue…"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:587
177+msgid "Downloading"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:589
181+msgid "Paused, tap to resume"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:591
185+msgid "Canceled"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:593
189+msgid "Finished"
190+msgstr ""
191+
192+#: qml/Panel/Indicators/MenuItemFactory.qml:595
193+msgid "Failed, tap to retry"
194+msgstr ""
195+
172#: qml/Panel/SearchIndicator.qml:27
196#: qml/Panel/SearchIndicator.qml:27
173msgid "Search"
197msgid "Search"
174msgstr "Bilatu"
198msgstr "Bilatu"
175
199
176−#: qml/Shell.qml:334
200+#: qml/Shell.qml:359
177#, qt-format
201#, qt-format
178msgid "Please enter %1"
202msgid "Please enter %1"
179msgstr "Sartu %1"
203msgstr "Sartu %1"
po/fa.po+31−7
@@ -7,23 +7,23 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23msgstr ""
23msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -80,7 +80,7 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr ""
85msgstr ""
86
86
@@ -165,11 +165,35 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr ""
194msgstr ""
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr ""
199msgstr ""
po/fi.po+34−10
@@ -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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11−"PO-Revision-Date: 2014-06-14 10:23+0000\n"
11+"PO-Revision-Date: 2014-07-09 17:26+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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-10 07:29+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Kiinnitä käynnistimeen"
23+msgstr "Kiinnitä pikakuvake"
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27−msgstr "Poista käynnistimestä"
27+msgstr "Poista pikakuvakkeen kiinnitys"
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -82,7 +82,7 @@ msgstr "Hätäpuhelu"
82msgid "OK"
82msgid "OK"
83msgstr "OK"
83msgstr "OK"
84
84
85−#: qml/Components/PageHeader.qml:365
85+#: qml/Components/PageHeader.qml:366
86msgid "Recent searches"
86msgid "Recent searches"
87msgstr "Viimeisimmät haut"
87msgstr "Viimeisimmät haut"
88
88
@@ -167,11 +167,35 @@ 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/Indicators/MenuItemFactory.qml:583
171+msgid "In queue…"
172+msgstr "Jonossa…"
173+
174+#: qml/Panel/Indicators/MenuItemFactory.qml:587
175+msgid "Downloading"
176+msgstr "Ladataan"
177+
178+#: qml/Panel/Indicators/MenuItemFactory.qml:589
179+msgid "Paused, tap to resume"
180+msgstr "Keskeytetty, napauta palauttaaksesi"
181+
182+#: qml/Panel/Indicators/MenuItemFactory.qml:591
183+msgid "Canceled"
184+msgstr "Peruttu"
185+
186+#: qml/Panel/Indicators/MenuItemFactory.qml:593
187+msgid "Finished"
188+msgstr "Valmistunut"
189+
190+#: qml/Panel/Indicators/MenuItemFactory.qml:595
191+msgid "Failed, tap to retry"
192+msgstr "Epäonnistunut, napauta yrittääksesi uudelleen"
193+
170#: qml/Panel/SearchIndicator.qml:27
194#: qml/Panel/SearchIndicator.qml:27
171msgid "Search"
195msgid "Search"
172msgstr "Hae"
196msgstr "Hae"
173
197
174−#: qml/Shell.qml:334
198+#: qml/Shell.qml:359
175#, qt-format
199#, qt-format
176msgid "Please enter %1"
200msgid "Please enter %1"
177msgstr "Kirjoita %1"
201msgstr "Kirjoita %1"
po/fo.po+31−7
@@ -7,23 +7,23 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23msgstr ""
23msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -80,7 +80,7 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr ""
85msgstr ""
86
86
@@ -165,11 +165,35 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr "Leita"
194msgstr "Leita"
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr ""
199msgstr ""
po/fr.po+35−11
@@ -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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11−"PO-Revision-Date: 2014-06-08 20:45+0000\n"
11+"PO-Revision-Date: 2014-07-10 12:11+0000\n"
12−"Last-Translator: Pierre Slamich <pierre.slamich@gmail.com>\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-11 06:15+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17111)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Conserver dans le lanceur"
23+msgstr "Épingler le raccourci"
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27−msgstr "Retirer du lanceur"
27+msgstr "Détacher le raccourci"
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -89,7 +89,7 @@ msgstr "Appel d'urgence"
89msgid "OK"
89msgid "OK"
90msgstr "OK"
90msgstr "OK"
91
91
92−#: qml/Components/PageHeader.qml:365
92+#: qml/Components/PageHeader.qml:366
93msgid "Recent searches"
93msgid "Recent searches"
94msgstr "Recherches récentes"
94msgstr "Recherches récentes"
95
95
@@ -174,11 +174,35 @@ msgstr "Afficher le mot de passe"
174msgid "Please enter SIM PIN"
174msgid "Please enter SIM PIN"
175msgstr "Veuillez entrer le code PIN de votre carte SIM"
175msgstr "Veuillez entrer le code PIN de votre carte SIM"
176
176
177+#: qml/Panel/Indicators/MenuItemFactory.qml:583
178+msgid "In queue…"
179+msgstr "Dans la file d'attente..."
180+
181+#: qml/Panel/Indicators/MenuItemFactory.qml:587
182+msgid "Downloading"
183+msgstr "Téléchargement en cours"
184+
185+#: qml/Panel/Indicators/MenuItemFactory.qml:589
186+msgid "Paused, tap to resume"
187+msgstr "En pause, appuyez pour reprendre"
188+
189+#: qml/Panel/Indicators/MenuItemFactory.qml:591
190+msgid "Canceled"
191+msgstr "Annulé"
192+
193+#: qml/Panel/Indicators/MenuItemFactory.qml:593
194+msgid "Finished"
195+msgstr "Terminé"
196+
197+#: qml/Panel/Indicators/MenuItemFactory.qml:595
198+msgid "Failed, tap to retry"
199+msgstr "Échec, appuyez pour réessayer"
200+
177#: qml/Panel/SearchIndicator.qml:27
201#: qml/Panel/SearchIndicator.qml:27
178msgid "Search"
202msgid "Search"
179msgstr "Rechercher"
203msgstr "Rechercher"
180
204
181−#: qml/Shell.qml:334
205+#: qml/Shell.qml:359
182#, qt-format
206#, qt-format
183msgid "Please enter %1"
207msgid "Please enter %1"
184msgstr "Veuillez saisir %1"
208msgstr "Veuillez saisir %1"
po/gd.po+33−9
@@ -7,24 +7,24 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11"PO-Revision-Date: 2014-05-17 21:08+0000\n"
11"PO-Revision-Date: 2014-05-17 21:08+0000\n"
12"Last-Translator: Akerbeltz <fios@akerbeltz.org>\n"
12"Last-Translator: Akerbeltz <fios@akerbeltz.org>\n"
13"Language-Team: Gaelic; Scottish <gd@li.org>\n"
13"Language-Team: Gaelic; Scottish <gd@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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Glais ris an lòinsear"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27−msgstr "Dealaich on lòinsear"
27+msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -88,7 +88,7 @@ msgstr "Gairm èiginn"
88msgid "OK"
88msgid "OK"
89msgstr ""
89msgstr ""
90
90
91−#: qml/Components/PageHeader.qml:365
91+#: qml/Components/PageHeader.qml:366
92msgid "Recent searches"
92msgid "Recent searches"
93msgstr "Na lorg thu o chionn goirid"
93msgstr "Na lorg thu o chionn goirid"
94
94
@@ -173,11 +173,35 @@ msgstr "Seall am facal-faire"
173msgid "Please enter SIM PIN"
173msgid "Please enter SIM PIN"
174msgstr "Cuir a-steach SIM PIN"
174msgstr "Cuir a-steach SIM PIN"
175
175
176+#: qml/Panel/Indicators/MenuItemFactory.qml:583
177+msgid "In queue…"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:587
181+msgid "Downloading"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:589
185+msgid "Paused, tap to resume"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:591
189+msgid "Canceled"
190+msgstr ""
191+
192+#: qml/Panel/Indicators/MenuItemFactory.qml:593
193+msgid "Finished"
194+msgstr ""
195+
196+#: qml/Panel/Indicators/MenuItemFactory.qml:595
197+msgid "Failed, tap to retry"
198+msgstr ""
199+
176#: qml/Panel/SearchIndicator.qml:27
200#: qml/Panel/SearchIndicator.qml:27
177msgid "Search"
201msgid "Search"
178msgstr "Lorg"
202msgstr "Lorg"
179
203
180−#: qml/Shell.qml:334
204+#: qml/Shell.qml:359
181#, qt-format
205#, qt-format
182msgid "Please enter %1"
206msgid "Please enter %1"
183msgstr "Cuir a-steach %1"
207msgstr "Cuir a-steach %1"
po/gl.po+41−15
@@ -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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11−"PO-Revision-Date: 2014-06-07 13:26+0000\n"
11+"PO-Revision-Date: 2014-07-09 12:17+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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-10 07:29+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Manter no Iniciador"
23+msgstr "Pegar o atallo"
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27−msgstr "Non manter no Iniciador"
27+msgstr "Despegar o atallo"
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -36,7 +36,7 @@ msgstr "Bordo dereito"
36
36
37#: qml/Components/EdgeDemo.qml:114
37#: qml/Components/EdgeDemo.qml:114
38msgid "Try swiping from the right edge to unlock the phone"
38msgid "Try swiping from the right edge to unlock the phone"
39−msgstr "Probe a esvarar desde o bordo dereito para desbloquear o teléfono"
39+msgstr "Esvare o dedo desde o bordo dereito para desbloquear o teléfono"
40
40
41#: qml/Components/EdgeDemo.qml:145
41#: qml/Components/EdgeDemo.qml:145
42msgid "Top edge"
42msgid "Top edge"
@@ -44,7 +44,7 @@ msgstr "Bordo superior"
44
44
45#: qml/Components/EdgeDemo.qml:146
45#: qml/Components/EdgeDemo.qml:146
46msgid "Try swiping from the top edge to access the indicators"
46msgid "Try swiping from the top edge to access the indicators"
47−msgstr "Esvare desde o bordo superior para acceder aos indicadores."
47+msgstr "Esvare o dedo desde o bordo superior para acceder aos indicadores."
48
48
49#: qml/Components/EdgeDemo.qml:171
49#: qml/Components/EdgeDemo.qml:171
50msgid "Close"
50msgid "Close"
@@ -52,7 +52,7 @@ msgstr "Pechar"
52
52
53#: qml/Components/EdgeDemo.qml:172
53#: qml/Components/EdgeDemo.qml:172
54msgid "Swipe up again to close the settings screen"
54msgid "Swipe up again to close the settings screen"
55−msgstr "Esvare cara a arriba para pechar os axustes"
55+msgstr "Esvare o dedo cara a arriba para pechar os axustes"
56
56
57#: qml/Components/EdgeDemo.qml:199
57#: qml/Components/EdgeDemo.qml:199
58msgid "Left edge"
58msgid "Left edge"
@@ -60,7 +60,9 @@ msgstr "Bordo esquerdo"
60
60
61#: qml/Components/EdgeDemo.qml:200
61#: qml/Components/EdgeDemo.qml:200
62msgid "Swipe from the left to reveal the launcher for quick access to apps"
62msgid "Swipe from the left to reveal the launcher for quick access to apps"
63+msgstr ""
63−msgstr "Esvare desde a esquerda para mostrar o iniciador de acceso rápido"
64+"Esvare o dedo desde a esquerda para mostrar o iniciador rápido aos "
65+"aplicativos"
64
66
65#: qml/Components/EdgeDemo.qml:227
67#: qml/Components/EdgeDemo.qml:227
66msgid "Well done"
68msgid "Well done"
@@ -82,7 +84,7 @@ msgstr "Chamada de emerxencia"
82msgid "OK"
84msgid "OK"
83msgstr "Aceptar"
85msgstr "Aceptar"
84
86
85−#: qml/Components/PageHeader.qml:365
87+#: qml/Components/PageHeader.qml:366
86msgid "Recent searches"
88msgid "Recent searches"
87msgstr "Buscas recentes"
89msgstr "Buscas recentes"
88
90
@@ -137,7 +139,7 @@ msgstr "Enviar"
137
139
138#: qml/Greeter/Greeter.qml:157
140#: qml/Greeter/Greeter.qml:157
139msgid "Swipe to unlock"
141msgid "Swipe to unlock"
140−msgstr "Esvare para desbloquear"
142+msgstr "Esvare o dedo para desbloquear"
141
143
142#: qml/Hud/HudParametrizedActionsPage.qml:132
144#: qml/Hud/HudParametrizedActionsPage.qml:132
143msgid "Confirm"
145msgid "Confirm"
@@ -167,11 +169,35 @@ msgstr "Mostrar contrasinal"
167msgid "Please enter SIM PIN"
169msgid "Please enter SIM PIN"
168msgstr "Introduza o PIN da SIM"
170msgstr "Introduza o PIN da SIM"
169
171
172+#: qml/Panel/Indicators/MenuItemFactory.qml:583
173+msgid "In queue…"
174+msgstr "Na cola..."
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:587
177+msgid "Downloading"
178+msgstr "Descargando"
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:589
181+msgid "Paused, tap to resume"
182+msgstr "Detido, toque para continuar"
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:591
185+msgid "Canceled"
186+msgstr "Cancelado"
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:593
189+msgid "Finished"
190+msgstr "Rematado"
191+
192+#: qml/Panel/Indicators/MenuItemFactory.qml:595
193+msgid "Failed, tap to retry"
194+msgstr "Fallou, toque para reintentar"
195+
170#: qml/Panel/SearchIndicator.qml:27
196#: qml/Panel/SearchIndicator.qml:27
171msgid "Search"
197msgid "Search"
172msgstr "Buscar"
198msgstr "Buscar"
173
199
174−#: qml/Shell.qml:334
200+#: qml/Shell.qml:359
175#, qt-format
201#, qt-format
176msgid "Please enter %1"
202msgid "Please enter %1"
177msgstr "Introduza %1"
203msgstr "Introduza %1"
po/he.po+33−9
@@ -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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11"PO-Revision-Date: 2014-06-09 07:49+0000\n"
11"PO-Revision-Date: 2014-06-09 07:49+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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "נעילה למשגר"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "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,7 +82,7 @@ msgstr "שיחת חירום"
82msgid "OK"
82msgid "OK"
83msgstr "אישור"
83msgstr "אישור"
84
84
85−#: qml/Components/PageHeader.qml:365
85+#: qml/Components/PageHeader.qml:366
86msgid "Recent searches"
86msgid "Recent searches"
87msgstr "חיפושים אחרונים"
87msgstr "חיפושים אחרונים"
88
88
@@ -167,11 +167,35 @@ msgstr "הצגת הססמה"
167msgid "Please enter SIM PIN"
167msgid "Please enter SIM PIN"
168msgstr "נא להזין את קוד ה־<U+200F>SIM"
168msgstr "נא להזין את קוד ה־<U+200F>SIM"
169
169
170+#: qml/Panel/Indicators/MenuItemFactory.qml:583
171+msgid "In queue…"
172+msgstr ""
173+
174+#: qml/Panel/Indicators/MenuItemFactory.qml:587
175+msgid "Downloading"
176+msgstr ""
177+
178+#: qml/Panel/Indicators/MenuItemFactory.qml:589
179+msgid "Paused, tap to resume"
180+msgstr ""
181+
182+#: qml/Panel/Indicators/MenuItemFactory.qml:591
183+msgid "Canceled"
184+msgstr ""
185+
186+#: qml/Panel/Indicators/MenuItemFactory.qml:593
187+msgid "Finished"
188+msgstr ""
189+
190+#: qml/Panel/Indicators/MenuItemFactory.qml:595
191+msgid "Failed, tap to retry"
192+msgstr ""
193+
170#: qml/Panel/SearchIndicator.qml:27
194#: qml/Panel/SearchIndicator.qml:27
171msgid "Search"
195msgid "Search"
172msgstr "חיפוש"
196msgstr "חיפוש"
173
197
174−#: qml/Shell.qml:334
198+#: qml/Shell.qml:359
175#, qt-format
199#, qt-format
176msgid "Please enter %1"
200msgid "Please enter %1"
177msgstr "נא להזין %1"
201msgstr "נא להזין %1"
po/hi.po+31−7
@@ -7,23 +7,23 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23msgstr ""
23msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -80,7 +80,7 @@ msgstr "आपातकालीन कॉल"
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr "पिछले खोजों"
85msgstr "पिछले खोजों"
86
86
@@ -165,11 +165,35 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr "खोजें"
194msgstr "खोजें"
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr ""
199msgstr ""
po/hr.po+31−7
@@ -7,23 +7,23 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23msgstr ""
23msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -80,7 +80,7 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr "Nedavne pretrage"
85msgstr "Nedavne pretrage"
86
86
@@ -165,11 +165,35 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr "Pretraživanje"
194msgstr "Pretraživanje"
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr ""
199msgstr ""
po/hu.po+33−9
@@ -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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11"PO-Revision-Date: 2014-01-14 23:02+0000\n"
11"PO-Revision-Date: 2014-01-14 23:02+0000\n"
12"Last-Translator: Kristóf Kiszel <Unknown>\n"
12"Last-Translator: Kristóf Kiszel <Unknown>\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Indítóban tartás"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27−msgstr "Eltávolítás az Indítóból"
27+msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -82,7 +82,7 @@ msgstr "Vészhívás"
82msgid "OK"
82msgid "OK"
83msgstr ""
83msgstr ""
84
84
85−#: qml/Components/PageHeader.qml:365
85+#: qml/Components/PageHeader.qml:366
86msgid "Recent searches"
86msgid "Recent searches"
87msgstr "Legutóbbi keresések"
87msgstr "Legutóbbi keresések"
88
88
@@ -167,11 +167,35 @@ msgstr "Jelszó megjelenítése"
167msgid "Please enter SIM PIN"
167msgid "Please enter SIM PIN"
168msgstr ""
168msgstr ""
169
169
170+#: qml/Panel/Indicators/MenuItemFactory.qml:583
171+msgid "In queue…"
172+msgstr ""
173+
174+#: qml/Panel/Indicators/MenuItemFactory.qml:587
175+msgid "Downloading"
176+msgstr ""
177+
178+#: qml/Panel/Indicators/MenuItemFactory.qml:589
179+msgid "Paused, tap to resume"
180+msgstr ""
181+
182+#: qml/Panel/Indicators/MenuItemFactory.qml:591
183+msgid "Canceled"
184+msgstr ""
185+
186+#: qml/Panel/Indicators/MenuItemFactory.qml:593
187+msgid "Finished"
188+msgstr ""
189+
190+#: qml/Panel/Indicators/MenuItemFactory.qml:595
191+msgid "Failed, tap to retry"
192+msgstr ""
193+
170#: qml/Panel/SearchIndicator.qml:27
194#: qml/Panel/SearchIndicator.qml:27
171msgid "Search"
195msgid "Search"
172msgstr "Keresés"
196msgstr "Keresés"
173
197
174−#: qml/Shell.qml:334
198+#: qml/Shell.qml:359
175#, qt-format
199#, qt-format
176msgid "Please enter %1"
200msgid "Please enter %1"
177msgstr "Adja meg a következőt: %1"
201msgstr "Adja meg a következőt: %1"
po/hy.po+31−7
@@ -7,23 +7,23 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:36+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23msgstr ""
23msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -80,7 +80,7 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr "Վերջին որոնումներ"
85msgstr "Վերջին որոնումներ"
86
86
@@ -165,11 +165,35 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr "Որոնում"
194msgstr "Որոնում"
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr ""
199msgstr ""
po/id.po+31−7
@@ -7,23 +7,23 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23msgstr ""
23msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -80,7 +80,7 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr ""
85msgstr ""
86
86
@@ -165,11 +165,35 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr ""
194msgstr ""
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr ""
199msgstr ""
po/is.po+31−7
@@ -7,23 +7,23 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11"PO-Revision-Date: 2013-09-18 16:22+0000\n"
11"PO-Revision-Date: 2013-09-18 16:22+0000\n"
12"Last-Translator: Andri Thorlacius <Unknown>\n"
12"Last-Translator: Andri Thorlacius <Unknown>\n"
13"Language-Team: Icelandic <is@li.org>\n"
13"Language-Team: Icelandic <is@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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23msgstr ""
23msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -81,7 +81,7 @@ msgstr "Neyðarsímtal"
81msgid "OK"
81msgid "OK"
82msgstr ""
82msgstr ""
83
83
84−#: qml/Components/PageHeader.qml:365
84+#: qml/Components/PageHeader.qml:366
85msgid "Recent searches"
85msgid "Recent searches"
86msgstr "Nýlegar leitir"
86msgstr "Nýlegar leitir"
87
87
@@ -166,11 +166,35 @@ msgstr ""
166msgid "Please enter SIM PIN"
166msgid "Please enter SIM PIN"
167msgstr ""
167msgstr ""
168
168
169+#: qml/Panel/Indicators/MenuItemFactory.qml:583
170+msgid "In queue…"
171+msgstr ""
172+
173+#: qml/Panel/Indicators/MenuItemFactory.qml:587
174+msgid "Downloading"
175+msgstr ""
176+
177+#: qml/Panel/Indicators/MenuItemFactory.qml:589
178+msgid "Paused, tap to resume"
179+msgstr ""
180+
181+#: qml/Panel/Indicators/MenuItemFactory.qml:591
182+msgid "Canceled"
183+msgstr ""
184+
185+#: qml/Panel/Indicators/MenuItemFactory.qml:593
186+msgid "Finished"
187+msgstr ""
188+
189+#: qml/Panel/Indicators/MenuItemFactory.qml:595
190+msgid "Failed, tap to retry"
191+msgstr ""
192+
169#: qml/Panel/SearchIndicator.qml:27
193#: qml/Panel/SearchIndicator.qml:27
170msgid "Search"
194msgid "Search"
171msgstr "Leita"
195msgstr "Leita"
172
196
173−#: qml/Shell.qml:334
197+#: qml/Shell.qml:359
174#, qt-format
198#, qt-format
175msgid "Please enter %1"
199msgid "Please enter %1"
176msgstr ""
200msgstr ""
po/it.po+34−10
@@ -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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11−"PO-Revision-Date: 2014-06-10 12:08+0000\n"
11+"PO-Revision-Date: 2014-07-09 07:07+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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-10 07:29+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Blocca nel Launcher"
23+msgstr "Blocca scorciatoia"
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27−msgstr "Sblocca dal Launcher"
27+msgstr "Sblocca scorciatoia"
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -87,7 +87,7 @@ msgstr "Chiamata di emergenza"
87msgid "OK"
87msgid "OK"
88msgstr "OK"
88msgstr "OK"
89
89
90−#: qml/Components/PageHeader.qml:365
90+#: qml/Components/PageHeader.qml:366
91msgid "Recent searches"
91msgid "Recent searches"
92msgstr "Ricerche recenti"
92msgstr "Ricerche recenti"
93
93
@@ -172,11 +172,35 @@ 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/Indicators/MenuItemFactory.qml:583
176+msgid "In queue…"
177+msgstr "In coda..."
178+
179+#: qml/Panel/Indicators/MenuItemFactory.qml:587
180+msgid "Downloading"
181+msgstr "Scaricamento in corso"
182+
183+#: qml/Panel/Indicators/MenuItemFactory.qml:589
184+msgid "Paused, tap to resume"
185+msgstr "In pausa. Tocca per riprendere"
186+
187+#: qml/Panel/Indicators/MenuItemFactory.qml:591
188+msgid "Canceled"
189+msgstr "Annullato"
190+
191+#: qml/Panel/Indicators/MenuItemFactory.qml:593
192+msgid "Finished"
193+msgstr "Completato"
194+
195+#: qml/Panel/Indicators/MenuItemFactory.qml:595
196+msgid "Failed, tap to retry"
197+msgstr "Non riuscito. Tocca per riprovare"
198+
175#: qml/Panel/SearchIndicator.qml:27
199#: qml/Panel/SearchIndicator.qml:27
176msgid "Search"
200msgid "Search"
177msgstr "Cerca"
201msgstr "Cerca"
178
202
179−#: qml/Shell.qml:334
203+#: qml/Shell.qml:359
180#, qt-format
204#, qt-format
181msgid "Please enter %1"
205msgid "Please enter %1"
182msgstr "Inserire %1"
206msgstr "Inserire %1"
po/ja.po+33−9
@@ -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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Launcherに登録"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27−msgstr "Launcherへの登録を解除"
27+msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -80,7 +80,7 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr "最近の検索"
85msgstr "最近の検索"
86
86
@@ -165,11 +165,35 @@ msgstr "パスワードを表示"
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr "検索"
194msgstr "検索"
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr ""
199msgstr ""
po/km.po+33−9
@@ -7,24 +7,24 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11"PO-Revision-Date: 2014-05-19 01:42+0000\n"
11"PO-Revision-Date: 2014-05-19 01:42+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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "ចាក់​សោ​​ទៅ​កម្មវិធី​ចាប់ផ្ដើម"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "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"
@@ -84,7 +84,7 @@ msgstr "ការ​ហៅ​ពេល​អាសន្ន"
84msgid "OK"
84msgid "OK"
85msgstr ""
85msgstr ""
86
86
87−#: qml/Components/PageHeader.qml:365
87+#: qml/Components/PageHeader.qml:366
88msgid "Recent searches"
88msgid "Recent searches"
89msgstr "ការ​ស្វែងរក​ថ្មី"
89msgstr "ការ​ស្វែងរក​ថ្មី"
90
90
@@ -169,11 +169,35 @@ msgstr "បង្ហាញ​ពាក្យ​សម្ងាត់"
169msgid "Please enter SIM PIN"
169msgid "Please enter SIM PIN"
170msgstr "បញ្ចូល​កូដ PIN របស់​ស៊ីមកាត"
170msgstr "បញ្ចូល​កូដ PIN របស់​ស៊ីមកាត"
171
171
172+#: qml/Panel/Indicators/MenuItemFactory.qml:583
173+msgid "In queue…"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:587
177+msgid "Downloading"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:589
181+msgid "Paused, tap to resume"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:591
185+msgid "Canceled"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:593
189+msgid "Finished"
190+msgstr ""
191+
192+#: qml/Panel/Indicators/MenuItemFactory.qml:595
193+msgid "Failed, tap to retry"
194+msgstr ""
195+
172#: qml/Panel/SearchIndicator.qml:27
196#: qml/Panel/SearchIndicator.qml:27
173msgid "Search"
197msgid "Search"
174msgstr "ស្វែង​រក"
198msgstr "ស្វែង​រក"
175
199
176−#: qml/Shell.qml:334
200+#: qml/Shell.qml:359
177#, qt-format
201#, qt-format
178msgid "Please enter %1"
202msgid "Please enter %1"
179msgstr "សូម​បញ្ចូល %1"
203msgstr "សូម​បញ្ចូល %1"
po/kn.po+31−7
@@ -7,23 +7,23 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23msgstr ""
23msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -80,7 +80,7 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr "ಇತ್ತೀಚಿನ ಹುಡುಕಾಟಗಳು"
85msgstr "ಇತ್ತೀಚಿನ ಹುಡುಕಾಟಗಳು"
86
86
@@ -165,11 +165,35 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr "ಹುಡುಕು"
194msgstr "ಹುಡುಕು"
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr ""
199msgstr ""
po/ko.po+31−7
@@ -7,23 +7,23 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11"PO-Revision-Date: 2013-10-10 07:04+0000\n"
11"PO-Revision-Date: 2013-10-10 07:04+0000\n"
12"Last-Translator: Kim Boram <boramism@gmail.com>\n"
12"Last-Translator: Kim Boram <boramism@gmail.com>\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23msgstr ""
23msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -80,7 +80,7 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr "최근 검색"
85msgstr "최근 검색"
86
86
@@ -165,11 +165,35 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr "검색"
194msgstr "검색"
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr ""
199msgstr ""
po/ky.po+31−7
@@ -7,23 +7,23 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23msgstr ""
23msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -80,7 +80,7 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr "Соңку издөөлөр"
85msgstr "Соңку издөөлөр"
86
86
@@ -165,11 +165,35 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr "Издөө"
194msgstr "Издөө"
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr ""
199msgstr ""
po/lo.po+31−7
@@ -7,23 +7,23 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23msgstr ""
23msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -80,7 +80,7 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr ""
85msgstr ""
86
86
@@ -165,11 +165,35 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr "ຊອກຫາ"
194msgstr "ຊອກຫາ"
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr "ກະລູນາປ້ອນ %1"
199msgstr "ກະລູນາປ້ອນ %1"
po/lt.po+33−9
@@ -7,24 +7,24 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Palikti mygtukų juostoje"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27−msgstr "Nelaikyti mygtukų juostoje"
27+msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -83,7 +83,7 @@ msgstr "Pagalbos skambutis"
83msgid "OK"
83msgid "OK"
84msgstr ""
84msgstr ""
85
85
86−#: qml/Components/PageHeader.qml:365
86+#: qml/Components/PageHeader.qml:366
87msgid "Recent searches"
87msgid "Recent searches"
88msgstr "Paskiausios paieškos"
88msgstr "Paskiausios paieškos"
89
89
@@ -168,11 +168,35 @@ 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/Indicators/MenuItemFactory.qml:583
172+msgid "In queue…"
173+msgstr ""
174+
175+#: qml/Panel/Indicators/MenuItemFactory.qml:587
176+msgid "Downloading"
177+msgstr ""
178+
179+#: qml/Panel/Indicators/MenuItemFactory.qml:589
180+msgid "Paused, tap to resume"
181+msgstr ""
182+
183+#: qml/Panel/Indicators/MenuItemFactory.qml:591
184+msgid "Canceled"
185+msgstr ""
186+
187+#: qml/Panel/Indicators/MenuItemFactory.qml:593
188+msgid "Finished"
189+msgstr ""
190+
191+#: qml/Panel/Indicators/MenuItemFactory.qml:595
192+msgid "Failed, tap to retry"
193+msgstr ""
194+
171#: qml/Panel/SearchIndicator.qml:27
195#: qml/Panel/SearchIndicator.qml:27
172msgid "Search"
196msgid "Search"
173msgstr "Paieška"
197msgstr "Paieška"
174
198
175−#: qml/Shell.qml:334
199+#: qml/Shell.qml:359
176#, qt-format
200#, qt-format
177msgid "Please enter %1"
201msgid "Please enter %1"
178msgstr "Prašom įvesti %1"
202msgstr "Prašom įvesti %1"
po/lv.po+34−10
@@ -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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11"PO-Revision-Date: 2014-05-31 14:54+0000\n"
11"PO-Revision-Date: 2014-05-31 14:54+0000\n"
12−"Last-Translator: Jānis-Marks Gailis <jeanmarc.gailis@gmail.com>\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Pieslēgt palaidējam"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27−msgstr "Atslēgt no palaidēja"
27+msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -80,7 +80,7 @@ msgstr "Neatliekamās Palīdzības zvans"
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr "Nesen veiktās meklēšanas"
85msgstr "Nesen veiktās meklēšanas"
86
86
@@ -165,11 +165,35 @@ 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/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr "Meklēt"
194msgstr "Meklēt"
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr "Lūdzu ievadiet %1"
199msgstr "Lūdzu ievadiet %1"
po/ml.po+33−9
@@ -7,24 +7,24 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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: Stym alfaZ <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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "വിക്ഷേപികയില്‍ സ്ഥിരപ്പെടുത്തുക"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "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,7 +82,7 @@ msgstr "അടിയന്തിര വിളി"
82msgid "OK"
82msgid "OK"
83msgstr ""
83msgstr ""
84
84
85−#: qml/Components/PageHeader.qml:365
85+#: qml/Components/PageHeader.qml:366
86msgid "Recent searches"
86msgid "Recent searches"
87msgstr "സമീപകാല തിരയലുകള്‍"
87msgstr "സമീപകാല തിരയലുകള്‍"
88
88
@@ -167,11 +167,35 @@ msgstr "രഹസ്യവാക്ക് കാണിക്കുക"
167msgid "Please enter SIM PIN"
167msgid "Please enter SIM PIN"
168msgstr ""
168msgstr ""
169
169
170+#: qml/Panel/Indicators/MenuItemFactory.qml:583
171+msgid "In queue…"
172+msgstr ""
173+
174+#: qml/Panel/Indicators/MenuItemFactory.qml:587
175+msgid "Downloading"
176+msgstr ""
177+
178+#: qml/Panel/Indicators/MenuItemFactory.qml:589
179+msgid "Paused, tap to resume"
180+msgstr ""
181+
182+#: qml/Panel/Indicators/MenuItemFactory.qml:591
183+msgid "Canceled"
184+msgstr ""
185+
186+#: qml/Panel/Indicators/MenuItemFactory.qml:593
187+msgid "Finished"
188+msgstr ""
189+
190+#: qml/Panel/Indicators/MenuItemFactory.qml:595
191+msgid "Failed, tap to retry"
192+msgstr ""
193+
170#: qml/Panel/SearchIndicator.qml:27
194#: qml/Panel/SearchIndicator.qml:27
171msgid "Search"
195msgid "Search"
172msgstr "തിരയുക"
196msgstr "തിരയുക"
173
197
174−#: qml/Shell.qml:334
198+#: qml/Shell.qml:359
175#, qt-format
199#, qt-format
176msgid "Please enter %1"
200msgid "Please enter %1"
177msgstr "ദയവായി %1 നല്‍കുക"
201msgstr "ദയവായി %1 നല്‍കുക"
po/mr.po+31−7
@@ -7,23 +7,23 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23msgstr ""
23msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -80,7 +80,7 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr ""
85msgstr ""
86
86
@@ -165,11 +165,35 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr ""
194msgstr ""
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr ""
199msgstr ""
po/ms.po+33−9
@@ -7,24 +7,24 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Kunci ke Pelancar"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27−msgstr "Tanggalkan dari Pelancar"
27+msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -80,7 +80,7 @@ msgstr "panggilan Kecemasan"
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr "Gelintar baru-baru ini"
85msgstr "Gelintar baru-baru ini"
86
86
@@ -165,11 +165,35 @@ msgstr "Tunjuk kata laluan"
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr "Gelintar"
194msgstr "Gelintar"
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr "Sila masukkan %1"
199msgstr "Sila masukkan %1"
po/my.po+33−9
@@ -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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:36+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Launcher တွင်ထားမည်"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27−msgstr "Launcher မှဖြုတ်မည်"
27+msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -80,7 +80,7 @@ msgstr "အရေးပေါ်ခေါ်မည်"
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr "မကြာသေးခင်က ရှာဖွေခြင်း"
85msgstr "မကြာသေးခင်က ရှာဖွေခြင်း"
86
86
@@ -165,11 +165,35 @@ msgstr "စကားဝှက်ကိုပြ"
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr "ရှာဖွေ"
194msgstr "ရှာဖွေ"
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr "%1ကိုရိုက်ထည့်ပါ"
199msgstr "%1ကိုရိုက်ထည့်ပါ"
po/nb.po+33−9
@@ -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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11"PO-Revision-Date: 2014-06-11 06:36+0000\n"
11"PO-Revision-Date: 2014-06-11 06:36+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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Lås til oppstarter"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27−msgstr "Lås opp fra oppstarter"
27+msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -82,7 +82,7 @@ msgstr "Nødanrop"
82msgid "OK"
82msgid "OK"
83msgstr "OK"
83msgstr "OK"
84
84
85−#: qml/Components/PageHeader.qml:365
85+#: qml/Components/PageHeader.qml:366
86msgid "Recent searches"
86msgid "Recent searches"
87msgstr "Nylige søk"
87msgstr "Nylige søk"
88
88
@@ -167,11 +167,35 @@ 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/Indicators/MenuItemFactory.qml:583
171+msgid "In queue…"
172+msgstr ""
173+
174+#: qml/Panel/Indicators/MenuItemFactory.qml:587
175+msgid "Downloading"
176+msgstr ""
177+
178+#: qml/Panel/Indicators/MenuItemFactory.qml:589
179+msgid "Paused, tap to resume"
180+msgstr ""
181+
182+#: qml/Panel/Indicators/MenuItemFactory.qml:591
183+msgid "Canceled"
184+msgstr ""
185+
186+#: qml/Panel/Indicators/MenuItemFactory.qml:593
187+msgid "Finished"
188+msgstr ""
189+
190+#: qml/Panel/Indicators/MenuItemFactory.qml:595
191+msgid "Failed, tap to retry"
192+msgstr ""
193+
170#: qml/Panel/SearchIndicator.qml:27
194#: qml/Panel/SearchIndicator.qml:27
171msgid "Search"
195msgid "Search"
172msgstr "Søk"
196msgstr "Søk"
173
197
174−#: qml/Shell.qml:334
198+#: qml/Shell.qml:359
175#, qt-format
199#, qt-format
176msgid "Please enter %1"
200msgid "Please enter %1"
177msgstr "Skriv inn %1"
201msgstr "Skriv inn %1"
po/nl.po+33−9
@@ -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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11"PO-Revision-Date: 2014-01-15 16:42+0000\n"
11"PO-Revision-Date: 2014-01-15 16:42+0000\n"
12"Last-Translator: Hannie Dumoleyn <Unknown>\n"
12"Last-Translator: Hannie Dumoleyn <Unknown>\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:36+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "In Starter vastzetten"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27−msgstr "Uit Starter verwijderen"
27+msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -80,7 +80,7 @@ msgstr "Noodoproep"
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr "Recente zoekopdrachten"
85msgstr "Recente zoekopdrachten"
86
86
@@ -165,11 +165,35 @@ msgstr "Wachtwoord tonen"
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr "Zoeken"
194msgstr "Zoeken"
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr "Voer %1 in"
199msgstr "Voer %1 in"
po/pl.po+33−9
@@ -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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11"PO-Revision-Date: 2014-05-27 15:20+0000\n"
11"PO-Revision-Date: 2014-05-27 15:20+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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Dodaj do panelu uruchamiania"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27−msgstr "Usuń z panelu uruchamiania"
27+msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -84,7 +84,7 @@ msgstr "Telefon ratunkowy"
84msgid "OK"
84msgid "OK"
85msgstr ""
85msgstr ""
86
86
87−#: qml/Components/PageHeader.qml:365
87+#: qml/Components/PageHeader.qml:366
88msgid "Recent searches"
88msgid "Recent searches"
89msgstr "Ostatnie wyszukiwania"
89msgstr "Ostatnie wyszukiwania"
90
90
@@ -169,11 +169,35 @@ 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/Indicators/MenuItemFactory.qml:583
173+msgid "In queue…"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:587
177+msgid "Downloading"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:589
181+msgid "Paused, tap to resume"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:591
185+msgid "Canceled"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:593
189+msgid "Finished"
190+msgstr ""
191+
192+#: qml/Panel/Indicators/MenuItemFactory.qml:595
193+msgid "Failed, tap to retry"
194+msgstr ""
195+
172#: qml/Panel/SearchIndicator.qml:27
196#: qml/Panel/SearchIndicator.qml:27
173msgid "Search"
197msgid "Search"
174msgstr "Szukaj"
198msgstr "Szukaj"
175
199
176−#: qml/Shell.qml:334
200+#: qml/Shell.qml:359
177#, qt-format
201#, qt-format
178msgid "Please enter %1"
202msgid "Please enter %1"
179msgstr "Wprowadź %1"
203msgstr "Wprowadź %1"
po/pt.po+31−7
@@ -7,23 +7,23 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11"PO-Revision-Date: 2014-01-14 19:18+0000\n"
11"PO-Revision-Date: 2014-01-14 19:18+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23msgstr ""
23msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -80,7 +80,7 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr ""
85msgstr ""
86
86
@@ -165,11 +165,35 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr ""
194msgstr ""
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr ""
199msgstr ""
po/pt_BR.po+33−9
@@ -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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11"PO-Revision-Date: 2014-05-15 14:31+0000\n"
11"PO-Revision-Date: 2014-05-15 14:31+0000\n"
12"Last-Translator: Rafael Neri <Unknown>\n"
12"Last-Translator: Rafael Neri <Unknown>\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Bloquear no lançador"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27−msgstr "Desbloquear do lançador"
27+msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -84,7 +84,7 @@ msgstr "Chamada de emergência"
84msgid "OK"
84msgid "OK"
85msgstr ""
85msgstr ""
86
86
87−#: qml/Components/PageHeader.qml:365
87+#: qml/Components/PageHeader.qml:366
88msgid "Recent searches"
88msgid "Recent searches"
89msgstr "Pesquisas recentes"
89msgstr "Pesquisas recentes"
90
90
@@ -169,11 +169,35 @@ 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/Indicators/MenuItemFactory.qml:583
173+msgid "In queue…"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:587
177+msgid "Downloading"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:589
181+msgid "Paused, tap to resume"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:591
185+msgid "Canceled"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:593
189+msgid "Finished"
190+msgstr ""
191+
192+#: qml/Panel/Indicators/MenuItemFactory.qml:595
193+msgid "Failed, tap to retry"
194+msgstr ""
195+
172#: qml/Panel/SearchIndicator.qml:27
196#: qml/Panel/SearchIndicator.qml:27
173msgid "Search"
197msgid "Search"
174msgstr "Pesquisar"
198msgstr "Pesquisar"
175
199
176−#: qml/Shell.qml:334
200+#: qml/Shell.qml:359
177#, qt-format
201#, qt-format
178msgid "Please enter %1"
202msgid "Please enter %1"
179msgstr "Por favor, digite %1"
203msgstr "Por favor, digite %1"
po/ro.po+31−7
@@ -7,23 +7,23 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23msgstr ""
23msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -80,7 +80,7 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr "Căutări recente"
85msgstr "Căutări recente"
86
86
@@ -165,11 +165,35 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr "Căutare"
194msgstr "Căutare"
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr ""
199msgstr ""
po/ru.po+33−9
@@ -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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Закрепить на панели"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "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"
@@ -87,7 +87,7 @@ msgstr "Экстренный вызов"
87msgid "OK"
87msgid "OK"
88msgstr ""
88msgstr ""
89
89
90−#: qml/Components/PageHeader.qml:365
90+#: qml/Components/PageHeader.qml:366
91msgid "Recent searches"
91msgid "Recent searches"
92msgstr "Последние поисковые запросы"
92msgstr "Последние поисковые запросы"
93
93
@@ -172,11 +172,35 @@ msgstr "Показать пароль"
172msgid "Please enter SIM PIN"
172msgid "Please enter SIM PIN"
173msgstr "Введите PIN код"
173msgstr "Введите PIN код"
174
174
175+#: qml/Panel/Indicators/MenuItemFactory.qml:583
176+msgid "In queue…"
177+msgstr ""
178+
179+#: qml/Panel/Indicators/MenuItemFactory.qml:587
180+msgid "Downloading"
181+msgstr ""
182+
183+#: qml/Panel/Indicators/MenuItemFactory.qml:589
184+msgid "Paused, tap to resume"
185+msgstr ""
186+
187+#: qml/Panel/Indicators/MenuItemFactory.qml:591
188+msgid "Canceled"
189+msgstr ""
190+
191+#: qml/Panel/Indicators/MenuItemFactory.qml:593
192+msgid "Finished"
193+msgstr ""
194+
195+#: qml/Panel/Indicators/MenuItemFactory.qml:595
196+msgid "Failed, tap to retry"
197+msgstr ""
198+
175#: qml/Panel/SearchIndicator.qml:27
199#: qml/Panel/SearchIndicator.qml:27
176msgid "Search"
200msgid "Search"
177msgstr "Поиск"
201msgstr "Поиск"
178
202
179−#: qml/Shell.qml:334
203+#: qml/Shell.qml:359
180#, qt-format
204#, qt-format
181msgid "Please enter %1"
205msgid "Please enter %1"
182msgstr "Пожалуйста, введите %1"
206msgstr "Пожалуйста, введите %1"
po/shn.po+31−7
@@ -7,23 +7,23 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23msgstr ""
23msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -80,7 +80,7 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr ""
85msgstr ""
86
86
@@ -165,11 +165,35 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr ""
194msgstr ""
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr ""
199msgstr ""
po/si.po+31−7
@@ -7,23 +7,23 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23msgstr ""
23msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -80,7 +80,7 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr ""
85msgstr ""
86
86
@@ -165,11 +165,35 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr ""
194msgstr ""
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr ""
199msgstr ""
po/sl.po+33−9
@@ -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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11"PO-Revision-Date: 2014-06-23 09:29+0000\n"
11"PO-Revision-Date: 2014-06-23 09:29+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-06-24 06:33+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17065)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Zakleni na zaganjalnik"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27−msgstr "Odkleni z zaganjalnika"
27+msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -84,7 +84,7 @@ msgstr "Klic v sili"
84msgid "OK"
84msgid "OK"
85msgstr "V REDU"
85msgstr "V REDU"
86
86
87−#: qml/Components/PageHeader.qml:365
87+#: qml/Components/PageHeader.qml:366
88msgid "Recent searches"
88msgid "Recent searches"
89msgstr "Nedavna iskanja"
89msgstr "Nedavna iskanja"
90
90
@@ -169,11 +169,35 @@ 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/Indicators/MenuItemFactory.qml:583
173+msgid "In queue…"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:587
177+msgid "Downloading"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:589
181+msgid "Paused, tap to resume"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:591
185+msgid "Canceled"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:593
189+msgid "Finished"
190+msgstr ""
191+
192+#: qml/Panel/Indicators/MenuItemFactory.qml:595
193+msgid "Failed, tap to retry"
194+msgstr ""
195+
172#: qml/Panel/SearchIndicator.qml:27
196#: qml/Panel/SearchIndicator.qml:27
173msgid "Search"
197msgid "Search"
174msgstr "Iskanje"
198msgstr "Iskanje"
175
199
176−#: qml/Shell.qml:334
200+#: qml/Shell.qml:359
177#, qt-format
201#, qt-format
178msgid "Please enter %1"
202msgid "Please enter %1"
179msgstr "Vnesite %1"
203msgstr "Vnesite %1"
po/sq.po+31−7
@@ -7,23 +7,23 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:50+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:36+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23msgstr ""
23msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -81,7 +81,7 @@ msgstr ""
81msgid "OK"
81msgid "OK"
82msgstr ""
82msgstr ""
83
83
84−#: qml/Components/PageHeader.qml:365
84+#: qml/Components/PageHeader.qml:366
85msgid "Recent searches"
85msgid "Recent searches"
86msgstr ""
86msgstr ""
87
87
@@ -166,11 +166,35 @@ msgstr ""
166msgid "Please enter SIM PIN"
166msgid "Please enter SIM PIN"
167msgstr ""
167msgstr ""
168
168
169+#: qml/Panel/Indicators/MenuItemFactory.qml:583
170+msgid "In queue…"
171+msgstr ""
172+
173+#: qml/Panel/Indicators/MenuItemFactory.qml:587
174+msgid "Downloading"
175+msgstr ""
176+
177+#: qml/Panel/Indicators/MenuItemFactory.qml:589
178+msgid "Paused, tap to resume"
179+msgstr ""
180+
181+#: qml/Panel/Indicators/MenuItemFactory.qml:591
182+msgid "Canceled"
183+msgstr ""
184+
185+#: qml/Panel/Indicators/MenuItemFactory.qml:593
186+msgid "Finished"
187+msgstr ""
188+
189+#: qml/Panel/Indicators/MenuItemFactory.qml:595
190+msgid "Failed, tap to retry"
191+msgstr ""
192+
169#: qml/Panel/SearchIndicator.qml:27
193#: qml/Panel/SearchIndicator.qml:27
170msgid "Search"
194msgid "Search"
171msgstr ""
195msgstr ""
172
196
173−#: qml/Shell.qml:334
197+#: qml/Shell.qml:359
174#, qt-format
198#, qt-format
175msgid "Please enter %1"
199msgid "Please enter %1"
176msgstr ""
200msgstr ""
po/sr.po+31−7
@@ -7,23 +7,23 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23msgstr ""
23msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -80,7 +80,7 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr "Скорашње претраге"
85msgstr "Скорашње претраге"
86
86
@@ -165,11 +165,35 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr "Претрага"
194msgstr "Претрага"
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr ""
199msgstr ""
po/sv.po+31−7
@@ -7,23 +7,23 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11"PO-Revision-Date: 2014-06-07 19:14+0000\n"
11"PO-Revision-Date: 2014-06-07 19:14+0000\n"
12"Last-Translator: mikasjoman <Unknown>\n"
12"Last-Translator: mikasjoman <Unknown>\n"
13"Language-Team: Swedish <sv@li.org>\n"
13"Language-Team: Swedish <sv@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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23msgstr ""
23msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -80,7 +80,7 @@ msgstr "Nödsamtal"
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr ""
85msgstr ""
86
86
@@ -165,11 +165,35 @@ msgstr "Visa lösenord"
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr "Sök"
194msgstr "Sök"
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr "Vänligen fyll i %1"
199msgstr "Vänligen fyll i %1"
po/sw.po+32−8
@@ -7,23 +7,23 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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 Mlabwa <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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23msgstr ""
23msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -80,7 +80,7 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr ""
85msgstr ""
86
86
@@ -165,11 +165,35 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr "Tafuta"
194msgstr "Tafuta"
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr ""
199msgstr ""
po/ta.po+31−7
@@ -7,24 +7,24 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22#: plugins/Unity/Launcher/launcheritem.cpp:73
22#: plugins/Unity/Launcher/launcheritem.cpp:73
23−msgid "Lock to Launcher"
23+msgid "Pin shortcut"
24msgstr ""
24msgstr ""
25
25
26#: plugins/Unity/Launcher/launcheritem.cpp:73
26#: plugins/Unity/Launcher/launcheritem.cpp:73
27−msgid "Unlock from Launcher"
27+msgid "Unpin shortcut"
28msgstr ""
28msgstr ""
29
29
30#: qml/Components/EdgeDemoOverlay.qml:151
30#: qml/Components/EdgeDemoOverlay.qml:151
@@ -83,7 +83,7 @@ msgstr "அவசர அழைப்பு"
83msgid "OK"
83msgid "OK"
84msgstr ""
84msgstr ""
85
85
86−#: qml/Components/PageHeader.qml:365
86+#: qml/Components/PageHeader.qml:366
87msgid "Recent searches"
87msgid "Recent searches"
88msgstr "கடையாக தேடப்பட்டவைகள்"
88msgstr "கடையாக தேடப்பட்டவைகள்"
89
89
@@ -168,11 +168,35 @@ msgstr ""
168msgid "Please enter SIM PIN"
168msgid "Please enter SIM PIN"
169msgstr ""
169msgstr ""
170
170
171+#: qml/Panel/Indicators/MenuItemFactory.qml:583
172+msgid "In queue…"
173+msgstr ""
174+
175+#: qml/Panel/Indicators/MenuItemFactory.qml:587
176+msgid "Downloading"
177+msgstr ""
178+
179+#: qml/Panel/Indicators/MenuItemFactory.qml:589
180+msgid "Paused, tap to resume"
181+msgstr ""
182+
183+#: qml/Panel/Indicators/MenuItemFactory.qml:591
184+msgid "Canceled"
185+msgstr ""
186+
187+#: qml/Panel/Indicators/MenuItemFactory.qml:593
188+msgid "Finished"
189+msgstr ""
190+
191+#: qml/Panel/Indicators/MenuItemFactory.qml:595
192+msgid "Failed, tap to retry"
193+msgstr ""
194+
171#: qml/Panel/SearchIndicator.qml:27
195#: qml/Panel/SearchIndicator.qml:27
172msgid "Search"
196msgid "Search"
173msgstr "தெடு"
197msgstr "தெடு"
174
198
175−#: qml/Shell.qml:334
199+#: qml/Shell.qml:359
176#, qt-format
200#, qt-format
177msgid "Please enter %1"
201msgid "Please enter %1"
178msgstr "தயவுச்செய்து %1 உள்ளிடு"
202msgstr "தயவுச்செய்து %1 உள்ளிடு"
po/te.po+31−7
@@ -7,23 +7,23 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11"PO-Revision-Date: 2013-06-27 09:57+0000\n"
11"PO-Revision-Date: 2013-06-27 09:57+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: 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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23msgstr ""
23msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -80,7 +80,7 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr ""
85msgstr ""
86
86
@@ -165,11 +165,35 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr ""
194msgstr ""
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr ""
199msgstr ""
po/tr.po+33−9
@@ -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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11"PO-Revision-Date: 2014-05-19 12:52+0000\n"
11"PO-Revision-Date: 2014-05-19 12:52+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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Başlatıcıya Sabitle"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27−msgstr "Başlatıcıdan Ayır"
27+msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
30msgid "Skip intro"
30msgid "Skip intro"
@@ -83,7 +83,7 @@ msgstr "Acil Arama"
83msgid "OK"
83msgid "OK"
84msgstr ""
84msgstr ""
85
85
86−#: qml/Components/PageHeader.qml:365
86+#: qml/Components/PageHeader.qml:366
87msgid "Recent searches"
87msgid "Recent searches"
88msgstr "Son aramalar"
88msgstr "Son aramalar"
89
89
@@ -168,11 +168,35 @@ 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/Indicators/MenuItemFactory.qml:583
172+msgid "In queue…"
173+msgstr ""
174+
175+#: qml/Panel/Indicators/MenuItemFactory.qml:587
176+msgid "Downloading"
177+msgstr ""
178+
179+#: qml/Panel/Indicators/MenuItemFactory.qml:589
180+msgid "Paused, tap to resume"
181+msgstr ""
182+
183+#: qml/Panel/Indicators/MenuItemFactory.qml:591
184+msgid "Canceled"
185+msgstr ""
186+
187+#: qml/Panel/Indicators/MenuItemFactory.qml:593
188+msgid "Finished"
189+msgstr ""
190+
191+#: qml/Panel/Indicators/MenuItemFactory.qml:595
192+msgid "Failed, tap to retry"
193+msgstr ""
194+
171#: qml/Panel/SearchIndicator.qml:27
195#: qml/Panel/SearchIndicator.qml:27
172msgid "Search"
196msgid "Search"
173msgstr "Ara"
197msgstr "Ara"
174
198
175−#: qml/Shell.qml:334
199+#: qml/Shell.qml:359
176#, qt-format
200#, qt-format
177msgid "Please enter %1"
201msgid "Please enter %1"
178msgstr "Lütfen %1 girin"
202msgstr "Lütfen %1 girin"
po/ug.po+34−10
@@ -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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11−"PO-Revision-Date: 2014-06-13 21:07+0000\n"
11+"PO-Revision-Date: 2014-07-10 23:16+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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-11 06:15+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17111)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "ئىجراچىغا سولىۋەت"
23+msgstr "تېزلەتمىنى قوي"
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "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,7 +82,7 @@ msgstr "جىددىي تېلېفون"
82msgid "OK"
82msgid "OK"
83msgstr "تامام"
83msgstr "تامام"
84
84
85−#: qml/Components/PageHeader.qml:365
85+#: qml/Components/PageHeader.qml:366
86msgid "Recent searches"
86msgid "Recent searches"
87msgstr "يېقىنقى ئىزدەشلەر"
87msgstr "يېقىنقى ئىزدەشلەر"
88
88
@@ -167,11 +167,35 @@ msgstr "ئىم كۆرسەت"
167msgid "Please enter SIM PIN"
167msgid "Please enter SIM PIN"
168msgstr "سىم(SIM) كارتىڭىزنىڭ PIN نومۇرىنى كىرگۈزۈڭ"
168msgstr "سىم(SIM) كارتىڭىزنىڭ PIN نومۇرىنى كىرگۈزۈڭ"
169
169
170+#: qml/Panel/Indicators/MenuItemFactory.qml:583
171+msgid "In queue…"
172+msgstr ""
173+
174+#: qml/Panel/Indicators/MenuItemFactory.qml:587
175+msgid "Downloading"
176+msgstr "چۈشۈرۈۋاتىدۇ"
177+
178+#: qml/Panel/Indicators/MenuItemFactory.qml:589
179+msgid "Paused, tap to resume"
180+msgstr "توختىتىلغان، چەكسە داۋاملىشىدۇ"
181+
182+#: qml/Panel/Indicators/MenuItemFactory.qml:591
183+msgid "Canceled"
184+msgstr "قالدۇرۇۋېتىلدى"
185+
186+#: qml/Panel/Indicators/MenuItemFactory.qml:593
187+msgid "Finished"
188+msgstr "تاماملاندى"
189+
190+#: qml/Panel/Indicators/MenuItemFactory.qml:595
191+msgid "Failed, tap to retry"
192+msgstr "مەغلۇپ بولدى، چېكىپ قايتا سىناڭ"
193+
170#: qml/Panel/SearchIndicator.qml:27
194#: qml/Panel/SearchIndicator.qml:27
171msgid "Search"
195msgid "Search"
172msgstr "ئىزدە"
196msgstr "ئىزدە"
173
197
174−#: qml/Shell.qml:334
198+#: qml/Shell.qml:359
175#, qt-format
199#, qt-format
176msgid "Please enter %1"
200msgid "Please enter %1"
177msgstr "%1 نى كىرگۈزۈڭ"
201msgstr "%1 نى كىرگۈزۈڭ"
po/uk.po+33−9
@@ -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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11"PO-Revision-Date: 2014-06-08 19:09+0000\n"
11"PO-Revision-Date: 2014-06-08 19:09+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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "Зафіксувати на панелі запуску"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "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"
@@ -85,7 +85,7 @@ msgstr "Терміновий виклик"
85msgid "OK"
85msgid "OK"
86msgstr "Гаразд"
86msgstr "Гаразд"
87
87
88−#: qml/Components/PageHeader.qml:365
88+#: qml/Components/PageHeader.qml:366
89msgid "Recent searches"
89msgid "Recent searches"
90msgstr "Нещодавні пошуки"
90msgstr "Нещодавні пошуки"
91
91
@@ -170,11 +170,35 @@ msgstr "Показати пароль"
170msgid "Please enter SIM PIN"
170msgid "Please enter SIM PIN"
171msgstr "Введіть PIN-код SIM-картки"
171msgstr "Введіть PIN-код SIM-картки"
172
172
173+#: qml/Panel/Indicators/MenuItemFactory.qml:583
174+msgid "In queue…"
175+msgstr ""
176+
177+#: qml/Panel/Indicators/MenuItemFactory.qml:587
178+msgid "Downloading"
179+msgstr ""
180+
181+#: qml/Panel/Indicators/MenuItemFactory.qml:589
182+msgid "Paused, tap to resume"
183+msgstr ""
184+
185+#: qml/Panel/Indicators/MenuItemFactory.qml:591
186+msgid "Canceled"
187+msgstr ""
188+
189+#: qml/Panel/Indicators/MenuItemFactory.qml:593
190+msgid "Finished"
191+msgstr ""
192+
193+#: qml/Panel/Indicators/MenuItemFactory.qml:595
194+msgid "Failed, tap to retry"
195+msgstr ""
196+
173#: qml/Panel/SearchIndicator.qml:27
197#: qml/Panel/SearchIndicator.qml:27
174msgid "Search"
198msgid "Search"
175msgstr "Пошук"
199msgstr "Пошук"
176
200
177−#: qml/Shell.qml:334
201+#: qml/Shell.qml:359
178#, qt-format
202#, qt-format
179msgid "Please enter %1"
203msgid "Please enter %1"
180msgstr "Будь ласка, введіть %1"
204msgstr "Будь ласка, введіть %1"
po/unity8.pot+30−6
@@ -8,22 +8,22 @@ 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-06-13 09:55+0200\n"
11+"POT-Creation-Date: 2014-07-07 12:15+0100\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"
15"Language: \n"
15"Language: \n"
16"MIME-Version: 1.0\n"
16"MIME-Version: 1.0\n"
17−"Content-Type: text/plain; charset=CHARSET\n"
17+"Content-Type: text/plain; charset=UTF-8\n"
18"Content-Transfer-Encoding: 8bit\n"
18"Content-Transfer-Encoding: 8bit\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23msgstr ""
23msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -80,7 +80,7 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr ""
85msgstr ""
86
86
@@ -165,11 +165,35 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr ""
194msgstr ""
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr ""
199msgstr ""
po/update-unity-pot+2−1
@@ -22,6 +22,7 @@ xgettext \
22 --keyword=tr \
22 --keyword=tr \
23 --keyword=tr:1,2 \
23 --keyword=tr:1,2 \
24 --package-name="unity8" \
24 --package-name="unity8" \
25− --copyright-holder="Canonical Ltd."
25+ --copyright-holder="Canonical Ltd." \
26+ --from-code="UTF-8"
26
27
27echo "$PROGNAME: $PO_DIR/auto-generated.pot updated"
28echo "$PROGNAME: $PO_DIR/auto-generated.pot updated"
po/vi.po+31−7
@@ -7,23 +7,23 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23msgstr ""
23msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -80,7 +80,7 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr ""
85msgstr ""
86
86
@@ -165,11 +165,35 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr ""
194msgstr ""
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr ""
199msgstr ""
po/xh.po+31−7
@@ -7,23 +7,23 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23msgstr ""
23msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -80,7 +80,7 @@ msgstr ""
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr ""
85msgstr ""
86
86
@@ -165,11 +165,35 @@ msgstr ""
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr ""
194msgstr ""
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr ""
199msgstr ""
po/zh_CN.po+33−9
@@ -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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11"PO-Revision-Date: 2014-06-12 08:55+0000\n"
11"PO-Revision-Date: 2014-06-12 08:55+0000\n"
12"Last-Translator: Shengjing Zhu <Unknown>\n"
12"Last-Translator: Shengjing Zhu <Unknown>\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "固定到启动器"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "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,7 +80,7 @@ msgstr "紧急电话"
80msgid "OK"
80msgid "OK"
81msgstr "确定"
81msgstr "确定"
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr "近期搜索"
85msgstr "近期搜索"
86
86
@@ -165,11 +165,35 @@ msgstr "显示密码"
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr "请输入 SIM PIN"
166msgstr "请输入 SIM PIN"
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr "搜索"
194msgstr "搜索"
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr "请输入 %1"
199msgstr "请输入 %1"
po/zh_HK.po+33−9
@@ -7,24 +7,24 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "鎖定至啟動器"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "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,7 +80,7 @@ msgstr "緊急電話"
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr "最近的搜尋"
85msgstr "最近的搜尋"
86
86
@@ -165,11 +165,35 @@ msgstr "顯示密碼"
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr "搜尋"
194msgstr "搜尋"
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr "請輸入 %1"
199msgstr "請輸入 %1"
po/zh_TW.po+32−8
@@ -7,23 +7,23 @@ 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-06-13 09:55+0200\n"
10+"POT-Creation-Date: 2014-07-07 12:15+0100\n"
11"PO-Revision-Date: 2014-01-16 06:04+0000\n"
11"PO-Revision-Date: 2014-01-16 06:04+0000\n"
12"Last-Translator: Henry Yang <henry9846@hotmail.com>\n"
12"Last-Translator: Henry Yang <henry9846@hotmail.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-06-17 06:51+0000\n"
17+"X-Launchpad-Export-Date: 2014-07-09 06:37+0000\n"
18−"X-Generator: Launchpad (build 17045)\n"
18+"X-Generator: Launchpad (build 17100)\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
22−msgid "Lock to Launcher"
22+msgid "Pin shortcut"
23−msgstr "鎖定至啟動欄"
23+msgstr ""
24
24
25#: plugins/Unity/Launcher/launcheritem.cpp:73
25#: plugins/Unity/Launcher/launcheritem.cpp:73
26−msgid "Unlock from Launcher"
26+msgid "Unpin shortcut"
27msgstr ""
27msgstr ""
28
28
29#: qml/Components/EdgeDemoOverlay.qml:151
29#: qml/Components/EdgeDemoOverlay.qml:151
@@ -80,7 +80,7 @@ msgstr "緊急連絡"
80msgid "OK"
80msgid "OK"
81msgstr ""
81msgstr ""
82
82
83−#: qml/Components/PageHeader.qml:365
83+#: qml/Components/PageHeader.qml:366
84msgid "Recent searches"
84msgid "Recent searches"
85msgstr "最近搜尋"
85msgstr "最近搜尋"
86
86
@@ -165,11 +165,35 @@ msgstr "顯示密碼"
165msgid "Please enter SIM PIN"
165msgid "Please enter SIM PIN"
166msgstr ""
166msgstr ""
167
167
168+#: qml/Panel/Indicators/MenuItemFactory.qml:583
169+msgid "In queue…"
170+msgstr ""
171+
172+#: qml/Panel/Indicators/MenuItemFactory.qml:587
173+msgid "Downloading"
174+msgstr ""
175+
176+#: qml/Panel/Indicators/MenuItemFactory.qml:589
177+msgid "Paused, tap to resume"
178+msgstr ""
179+
180+#: qml/Panel/Indicators/MenuItemFactory.qml:591
181+msgid "Canceled"
182+msgstr ""
183+
184+#: qml/Panel/Indicators/MenuItemFactory.qml:593
185+msgid "Finished"
186+msgstr ""
187+
188+#: qml/Panel/Indicators/MenuItemFactory.qml:595
189+msgid "Failed, tap to retry"
190+msgstr ""
191+
168#: qml/Panel/SearchIndicator.qml:27
192#: qml/Panel/SearchIndicator.qml:27
169msgid "Search"
193msgid "Search"
170msgstr "搜尋"
194msgstr "搜尋"
171
195
172−#: qml/Shell.qml:334
196+#: qml/Shell.qml:359
173#, qt-format
197#, qt-format
174msgid "Please enter %1"
198msgid "Please enter %1"
175msgstr ""
199msgstr ""
qml/Components/BaseCarouselDelegate.qml+19
@@ -17,7 +17,26 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import Ubuntu.Components 0.1
18import Ubuntu.Components 0.1
19
19
20+/*!
21+ \brief Base delegate for use with the Carousel component
22+
23+ Use this as the base of your component in a Carousel, the properties
24+ will get updated and signals emitted accordingly.
25+*/
26+
20Item {
27Item {
28+ /// True if this item is currently "focused" in the carousel.
21 property bool explicitlyScaled
29 property bool explicitlyScaled
30+
31+ /// Model index for this delegate.
32+ property int index
33+
34+ /// Model data for this delegate.
22 property var model
35 property var model
36+
37+ /// Will be emitted when the item is tapped.
38+ signal clicked
39+
40+ /// Will be emitted when the item is long-pressed.
41+ signal pressAndHold
23}
42}
qml/Components/Carousel.qml+5−14
@@ -52,16 +52,6 @@ Item {
52 /// exposes the distance to the next row (only one row in carousel, so it's the topMargins)
52 /// exposes the distance to the next row (only one row in carousel, so it's the topMargins)
53 readonly property alias verticalSpacing: listView.verticalMargin
53 readonly property alias verticalSpacing: listView.verticalMargin
54
54
55− /// Emitted when the user clicked on an item
56− /// @param index is the index of the clicked item
57− /// @param itemY is y of the clicked delegate
58− signal clicked(int index, real itemY)
59−
60− /// Emitted when the user pressed and held on an item
61− /// @param index is the index of the held item
62− /// @param itemY is y of the held delegate
63− signal pressAndHold(int index, real itemY)
64−
65 implicitHeight: listView.tileHeight * selectedItemScaleFactor
55 implicitHeight: listView.tileHeight * selectedItemScaleFactor
66 opacity: listView.highlightIndex === -1 ? 1 : 0.6
56 opacity: listView.highlightIndex === -1 ? 1 : 0.6
67
57
@@ -167,7 +157,7 @@ Item {
167 /* We're clicking the selected item and
157 /* We're clicking the selected item and
168 we're in the neighbourhood of radius 1 pixel from it.
158 we're in the neighbourhood of radius 1 pixel from it.
169 Let's emit the clicked signal. */
159 Let's emit the clicked signal. */
170− carousel.clicked(index, delegateItem.y)
160+ delegateItem.clicked()
171 return
161 return
172 }
162 }
173
163
@@ -185,7 +175,7 @@ Item {
185 /* We're pressAndHold the selected item and
175 /* We're pressAndHold the selected item and
186 we're in the neighbourhood of radius 1 pixel from it.
176 we're in the neighbourhood of radius 1 pixel from it.
187 Let's emit the pressAndHold signal. */
177 Let's emit the pressAndHold signal. */
188− carousel.pressAndHold(index, delegateItem.y);
178+ delegateItem.pressAndHold();
189 return;
179 return;
190 }
180 }
191
181
@@ -316,8 +306,9 @@ Item {
316 }
306 }
317
307
318 onLoaded: {
308 onLoaded: {
319− item.explicitlyScaled = Qt.binding(function() { return explicitlyScaled; })
309+ item.explicitlyScaled = Qt.binding(function() { return explicitlyScaled; });
310+ item.index = Qt.binding(function() { return index; });
320− item.model = Qt.binding(function() { return model; })
311+ item.model = Qt.binding(function() { return model; });
321 }
312 }
322
313
323 MouseArea {
314 MouseArea {
qml/Components/ListItems/Header.qml+1
@@ -24,6 +24,7 @@ Item {
24 \qmlproperty string text
24 \qmlproperty string text
25 */
25 */
26 property alias text: label.text
26 property alias text: label.text
27+ property alias textColor: label.color
27 property alias image: image.source
28 property alias image: image.source
28
29
29 signal clicked(variant mouse)
30 signal clicked(variant mouse)
qml/Components/PageHeader.qml+221−313
@@ -14,386 +14,294 @@
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+import QtQuick 2.2
18+import Ubuntu.Components 1.1
18−import Ubuntu.Components 0.1
19+import Ubuntu.Components.Themes.Ambiance 1.1
19−import Ubuntu.Components.Popups 0.1
20+import Ubuntu.Components.Popups 1.0
20−import Ubuntu.Components.ListItems 0.1 as ListItem
21+import Ubuntu.Components.ListItems 1.0
21−import Unity 0.2
22+import "SearchHistoryModel"
22
23
23Item {
24Item {
24 id: root
25 id: root
26+ objectName: "pageHeader"
27+ implicitHeight: headerContainer.height + units.gu(2) + bottomContainer.height
28+
29+ property bool showBackButton: false
30+ property string title
31+
25 property bool searchEntryEnabled: false
32 property bool searchEntryEnabled: false
33+ property ListModel searchHistory: SearchHistoryModel
26− property alias searchQuery: searchField.text
34+ property alias searchQuery: searchTextField.text
27− property ListModel searchHistory
35+ property bool searchInProgress: false
28− property var scope: null
36+
29− property alias childItem: itemContainer.children
30 property alias bottomItem: bottomContainer.children
37 property alias bottomItem: bottomContainer.children
31− property alias showBackButton: backButton.visible
32
38
33− signal backClicked
39+ // TODO We should use foreground for the icons
40+ // of the toolbar but unfortunately Action does not have
41+ // the keyColor property as Icon does :-/
42+ property var scopeStyle: null
34
43
35− height: header.height + units.gu(2) + bottomContainer.height
44+ signal backClicked()
36− implicitHeight: header.height + units.gu(2) + bottomContainer.height
45+
46+ onScopeStyleChanged: refreshLogo()
37
47
38 function triggerSearch() {
48 function triggerSearch() {
39− if (searchEntryEnabled) searchField.forceActiveFocus()
49+ if (searchEntryEnabled) {
50+ headerContainer.showSearch = true;
51+ searchTextField.forceActiveFocus();
52+ }
40 }
53 }
41
54
42− function resetSearch() {
55+ function resetSearch(keepFocus) {
43− if (!searchHistory) return;
56+ if (searchHistory) {
44−
45− searchHistory.addQuery(searchField.text);
57+ searchHistory.addQuery(searchTextField.text);
58+ }
59+ if (!keepFocus) {
46− unfocus();
60+ unfocus();
47− searchField.text = "";
61+ }
62+ searchTextField.text = "";
63+ if (headerContainer.popover != null) {
64+ PopupUtils.close(headerContainer.popover);
65+ }
48 }
66 }
49
67
50 function unfocus() {
68 function unfocus() {
51− searchField.focus = false;
69+ searchTextField.focus = false;
70+ if (!searchTextField.text) {
71+ headerContainer.showSearch = false;
72+ }
52 }
73 }
53
74
54− Connections {
75+ function openSearchHistory() {
55− target: greeter
76+ if (openSearchAnimation.running) {
56− onShownChanged: if (shown) resetSearch()
77+ openSearchAnimation.openSearchHistory = true;
78+ } else if (root.searchHistory.count > 0 && headerContainer.popover == null) {
79+ headerContainer.popover = PopupUtils.open(popoverComponent, searchTextField,
80+ {
81+ "contentWidth": searchTextField.width,
82+ "edgeMargins": units.gu(1)
83+ }
84+ );
85+ }
57 }
86 }
58
87
59− Flickable {
88+ function refreshLogo() {
60− id: header
89+ if (scopeStyle ? scopeStyle.headerLogo != "" : false) {
61− anchors {
90+ header.contents = imageComponent.createObject();
62− left: parent.left
91+ } else if (header.contents) {
63− right: parent.right
92+ header.contents.destroy();
64− top: parent.top
93+ header.contents = null;
65 }
94 }
66− height: units.gu(6.5)
95+ }
67−
68− interactive: false
69− contentHeight: headerContainer.height
70− clip: true
71−
72− contentY: searchField.activeFocus || searchField.text != "" ? searchContainer.y : headerContainer.y
73
96
74− Behavior on contentY { NumberAnimation { duration: 200; easing.type: Easing.OutQuad } }
97+ Connections {
98+ target: root.scopeStyle
99+ onHeaderLogoChanged: root.refreshLogo()
100+ }
75
101
76− AbstractButton {
102+ InverseMouseArea {
77− id: backButton
103+ anchors { fill: parent; margins: units.gu(1); bottomMargin: units.gu(3) + bottomContainer.height }
78− objectName: root.objectName + "_backButton"
104+ visible: headerContainer.showSearch
79− visible: false
105+ onPressed: {
80− height: header.height
106+ if (headerContainer.popover) {
81− y: header.contentY
107+ PopupUtils.close(headerContainer.popover);
82− anchors {
83− left: parent.left
84− leftMargin: visible ? units.gu(2) : 0
85 }
108 }
86− width: visible ? image.width + units.gu(2) : 0
109+ if (!searchTextField.text) {
87− onClicked: root.backClicked();
110+ headerContainer.showSearch = false;
88− Image {
89− id: image
90− anchors.centerIn: parent
91− source: "graphics/headerback.png"
92 }
111 }
112+ searchTextField.focus = false;
113+ mouse.accepted = false;
93 }
114 }
115+ }
94
116
95− // FIXME this could potentially be simplified to avoid all the containers
117+ Flickable {
96− Item {
97− id: headerContainer
118+ id: headerContainer
98−
99− anchors {
100− left: backButton.right
101− right: parent.right
102− }
103− height: childrenRect.height
104−
105− Item {
106− id: itemContainer
107−
108− width: searchContainer.narrowMode ? header.width : header.width - searchContainer.width
109− height: header.height
110− }
111−
112− Item {
113− id: searchContainer
114− objectName: "searchContainer"
119+ objectName: "headerContainer"
115−
120+ clip: true
116− visible: searchEntryEnabled
121+ anchors { left: parent.left; top: parent.top; right: parent.right }
117− property bool popoverShouldOpen: false
122+ height: units.gu(6.5)
118− property bool popoverShouldClose: false
123+ contentHeight: headersColumn.height
119−
124+ interactive: false
120− property bool narrowMode: parent.width < units.gu(80)
125+ contentY: showSearch ? 0 : height
121−
122− property bool active: searchField.text != "" || searchField.activeFocus
123− property var popover: null
124
126
125− anchors.right: headerContainer.right
127+ property bool showSearch: false
126− height: header.height
128+ property var popover: null
127
129
128− state:
130+ Behavior on contentY {
129− if (active && narrowMode) "narrowActive"
131+ UbuntuNumberAnimation {
130− else if (!active && narrowMode) "narrowInactive"
132+ id: openSearchAnimation
131− else if (active && !narrowMode) "active"
133+ property bool openSearchHistory: false
132− else if (!active && !narrowMode) "inactive"
133
134
134− onStateChanged: {
135+ onRunningChanged: {
135− if (state == "active" || state == "narrowActive") {
136+ if (!running && openSearchAnimation.openSearchHistory) {
136− popoverShouldOpen = true;
137+ openSearchAnimation.openSearchHistory = false;
137− popoverShouldClose = false;
138+ root.openSearchHistory();
138− } else {
139− popoverShouldOpen = false;
140− popoverShouldClose = true;
141 }
139 }
142 }
140 }
141+ }
142+ }
143
143
144− function openPopover() {
144+ Column {
145− if (searchHistory.count > 0) {
145+ id: headersColumn
146− searchContainer.popover = PopupUtils.open(popoverComponent, pointerPositioner,
146+ anchors { left: parent.left; right: parent.right }
147− {
147+
148− "contentWidth": searchField.width,
148+ PageHeadStyle {
149− "edgeMargins": units.gu(1)
149+ id: searchHeader
150+ anchors { left: parent.left; right: parent.right }
151+ height: headerContainer.height
152+ contentHeight: height
153+ separatorSource: ""
154+ // Required to keep PageHeadStyle noise down as it expects the Page's properties around.
155+ property var styledItem: searchHeader
156+ property string title
157+ property var config: PageHeadConfiguration {
158+ backAction: Action {
159+ iconName: "back"
160+ onTriggered: {
161+ root.resetSearch();
162+ headerContainer.showSearch = false;
150− }
163+ }
151− )
152 }
164 }
153− popoverShouldOpen = false;
154− popoverShouldClose = false;
155 }
165 }
156−
166+ property var contents: TextField {
157− function closePopover() {
167+ id: searchTextField
158− if (searchContainer.popover) {
168+ objectName: "searchTextField"
159− PopupUtils.close(searchContainer.popover);
169+ hasClearButton: false
160− searchContainer.popover = null;
170+ anchors {
171+ fill: parent
172+ leftMargin: units.gu(1)
173+ topMargin: units.gu(1)
174+ bottomMargin: units.gu(1)
175+ rightMargin: root.width > units.gu(60) ? root.width - units.gu(40) : units.gu(1)
161 }
176 }
162− popoverShouldOpen = false;
163− popoverShouldClose = false;
164− }
165−
166− onActiveFocusChanged: if (!activeFocus) { searchHistory.addQuery(searchField.text) }
167−
168− TextField {
169− id: searchField
170−
171− anchors.fill: parent
172− anchors.margins: units.gu(1)
173
177
174− inputMethodHints: Qt.ImhNoPredictiveText
178+ secondaryItem: AbstractButton {
175− hasClearButton: false
179+ height: searchTextField.height
180+ width: height
181+ enabled: searchTextField.text.length > 0
176
182
177− primaryItem: AbstractButton {
183+ Image {
178− enabled: searchField.text != "" && !searchIndicator.running
184+ objectName: "clearIcon"
179− onClicked: {
185+ anchors.fill: parent
180− if (searchField.text != "") {
186+ anchors.margins: units.gu(.75)
181− searchHistory.addQuery(searchField.text)
187+ source: "image://theme/clear"
182− searchField.text = ""
188+ opacity: searchTextField.text.length > 0 && !searchActivityIndicator.running
189+ visible: opacity > 0
190+ Behavior on opacity {
191+ UbuntuNumberAnimation { duration: UbuntuAnimation.FastDuration }
183 }
192 }
184 }
193 }
185− height: parent.height
186− width: height
187
194
188 ActivityIndicator {
195 ActivityIndicator {
189− id: searchIndicator
196+ id: searchActivityIndicator
190 objectName: "searchIndicator"
197 objectName: "searchIndicator"
191−
192− anchors {
198+ anchors.fill: parent
193− verticalCenter: parent.verticalCenter
199+ anchors.margins: units.gu(.75)
194− left: parent.left
200+ running: root.searchInProgress
195− leftMargin: units.gu(0.5)
196− }
197−
198− running: opacity > 0
201+ opacity: running ? 1 : 0
199− }
202+ Behavior on opacity {
200−
203+ UbuntuNumberAnimation { duration: UbuntuAnimation.FastDuration }
201− Image {
202− id: primaryImage
203− objectName: "primaryImage"
204− anchors {
205− verticalCenter: parent.verticalCenter
206− left: parent.left
207− leftMargin: units.gu(0.5)
208 }
204 }
209− width: units.gu(3)
210− height: units.gu(3)
211− visible: opacity > 0
212 }
205 }
213
206
214− Item {
207+ onClicked: {
215− id: pointerPositioner
208+ root.resetSearch(true);
216− anchors.left: parent.right
209+ root.openSearchHistory();
217− anchors.leftMargin: units.gu(0.5)
218− anchors.top: parent.bottom
219 }
210 }
220 }
211 }
221
212
222− onTextChanged: {
223− if (text != "") searchContainer.closePopover()
224− else if (text == "" && activeFocus) searchContainer.openPopover()
225− }
226−
227 onActiveFocusChanged: {
213 onActiveFocusChanged: {
228− if (!activeFocus) searchContainer.closePopover()
214+ if (activeFocus) {
215+ root.openSearchHistory();
216+ }
229 }
217 }
218+ }
219+ }
230
220
231− states: [
221+ PageHeadStyle {
232− State {
222+ id: header
233− name: "searching"
223+ objectName: "innerPageHeader"
234− when: scope && scope.searchInProgress
224+ anchors { left: parent.left; right: parent.right }
235− PropertyChanges { target: searchIndicator; running: true; opacity: 1 }
225+ height: headerContainer.height
236− PropertyChanges { target: primaryImage; opacity: 0 }
226+ contentHeight: height
237− },
227+ separatorSource: ""
238− State {
228+ textColor: root.scopeStyle ? root.scopeStyle.foreground : "grey"
239− name: "idle"
229+ property var styledItem: header
240− when: !scope || !scope.searchInProgress
230+ property string title: root.title
241− PropertyChanges { target: searchIndicator; opacity: 0 }
231+ property var config: PageHeadConfiguration {
242− PropertyChanges { target: primaryImage; opacity: 1 }
232+ backAction: Action {
233+ iconName: "back"
234+ visible: root.showBackButton
235+ onTriggered: {
236+ root.backClicked();
243 }
237 }
244− ]
238+ }
245
239
246− transitions: [
240+ actions: [
247− Transition {
241+ Action {
248− to: "searching"
242+ iconName: "search"
249− reversible: true
243+ visible: root.searchEntryEnabled
250− SequentialAnimation {
244+ onTriggered: {
251− NumberAnimation { target: primaryImage; property: "opacity"; duration: UbuntuAnimation.FastDuration; easing.type: Easing.Linear }
245+ headerContainer.showSearch = true;
252− NumberAnimation { target: searchIndicator; property: "opacity"; duration: UbuntuAnimation.FastDuration; easing.type: Easing.Linear }
246+ searchTextField.forceActiveFocus();
253 }
247 }
254 }
248 }
255 ]
249 ]
256 }
250 }
257
251
258− states: [
252+ property var contents: null
259− State {
253+ Component.onCompleted: root.refreshLogo()
260− name: "wide"
261− AnchorChanges { target: itemContainer; anchors.top: headerContainer.top }
262− AnchorChanges { target: searchContainer; anchors.left: undefined; anchors.top: itemContainer.top }
263− },
264− State {
265− name: "narrow"
266− PropertyChanges { target: searchField; highlighted: true }
267− AnchorChanges { target: itemContainer; anchors.top: searchContainer.bottom }
268− AnchorChanges { target: searchContainer; anchors.left: headerContainer.left; anchors.top: headerContainer.top }
269− },
270− State {
271− name: "active"
272− extend: "wide"
273− PropertyChanges { target: searchContainer; width: units.gu(40) }
274− PropertyChanges { target: primaryImage; source: searchField.text ? "../Dash/graphics/icon_clear.png" : "../Dash/graphics/icon_search_active.png" }
275− PropertyChanges { target: searchField; highlighted: true }
276− },
277− State {
278− name: "inactive"
279− extend: "wide"
280− PropertyChanges { target: searchContainer; width: units.gu(25) }
281− PropertyChanges { target: primaryImage; source: "../Dash/graphics/icon_search_inactive.png" }
282− PropertyChanges { target: searchField; highlighted: false }
283− },
284− State {
285− name: "narrowActive"
286− extend: "narrow"
287− PropertyChanges { target: header; contentY: 0 }
288− PropertyChanges { target: primaryImage; source: searchField.text ? "../Dash/graphics/icon_clear.png" : "../Dash/graphics/icon_search_active.png" }
289− },
290− State {
291− name: "narrowInactive"
292− extend: "narrow"
293− PropertyChanges { target: header; contentY: header.height }
294− PropertyChanges { target: primaryImage; source: searchField.text ? "../Dash/graphics/icon_clear.png" : "../Dash/graphics/icon_search_active.png" }
295− }
296− ]
297−
298− transitions: [
299− Transition {
300− to: "active"
301− SequentialAnimation {
302− ParallelAnimation {
303− NumberAnimation { targets: [searchContainer, searchField]; property: "width"; duration: 200; easing.type: Easing.InOutQuad }
304− PropertyAction { target: primaryImage; property: "source" }
305− AnchorAnimation { targets: [searchContainer, itemContainer]; duration: 200; easing.type: Easing.InOutQuad }
306− }
307− ScriptAction { script: if (searchContainer.popoverShouldOpen) { searchContainer.openPopover(); } }
308− }
309− },
310− Transition {
311− to: "inactive"
312− ScriptAction { script: if (searchContainer.popoverShouldClose) { searchContainer.closePopover(); } }
313− NumberAnimation { targets: [searchContainer, searchField] ; property: "width"; duration: 200; easing.type: Easing.InOutQuad }
314− AnchorAnimation { targets: [searchContainer, itemContainer]; duration: 200; easing.type: Easing.InOutQuad }
315− },
316− Transition {
317− to: "narrowActive"
318− SequentialAnimation {
319− ParallelAnimation {
320− NumberAnimation { targets: [searchContainer, searchField] ; property: "width"; duration: 200; easing.type: Easing.OutQuad }
321− AnchorAnimation { targets: [searchContainer, itemContainer]; duration: 200; easing.type: Easing.InOutQuad }
322− }
323− ScriptAction { script: if (searchContainer.popoverShouldOpen) { searchContainer.openPopover(); } }
324− }
325− },
326− Transition {
327− to: "narrowInactive"
328− ScriptAction { script: if (searchContainer.popoverShouldClose) { searchContainer.closePopover(); } }
329− NumberAnimation { targets: [searchContainer, searchField] ; property: "width"; duration: 200; easing.type: Easing.OutQuad }
330− AnchorAnimation { targets: [searchContainer, itemContainer]; duration: 200; easing.type: Easing.InOutQuad }
331− }
332− ]
333
254
334 Component {
255 Component {
335− id: popoverComponent
256+ id: imageComponent
336− Popover {
337− id: popover
338−
339− // FIXME: this should go into the first item below, but enable: false
340− // prevents mouse events propagation
341− AbstractButton {
342− anchors {
343− top: parent.top
344− right: parent.right
345− }
346− height: units.gu(6)
347− width: height
348−
349− onClicked: searchContainer.closePopover()
350
257
351− Image {
258+ Item {
352− anchors.centerIn: parent
259+ anchors { fill: parent; topMargin: units.gu(1); bottomMargin: units.gu(1) }
353− width: units.gu(2)
260+ clip: true
354− height: units.gu(2)
261+ Image {
355− source: "../Dash/graphics/icon_listview_clear.png"
262+ objectName: "titleImage"
356− }
263+ anchors.fill: parent
264+ source: root.scopeStyle ? root.scopeStyle.headerLogo : ""
265+ fillMode: Image.PreserveAspectFit
266+ horizontalAlignment: Image.AlignLeft
267+ sourceSize.height: height
357 }
268 }
269+ }
270+ }
271+ }
272+ }
273+ }
358
274
359− Column {
275+ Component {
360− anchors {
276+ id: popoverComponent
361− top: parent.top
277+ Popover {
362− left: parent.left
278+ id: popover
363− right: parent.right
279+ autoClose: false
364− }
365−
366− ListItem.Standard { enabled: false; text: i18n.tr("Recent searches") }
367
280
368− Repeater {
281+ Component.onDestruction: {
369− id: recentSearches
282+ headerContainer.popover = null;
370− model: searchHistory
283+ }
371
284
372− delegate: ListItem.Standard {
285+ Column {
373− showDivider: index < recentSearches.count - 1
286+ anchors {
374− text: query
287+ top: parent.top
375− onClicked: {
288+ left: parent.left
376− searchHistory.addQuery(text)
289+ right: parent.right
377− searchField.text = text
378− }
379− }
380− }
381− }
382− }
383 }
290 }
384
291
385− InverseMouseArea {
292+ Repeater {
386− enabled: searchField.activeFocus
293+ id: recentSearches
294+ model: searchHistory
387
295
388− anchors {
296+ delegate: Standard {
389− top: parent.top
297+ showDivider: index < recentSearches.count - 1
390− left: parent.left
298+ text: query
391− right: parent.right
299+ onClicked: {
300+ searchHistory.addQuery(text);
301+ searchTextField.text = text;
302+ PopupUtils.close(popover);
303+ }
392 }
304 }
393−
394− height: searchContainer.popover ? parent.height + searchContainer.popover.contentHeight + units.gu(2) : parent.height
395−
396− onPressed: searchField.focus = false
397 }
305 }
398 }
306 }
399 }
307 }
@@ -402,7 +310,7 @@ Item {
402 BorderImage {
310 BorderImage {
403 id: bottomBorder
311 id: bottomBorder
404 anchors {
312 anchors {
405− top: header.bottom
313+ top: headerContainer.bottom
406 left: parent.left
314 left: parent.left
407 right: parent.right
315 right: parent.right
408 bottom: bottomContainer.top
316 bottom: bottomContainer.top
qml/Components/PageHeaderLabel.qmldeleted−41
@@ -1,41 +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−
20−PageHeader {
21− property alias text: label.text
22−
23− childItem: Label {
24− id: label
25− anchors {
26− left: parent.left
27− leftMargin: units.gu(2)
28− right: parent.right
29− verticalCenter: parent.verticalCenter
30− }
31−
32− color: Theme.palette.selected.backgroundText
33− opacity: 0.8
34− font.family: "Ubuntu"
35− font.weight: Font.Light
36− fontSize: "x-large"
37− elide: Text.ElideRight
38− style: Text.Raised
39− styleColor: "black"
40− }
41−}
qml/Components/SearchHistoryModel.qml → qml/Components/SearchHistoryModel/SearchHistoryModel.qmlrenamed+1
@@ -14,6 +14,7 @@
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+pragma Singleton
17import QtQuick 2.0
18import QtQuick 2.0
18
19
19// TODO sanitize input, move to persistent storage
20// TODO sanitize input, move to persistent storage
qml/Components/SearchHistoryModel/qmldirnew file+1
@@ -0,0 +1 @@
1+singleton SearchHistoryModel 1.0 SearchHistoryModel.qml
qml/Components/graphics/headerback@27.pngdeleted

Binary file not shown.

qml/Dash/CardCarousel.qml+7−4
@@ -40,9 +40,6 @@ DashRenderer {
40 cacheBuffer: 1404 // 18px * 13gu * 6
40 cacheBuffer: 1404 // 18px * 13gu * 6
41 model: cardCarousel.model
41 model: cardCarousel.model
42
42
43− onClicked: cardCarousel.clicked(index, null)
44− onPressAndHold: cardCarousel.pressAndHold(index)
45−
46 property real fontScale: 1 / selectedItemScaleFactor
43 property real fontScale: 1 / selectedItemScaleFactor
47 property real headerHeight: cardTool.headerHeight / selectedItemScaleFactor
44 property real headerHeight: cardTool.headerHeight / selectedItemScaleFactor
48
45
@@ -51,11 +48,16 @@ DashRenderer {
51
48
52 property bool explicitlyScaled
49 property bool explicitlyScaled
53 property var model
50 property var model
51+ property int index
54 enabled: false
52 enabled: false
55
53
54+ objectName: "carouselDelegate" + index
55+
56+ function clicked() { cardCarousel.clicked(index, model.result) }
57+ function pressAndHold() { cardCarousel.pressAndHold(index, model.result) }
58+
56 sourceComponent: cardTool.cardComponent
59 sourceComponent: cardTool.cardComponent
57 onLoaded: {
60 onLoaded: {
58− item.objectName = "carouselDelegate" + index;
59 item.fixedHeaderHeight = Qt.binding(function() { return carousel.headerHeight; });
61 item.fixedHeaderHeight = Qt.binding(function() { return carousel.headerHeight; });
60 item.height = Qt.binding(function() { return cardTool.cardHeight; });
62 item.height = Qt.binding(function() { return cardTool.cardHeight; });
61 item.cardData = Qt.binding(function() { return model; });
63 item.cardData = Qt.binding(function() { return model; });
@@ -64,6 +66,7 @@ DashRenderer {
64 item.fontScale = Qt.binding(function() { return carousel.fontScale; });
66 item.fontScale = Qt.binding(function() { return carousel.fontScale; });
65 item.showHeader = Qt.binding(function() { return loader.explicitlyScaled; });
67 item.showHeader = Qt.binding(function() { return loader.explicitlyScaled; });
66 item.artShapeBorderSource = "none";
68 item.artShapeBorderSource = "none";
69+ item.scopeStyle = cardCarousel.scopeStyle;
67 }
70 }
68
71
69 BorderImage {
72 BorderImage {
qml/Dash/CardFilterGrid.qml+1
@@ -58,6 +58,7 @@ 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 }
62 }
62 Connections {
63 Connections {
63 target: loader.item
64 target: loader.item
qml/Dash/CardVerticalJournal.qml+2−1
@@ -31,7 +31,7 @@ DashRenderer {
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
35 height: filtered ? Math.max(collapsedHeight, minHeight) : uncollapsedHeight
36
36
37 Behavior on height {
37 Behavior on height {
@@ -75,6 +75,7 @@ DashRenderer {
75 item.template = Qt.binding(function() { return cardTool.template; });
75 item.template = Qt.binding(function() { return cardTool.template; });
76 item.components = Qt.binding(function() { return cardTool.components; });
76 item.components = Qt.binding(function() { return cardTool.components; });
77 item.headerAlignment = Qt.binding(function() { return cardTool.headerAlignment; });
77 item.headerAlignment = Qt.binding(function() { return cardTool.headerAlignment; });
78+ item.scopeStyle = root.scopeStyle;
78 }
79 }
79 Connections {
80 Connections {
80 target: loader.item
81 target: loader.item
qml/Dash/Dash.qml+14−15
@@ -26,9 +26,6 @@ Showable {
26
26
27 visible: shown
27 visible: shown
28
28
29− property ListModel searchHistory: SearchHistoryModel {}
30− property bool searchable: !dashContent.previewOpen && !scopeItem.previewOpen
31−
32 property string showScopeOnLoaded: "clickscope"
29 property string showScopeOnLoaded: "clickscope"
33 property real contentScale: 1.0
30 property real contentScale: 1.0
34
31
@@ -76,7 +73,6 @@ Showable {
76 height: parent.height
73 height: parent.height
77 model: filteredScopes
74 model: filteredScopes
78 scopes: scopes
75 scopes: scopes
79− searchHistory: dash.searchHistory
80 visible: x != -width
76 visible: x != -width
81 onGotoScope: {
77 onGotoScope: {
82 dash.setCurrentScope(scopeId, true, false);
78 dash.setCurrentScope(scopeId, true, false);
@@ -105,26 +101,29 @@ Showable {
105 }
101 }
106 }
102 }
107
103
108− ScopeItem {
104+ GenericScopeView {
109 id: scopeItem
105 id: scopeItem
110 anchors.left: dashContent.right
106 anchors.left: dashContent.right
111 width: parent.width
107 width: parent.width
112 height: parent.height
108 height: parent.height
113− searchHistory: dash.searchHistory
114 scale: dash.contentScale
109 scale: dash.contentScale
115 clip: scale != 1.0
110 clip: scale != 1.0
116 visible: scope != null
111 visible: scope != null
117− onBack: {
112+ hasBackAction: true
113+ isCurrent: visible
114+ onBackClicked: {
118 closeOverlayScope();
115 closeOverlayScope();
119− }
116+ closePreview();
120− onGotoScope: {
121− // TODO
122− console.log("gotoScope from an openScope scope is not implemented");
123− }
124− onOpenScope: {
125− // TODO
126− console.log("openScope from an openScope scope is not implemented");
127 }
117 }
128
118
119+ Connections {
120+ target: scopeItem.scope
121+ onGotoScope: {
122+ dashContent.gotoScope(scopeId);
123+ }
124+ onOpenScope: {
125+ dashContent.openScope(scope);
126+ }
127+ }
129 }
128 }
130}
129}
qml/Dash/DashContent.qml+7−84
@@ -26,13 +26,11 @@ Item {
26 property var model: null
26 property var model: null
27 property var scopes: null
27 property var scopes: null
28 readonly property alias currentIndex: dashContentList.currentIndex
28 readonly property alias currentIndex: dashContentList.currentIndex
29− property alias previewOpen: previewListView.open
30−
31− property ListModel searchHistory
32
29
33 signal scopeLoaded(string scopeId)
30 signal scopeLoaded(string scopeId)
34 signal gotoScope(string scopeId)
31 signal gotoScope(string scopeId)
35 signal openScope(var scope)
32 signal openScope(var scope)
33+ signal closePreview()
36
34
37 // If we set the current scope index before the scopes have been added,
35 // If we set the current scope index before the scopes have been added,
38 // then we need to wait until the loaded signals gets emitted from the scopes
36 // then we need to wait until the loaded signals gets emitted from the scopes
@@ -82,23 +80,16 @@ Item {
82 dashContentList.currentItem.theScope.closeScope(scope)
80 dashContentList.currentItem.theScope.closeScope(scope)
83 }
81 }
84
82
85− function closePreview() {
86− previewListView.open = false;
87− }
88−
89 Item {
83 Item {
90 id: dashContentListHolder
84 id: dashContentListHolder
91
85
92− x: previewListView.open ? -width : 0
86+ anchors.fill: parent
93− Behavior on x { UbuntuNumberAnimation { } }
94− width: parent.width
95− height: parent.height
96
87
97 ListView {
88 ListView {
98 id: dashContentList
89 id: dashContentList
99 objectName: "dashContentList"
90 objectName: "dashContentList"
100
91
101− interactive: dashContent.scopes.loaded && !previewListView.open && currentItem && !currentItem.moving
92+ interactive: dashContent.scopes.loaded && currentItem && !currentItem.moving
102
93
103 anchors.fill: parent
94 anchors.fill: parent
104 model: dashContent.model
95 model: dashContent.model
@@ -147,11 +138,8 @@ Item {
147
138
148 onLoaded: {
139 onLoaded: {
149 item.objectName = scope.id
140 item.objectName = scope.id
150− item.pageHeader = dashPageHeader;
151− item.previewListView = previewListView;
152 item.scope = Qt.binding(function() { return scope })
141 item.scope = Qt.binding(function() { return scope })
153 item.isCurrent = Qt.binding(function() { return visible && ListView.isCurrentItem })
142 item.isCurrent = Qt.binding(function() { return visible && ListView.isCurrentItem })
154− item.tabBarHeight = Qt.binding(function() { return dashPageHeader.implicitHeight; })
155 dashContent.scopeLoaded(item.scope.id)
143 dashContent.scopeLoaded(item.scope.id)
156 }
144 }
157 Connections {
145 Connections {
@@ -164,78 +152,13 @@ Item {
164 dashContent.openScope(scope);
152 dashContent.openScope(scope);
165 }
153 }
166 }
154 }
167−
168− Component.onDestruction: active = false
169− }
170− }
171−
172− PageHeader {
173− id: dashPageHeader
174− objectName: "pageHeader"
175− width: parent.width
176− searchEntryEnabled: true
177− searchHistory: dashContent.searchHistory
178− scope: dashContentList.currentItem && dashContentList.currentItem.theScope
179−
180− childItem: TabBar {
181− id: tabBar
182− objectName: "tabbar"
183− height: units.gu(6.5)
184− width: parent.width
185− style: DashContentTabBarStyle {}
186−
187− SortFilterProxyModel {
188− id: tabBarModel
189−
190− model: dashContentList.model
191−
192− property int selectedIndex: -1
193− onSelectedIndexChanged: {
194− if (dashContentList.currentIndex == -1 && tabBar.selectedIndex != -1) {
195− // TODO This together with the Timer below
196− // are a workaround for the first tab sometimes not showing the text.
197− // But Tabs are going away in the future so not sure if makes
198− // sense invetigating what's the problem at this stage
199− selectionModeTimer.restart();
200− }
201− dashContentList.currentIndex = selectedIndex;
202− }
203− }
204−
205− model: tabBarModel.count > 0 ? tabBarModel : null
206−
207− Connections {
155+ Connections {
208− target: dashContentList
156+ target: dashContent
209− onCurrentIndexChanged: {
157+ onClosePreview: if (item) item.closePreview()
210− tabBarModel.selectedIndex = dashContentList.currentIndex
211 }
158 }
212− }
213
159
214− Timer {
160+ Component.onDestruction: active = false
215− id: selectionModeTimer
216− interval: 1
217− onTriggered: tabBar.selectionMode = false
218 }
161 }
219− }
220−
221− bottomItem: DashDepartments {
222− scope: dashContentList.currentItem ? dashContentList.currentItem.theScope : null
223− width: parent.width <= units.gu(60) ? parent.width : units.gu(40)
224− anchors.right: parent.right
225− windowHeight: dashContent.height
226− windowWidth: dashContent.width
227− }
228 }
162 }
229 }
163 }
230−
231− PreviewListView {
232− id: previewListView
233− objectName: "dashContentPreviewList"
234− visible: x != width
235− scope: dashContentList.currentItem ? dashContentList.currentItem.theScope : null
236− pageHeader: dashPageHeader
237− width: parent.width
238− height: parent.height
239− anchors.left: dashContentListHolder.right
240− }
241}
164}
qml/Dash/DashDepartments.qml+8−7
@@ -29,6 +29,7 @@ AbstractButton {
29
29
30 property alias windowWidth: blackRect.width
30 property alias windowWidth: blackRect.width
31 property alias windowHeight: blackRect.height
31 property alias windowHeight: blackRect.height
32+ property var scopeStyle: null
32
33
33 // Are we drilling down the tree or up?
34 // Are we drilling down the tree or up?
34 property bool isGoingBack: false
35 property bool isGoingBack: false
@@ -78,18 +79,17 @@ AbstractButton {
78 anchors.margins: units.gu(2)
79 anchors.margins: units.gu(2)
79 verticalAlignment: Text.AlignVCenter
80 verticalAlignment: Text.AlignVCenter
80 text: root.currentDepartment ? root.currentDepartment.label : ""
81 text: root.currentDepartment ? root.currentDepartment.label : ""
81− color: "gray" // TODO remove once we're a separate app
82+ color: root.scopeStyle ? root.scopeStyle.foreground : "grey"
82 }
83 }
83
84
84− Image {
85+ Icon {
85 anchors.verticalCenter: parent.verticalCenter
86 anchors.verticalCenter: parent.verticalCenter
86 anchors.right: parent.right
87 anchors.right: parent.right
87 anchors.rightMargin: units.gu(2)
88 anchors.rightMargin: units.gu(2)
88− rotation: showList ? 180 : 0
89+ name: showList ? "up" : "down"
89− source: "image://theme/dropdown-menu"
90− sourceSize.height: parent.height - units.gu(2)
90+ height: units.gu(2)
91− sourceSize.width: units.gu(2)
91+ width: height
92− fillMode: Image.PreserveAspectFit
92+ color: root.scopeStyle ? root.scopeStyle.foreground : "grey"
93 }
93 }
94
94
95 // departmentListView is outside root
95 // departmentListView is outside root
@@ -124,6 +124,7 @@ AbstractButton {
124 objectName: "department" + index
124 objectName: "department" + index
125 visible: height != 0
125 visible: height != 0
126 width: departmentListView.width
126 width: departmentListView.width
127+ scopeStyle: root.scopeStyle
127 property real desiredHeight: {
128 property real desiredHeight: {
128 if (root.showList) {
129 if (root.showList) {
129 if (department && department.loaded && x == departmentListView.contentX)
130 if (department && department.loaded && x == departmentListView.contentX)
qml/Dash/DashDepartmentsList.qml+19−17
@@ -21,15 +21,17 @@ Item {
21 id: root
21 id: root
22 property var department: null
22 property var department: null
23 property var currentDepartment: null
23 property var currentDepartment: null
24+ property var scopeStyle: null
24 signal enterDepartment(var newDepartmentId, bool hasChildren)
25 signal enterDepartment(var newDepartmentId, bool hasChildren)
25 signal goBackToParentClicked()
26 signal goBackToParentClicked()
26 signal allDepartmentClicked()
27 signal allDepartmentClicked()
27
28
28 readonly property int itemHeight: units.gu(5)
29 readonly property int itemHeight: units.gu(5)
30+ readonly property color foregroundColor: root.scopeStyle ? root.scopeStyle.foreground : "grey"
29 implicitHeight: flickable.contentHeight
31 implicitHeight: flickable.contentHeight
30
32
31 Rectangle {
33 Rectangle {
32− color: "white"
34+ color: !root.scopeStyle || Qt.colorEqual(root.scopeStyle.background, "transparent") ? "white" : root.scopeStyle.background
33 anchors.fill: parent
35 anchors.fill: parent
34 }
36 }
35
37
@@ -71,17 +73,17 @@ Item {
71
73
72 onClicked: root.goBackToParentClicked();
74 onClicked: root.goBackToParentClicked();
73
75
74− Image {
76+ Icon {
75 id: backImage
77 id: backImage
76 anchors {
78 anchors {
77 verticalCenter: parent.verticalCenter
79 verticalCenter: parent.verticalCenter
78 left: parent.left
80 left: parent.left
79 leftMargin: units.gu(2)
81 leftMargin: units.gu(2)
80 }
82 }
81− source: "image://theme/back"
83+ name: "back"
82− sourceSize.height: parent.height - units.gu(3)
84+ height: units.gu(2)
83− sourceSize.width: units.gu(3)
85+ width: height
84− fillMode: Image.PreserveAspectFit
86+ color: root.foregroundColor
85 }
87 }
86
88
87 Label {
89 Label {
@@ -91,7 +93,7 @@ Item {
91 leftMargin: units.gu(0.5)
93 leftMargin: units.gu(0.5)
92 }
94 }
93 text: department ? department.parentLabel : ""
95 text: department ? department.parentLabel : ""
94− color: "gray" // TODO remove once we're a separate app
96+ color: root.foregroundColor
95 }
97 }
96
98
97 Rectangle {
99 Rectangle {
@@ -102,7 +104,7 @@ Item {
102 leftMargin: units.gu(2)
104 leftMargin: units.gu(2)
103 rightMargin: units.gu(2)
105 rightMargin: units.gu(2)
104 }
106 }
105− color: "gray"
107+ color: root.foregroundColor
106 opacity: 0.2
108 opacity: 0.2
107 height: units.dp(1)
109 height: units.dp(1)
108 }
110 }
@@ -123,7 +125,7 @@ Item {
123 }
125 }
124 text: department ? (department.allLabel != "" ? department.allLabel : department.label) : ""
126 text: department ? (department.allLabel != "" ? department.allLabel : department.label) : ""
125 font.bold: true
127 font.bold: true
126− color: "gray" // TODO remove once we're a separate app
128+ color: root.foregroundColor
127 }
129 }
128
130
129 Rectangle {
131 Rectangle {
@@ -134,7 +136,7 @@ Item {
134 leftMargin: units.gu(2)
136 leftMargin: units.gu(2)
135 rightMargin: units.gu(2)
137 rightMargin: units.gu(2)
136 }
138 }
137− color: "gray"
139+ color: root.foregroundColor
138 opacity: 0.2
140 opacity: 0.2
139 height: units.dp(1)
141 height: units.dp(1)
140 }
142 }
@@ -159,19 +161,19 @@ Item {
159 leftMargin: units.gu(2)
161 leftMargin: units.gu(2)
160 }
162 }
161 text: label
163 text: label
162− color: "gray" // TODO remove once we're a separate app
164+ color: root.foregroundColor
163 }
165 }
164
166
165− Image {
167+ Icon {
166 anchors {
168 anchors {
167 verticalCenter: parent.verticalCenter
169 verticalCenter: parent.verticalCenter
168 right: parent.right
170 right: parent.right
169 rightMargin: units.gu(2)
171 rightMargin: units.gu(2)
170 }
172 }
173+ height: units.gu(2)
174+ width: height
171− source: hasChildren ? "image://theme/chevron" : "graphics/tick.png"
175+ name: hasChildren ? "go-next" : "tick"
172− sourceSize.height: parent.height - units.gu(3)
176+ color: root.foregroundColor
173− sourceSize.width: units.gu(3)
174− fillMode: Image.PreserveAspectFit
175 visible: hasChildren || isActive
177 visible: hasChildren || isActive
176 }
178 }
177
179
@@ -183,7 +185,7 @@ Item {
183 leftMargin: units.gu(2)
185 leftMargin: units.gu(2)
184 rightMargin: units.gu(2)
186 rightMargin: units.gu(2)
185 }
187 }
186− color: "gray"
188+ color: root.foregroundColor
187 opacity: 0.1
189 opacity: 0.1
188 height: units.dp(1)
190 height: units.dp(1)
189 visible: index != department.count - 1
191 visible: index != department.count - 1
qml/Dash/DashRenderer.qml+5−4
@@ -36,10 +36,11 @@ Item {
36 // The model to renderer
36 // The model to renderer
37 property var model
37 property var model
38
38
39− /*!
40− \brief CardTool component.
39+ /// CardTool component.
41− */
42− property var cardTool: undefined
40+ property var cardTool: null
41+
42+ /// ScopeStyle component.
43+ property var scopeStyle: null
43
44
44 /// Emitted when the user clicked on an item
45 /// Emitted when the user clicked on an item
45 /// @param index is the index of the clicked item
46 /// @param index is the index of the clicked item
qml/Dash/GenericScopeView.qml+57−29
@@ -19,6 +19,7 @@ import Ubuntu.Components 0.1
19import Utils 0.1
19import Utils 0.1
20import Unity 0.2
20import Unity 0.2
21import Unity.Application 0.1
21import Unity.Application 0.1
22+import Dash 0.1
22import "../Components"
23import "../Components"
23import "../Components/ListItems" as ListItems
24import "../Components/ListItems" as ListItems
24
25
@@ -29,13 +30,16 @@ FocusScope {
29 property SortFilterProxyModel categories: categoryFilter
30 property SortFilterProxyModel categories: categoryFilter
30 property bool isCurrent: false
31 property bool isCurrent: false
31 property alias moving: categoryView.moving
32 property alias moving: categoryView.moving
32− property int tabBarHeight: 0
33+ property bool hasBackAction: false
33− property PageHeader pageHeader: null
34− property Item previewListView: null
35−
36 property bool enableHeightBehaviorOnNextCreation: false
34 property bool enableHeightBehaviorOnNextCreation: false
37 property var categoryView: categoryView
35 property var categoryView: categoryView
38
36
37+ property var scopeStyle: ScopeStyle {
38+ style: scope ? scope.customizations : {}
39+ }
40+
41+ signal backClicked()
42+
39 onScopeChanged: {
43 onScopeChanged: {
40 if (scope) {
44 if (scope) {
41 scope.activateApplication.connect(activateApp);
45 scope.activateApplication.connect(activateApp);
@@ -54,6 +58,10 @@ FocusScope {
54 categoryView.showHeader()
58 categoryView.showHeader()
55 }
59 }
56
60
61+ function closePreview() {
62+ previewListView.open = false;
63+ }
64+
57 Binding {
65 Binding {
58 target: scope
66 target: scope
59 property: "isActive"
67 property: "isActive"
@@ -88,33 +96,32 @@ FocusScope {
88 when: isCurrent
96 when: isCurrent
89 }
97 }
90
98
91− Connections {
92− target: panel
93− onSearchClicked: if (isCurrent) {
94− pageHeader.triggerSearch()
95− categoryView.showHeader()
96− }
97− }
98−
99 Connections {
99 Connections {
100 target: scopeView.scope
100 target: scopeView.scope
101 onShowDash: previewListView.open = false;
101 onShowDash: previewListView.open = false;
102 onHideDash: previewListView.open = false;
102 onHideDash: previewListView.open = false;
103 }
103 }
104
104
105+ Rectangle {
106+ anchors.fill: parent
107+ color: scopeView.scopeStyle ? scopeView.scopeStyle.background : "transparent"
108+ visible: color != "transparent"
109+ }
110+
105 ScopeListView {
111 ScopeListView {
106 id: categoryView
112 id: categoryView
107 objectName: "categoryListView"
113 objectName: "categoryListView"
108− anchors.fill: parent
114+
115+ x: previewListView.open ? -width : 0
116+ Behavior on x { UbuntuNumberAnimation { } }
117+ width: parent.width
118+ height: parent.height
119+
109 model: scopeView.categories
120 model: scopeView.categories
110 forceNoClip: previewListView.open
121 forceNoClip: previewListView.open
111
122
112 property string expandedCategoryId: ""
123 property string expandedCategoryId: ""
113
124
114− onContentYChanged: pageHeader.positionRealHeader();
115− onOriginYChanged: pageHeader.positionRealHeader();
116− onContentHeightChanged: pageHeader.positionRealHeader();
117−
118 delegate: ListItems.Base {
125 delegate: ListItems.Base {
119 id: baseItem
126 id: baseItem
120 objectName: "dashCategory" + category
127 objectName: "dashCategory" + category
@@ -168,6 +175,7 @@ FocusScope {
168 item.model = Qt.binding(function() { return results })
175 item.model = Qt.binding(function() { return results })
169 }
176 }
170 item.objectName = Qt.binding(function() { return categoryId })
177 item.objectName = Qt.binding(function() { return categoryId })
178+ item.scopeStyle = scopeView.scopeStyle;
171 if (item.expandable) {
179 if (item.expandable) {
172 var shouldFilter = categoryId != categoryView.expandedCategoryId;
180 var shouldFilter = categoryId != categoryView.expandedCategoryId;
173 item.setFilter(shouldFilter, false /*animate*/);
181 item.setFilter(shouldFilter, false /*animate*/);
@@ -307,6 +315,7 @@ FocusScope {
307 property var delegate: categoryView.item(delegateIndex)
315 property var delegate: categoryView.item(delegateIndex)
308 width: categoryView.width
316 width: categoryView.width
309 text: section
317 text: section
318+ textColor: scopeStyle ? scopeStyle.foreground : "grey"
310 image: {
319 image: {
311 if (delegate && delegate.expandable)
320 if (delegate && delegate.expandable)
312 return delegate.filtered ? "graphics/header_handlearrow.png" : "graphics/header_handlearrow2.png"
321 return delegate.filtered ? "graphics/header_handlearrow.png" : "graphics/header_handlearrow2.png"
@@ -319,20 +328,39 @@ FocusScope {
319 categoryView.expandedCategoryId = "";
328 categoryView.expandedCategoryId = "";
320 }
329 }
321 }
330 }
322− pageHeader: Item {
323− implicitHeight: scopeView.tabBarHeight
324− onHeightChanged: {
325− if (scopeView.pageHeader && scopeView.isCurrent) {
326− scopeView.pageHeader.height = height;
327− }
328− }
329− onYChanged: positionRealHeader();
330
331
331− function positionRealHeader() {
332+ pageHeader: PageHeader {
332− if (scopeView.pageHeader && scopeView.isCurrent) {
333+ id: pageHeader
333− scopeView.pageHeader.y = y + parent.y;
334+ objectName: "scopePageHeader"
334− }
335+ width: parent.width
336+ title: scopeView.scope ? scopeView.scope.name : ""
337+ showBackButton: scopeView.hasBackAction
338+ searchEntryEnabled: true
339+ searchInProgress: scopeView.scope ? scopeView.scope.searchInProgress : false
340+ scopeStyle: scopeView.scopeStyle
341+
342+ bottomItem: DashDepartments {
343+ scope: scopeView.scope
344+ width: parent.width <= units.gu(60) ? parent.width : units.gu(40)
345+ anchors.right: parent.right
346+ windowHeight: scopeView.height
347+ windowWidth: scopeView.width
348+ scopeStyle: scopeView.scopeStyle
335 }
349 }
350+
351+ onBackClicked: scopeView.backClicked()
336 }
352 }
337 }
353 }
354+
355+ PreviewListView {
356+ id: previewListView
357+ objectName: "previewListView"
358+ visible: x != width
359+ scope: scopeView.scope
360+ scopeStyle: scopeView.scopeStyle
361+ width: parent.width
362+ height: parent.height
363+ anchors.left: categoryView.right
364+ }
365+
338}
366}
qml/Dash/PreviewListView.qml+8−22
@@ -24,7 +24,7 @@ Item {
24 id: root
24 id: root
25
25
26 property var scope: null
26 property var scope: null
27− property var pageHeader: null
27+ property var scopeStyle: null
28
28
29 property alias open: previewListView.open
29 property alias open: previewListView.open
30 property alias model: previewListView.model
30 property alias model: previewListView.model
@@ -34,34 +34,19 @@ Item {
34
34
35 PageHeader {
35 PageHeader {
36 id: header
36 id: header
37− objectName: root.objectName + "_pageHeader"
37+ objectName: "pageHeader"
38 width: parent.width
38 width: parent.width
39− searchEntryEnabled: false
39+ title: scope ? scope.name : ""
40− scope: root.scope
41− height: units.gu(8.5)
42 showBackButton: true
40 showBackButton: true
43− onBackClicked: root.open = false
41+ searchEntryEnabled: false
42+ scopeStyle: root.scopeStyle
44
43
45− childItem: Label {
44+ onBackClicked: root.open = false
46− id: label
47− anchors {
48− left: parent.left
49− right: parent.right
50− verticalCenter: parent.verticalCenter
51− }
52− text: scope ? scope.name : ""
53− // TODO Saviq: These should come from updated Ubuntu Palette.
54− color: "#888888"
55− font.family: "Ubuntu"
56− font.weight: Font.Light
57− fontSize: "x-large"
58− elide: Text.ElideRight
59− }
60 }
45 }
61
46
62 ListView {
47 ListView {
63 id: previewListView
48 id: previewListView
64− objectName: root.objectName + "_listView"
49+ objectName: "listView"
65 anchors {
50 anchors {
66 top: header.bottom
51 top: header.bottom
67 bottom: parent.bottom
52 bottom: parent.bottom
@@ -118,6 +103,7 @@ Item {
118 var previewStack = root.scope.preview(result);
103 var previewStack = root.scope.preview(result);
119 return previewStack.getPreviewModel(0);
104 return previewStack.getPreviewModel(0);
120 }
105 }
106+ scopeStyle: root.scopeStyle
121 }
107 }
122
108
123 MouseArea {
109 MouseArea {
qml/Dash/Previews/Preview.qml+4
@@ -36,6 +36,9 @@ Item {
36 //! \brief Should be set to true if this preview is currently displayed.
36 //! \brief Should be set to true if this preview is currently displayed.
37 property bool isCurrent: false
37 property bool isCurrent: false
38
38
39+ //! \brief The ScopeStyle component.
40+ property var scopeStyle: null
41+
39 clip: true
42 clip: true
40
43
41 Binding {
44 Binding {
@@ -77,6 +80,7 @@ Item {
77 widgetType: model.type
80 widgetType: model.type
78 widgetData: model.properties
81 widgetData: model.properties
79 isCurrentPreview: root.isCurrent
82 isCurrentPreview: root.isCurrent
83+ scopeStyle: root.scopeStyle
80 anchors {
84 anchors {
81 left: parent.left
85 left: parent.left
82 right: parent.right
86 right: parent.right
qml/Dash/Previews/PreviewAudioPlayback.qml+3−3
@@ -139,7 +139,7 @@ PreviewWidget {
139 objectName: "trackTitleLabel"
139 objectName: "trackTitleLabel"
140 anchors { top: parent.top; left: parent.left; right: parent.right }
140 anchors { top: parent.top; left: parent.left; right: parent.right }
141 opacity: 0.9
141 opacity: 0.9
142− color: "grey"//Theme.palette.selected.backgroundText // TODO karni: Use updated Palette.
142+ color: scopeStyle ? scopeStyle.foreground : "grey"
143 fontSize: "small"
143 fontSize: "small"
144 horizontalAlignment: Text.AlignLeft
144 horizontalAlignment: Text.AlignLeft
145 text: modelData["title"]
145 text: modelData["title"]
@@ -152,7 +152,7 @@ PreviewWidget {
152 anchors { top: trackTitleLabel.bottom; left: parent.left; right: parent.right }
152 anchors { top: trackTitleLabel.bottom; left: parent.left; right: parent.right }
153 visible: text !== ""
153 visible: text !== ""
154 opacity: 0.9
154 opacity: 0.9
155− color: "grey"//Theme.palette.selected.backgroundText // TODO karni: Use updated Palette.
155+ color: scopeStyle ? scopeStyle.foreground : "grey"
156 font.weight: Font.Light
156 font.weight: Font.Light
157 fontSize: "small"
157 fontSize: "small"
158 horizontalAlignment: Text.AlignLeft
158 horizontalAlignment: Text.AlignLeft
@@ -193,7 +193,7 @@ PreviewWidget {
193 anchors.verticalCenter: parent.verticalCenter
193 anchors.verticalCenter: parent.verticalCenter
194 width: parent.column3Width
194 width: parent.column3Width
195 opacity: 0.9
195 opacity: 0.9
196− color: "grey"//Theme.palette.selected.backgroundText // TODO karni: Use updated Palette.
196+ color: scopeStyle ? scopeStyle.foreground : "grey"
197 fontSize: "small"
197 fontSize: "small"
198 horizontalAlignment: Text.AlignRight
198 horizontalAlignment: Text.AlignRight
199 text: audio.lengthToString(modelData["length"])
199 text: audio.lengthToString(modelData["length"])
qml/Dash/Previews/PreviewHeader.qml+1−1
@@ -35,7 +35,7 @@ PreviewWidget {
35 readonly property url mascot: root.widgetData["mascot"] || ""
35 readonly property url mascot: root.widgetData["mascot"] || ""
36 readonly property string title: root.widgetData["title"] || ""
36 readonly property string title: root.widgetData["title"] || ""
37 readonly property string subtitle: root.widgetData["subtitle"] || ""
37 readonly property string subtitle: root.widgetData["subtitle"] || ""
38− readonly property color fontColor: "grey"
38+ readonly property color fontColor: root.scopeStyle ? root.scopeStyle.foreground : "grey"
39
39
40 implicitHeight: row.height + row.margins * 2
40 implicitHeight: row.height + row.margins * 2
41 width: parent.width
41 width: parent.width
qml/Dash/Previews/PreviewPayments.qmlnew file+56
@@ -0,0 +1,56 @@
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.1
18+import Ubuntu.Components 0.1
19+import Ubuntu.Payments 0.1
20+
21+/*! \brief Preview widget for a purchase button.
22+ *
23+ * When clicked, this button starts the payments service.
24+ * Then it waits until the purchase finishes or fails.
25+ * Those events trigger the corresponding actions.
26+ */
27+
28+PreviewWidget {
29+ id: root
30+
31+ implicitHeight: paymentButton.implicitHeight
32+ implicitWidth: paymentButton.implicitWidth
33+
34+ Button {
35+ id: paymentButton
36+ objectName: "paymentButton"
37+
38+ color: Theme.palette.selected.foreground
39+ text: paymentClient.formattedPrice
40+ onClicked: paymentClient.start()
41+ anchors.right: parent.right
42+ width: (root.width - units.gu(1)) / 2
43+
44+ Payments {
45+ id: paymentClient
46+
47+ property var source: widgetData["source"]
48+
49+ price: source["price"]
50+ currency: source["currency"]
51+ storeItemId: source["store_item_id"]
52+ onPurchaseCompleted: root.triggered(widgetId, "purchaseCompleted", source)
53+ onPurchaseError: root.triggered(widgetId, "purchaseError", source)
54+ }
55+ }
56+}
qml/Dash/Previews/PreviewRatingDisplay.qml+3−4
@@ -61,6 +61,7 @@ PreviewWidget {
61 size: 5
61 size: 5
62 value: modelData["rating"] || -1
62 value: modelData["rating"] || -1
63 visible: value >= 0
63 visible: value >= 0
64+ interactive: false
64
65
65 property var urlIconEmpty: widgetData["rating-icon-empty"]
66 property var urlIconEmpty: widgetData["rating-icon-empty"]
66 property var urlIconFull: widgetData["rating-icon-full"]
67 property var urlIconFull: widgetData["rating-icon-full"]
@@ -71,8 +72,7 @@ PreviewWidget {
71 id: authorLabel
72 id: authorLabel
72 objectName: "authorLabel"
73 objectName: "authorLabel"
73 anchors { left: parent.left; right: parent.right }
74 anchors { left: parent.left; right: parent.right }
74− // TODO cimi: Yet another fix requiring Palette update.
75+ color: scopeStyle ? scopeStyle.foreground : "grey"
75− color: "grey" //Theme.palette.selected.backgroundText
76 opacity: .8
76 opacity: .8
77 text: modelData["author"] || ""
77 text: modelData["author"] || ""
78 visible: text !== ""
78 visible: text !== ""
@@ -83,8 +83,7 @@ PreviewWidget {
83 id: reviewLabel
83 id: reviewLabel
84 objectName: "reviewLabel"
84 objectName: "reviewLabel"
85 anchors { left: parent.left; right: parent.right }
85 anchors { left: parent.left; right: parent.right }
86− // TODO cimi: Yet another fix requiring Palette update.
86+ color: scopeStyle ? scopeStyle.foreground : "grey"
87− color: "grey" //Theme.palette.selected.backgroundText
88 opacity: .8
87 opacity: .8
89 text: modelData["review"] || ""
88 text: modelData["review"] || ""
90 visible: text !== ""
89 visible: text !== ""
qml/Dash/Previews/PreviewRatingInput.qml+2−4
@@ -76,8 +76,7 @@ PreviewWidget {
76 verticalCenter: parent.verticalCenter
76 verticalCenter: parent.verticalCenter
77 left: parent.left
77 left: parent.left
78 }
78 }
79− // TODO cimi: Yet another fix requiring Palette update.
79+ color: root.scopeStyle ? root.scopeStyle.foreground : "grey"
80− color: "grey" //Theme.palette.selected.backgroundText
81 opacity: .8
80 opacity: .8
82 text: widgetData["rating-label"] || i18n.tr("Rate this")
81 text: widgetData["rating-label"] || i18n.tr("Rate this")
83 }
82 }
@@ -122,8 +121,7 @@ PreviewWidget {
122 left: parent.left
121 left: parent.left
123 right: parent.right
122 right: parent.right
124 }
123 }
125− // TODO cimi: Yet another fix requiring Palette update.
124+ color: root.scopeStyle ? root.scopeStyle.foreground : "grey"
126− color: "grey" //Theme.palette.selected.backgroundText
127 opacity: .8
125 opacity: .8
128 text: widgetData["review-label"] || i18n.tr("Add a review")
126 text: widgetData["review-label"] || i18n.tr("Add a review")
129 }
127 }
qml/Dash/Previews/PreviewTextSummary.qml+2−4
@@ -39,8 +39,7 @@ PreviewWidget {
39 }
39 }
40 height: visible ? implicitHeight : 0
40 height: visible ? implicitHeight : 0
41 fontSize: "large"
41 fontSize: "large"
42− // TODO karni: Yet another fix requiring Palette update.
42+ color: root.scopeStyle ? root.scopeStyle.foreground : "grey"
43− color: "grey" //Theme.palette.selected.backgroundText
44 visible: text !== ""
43 visible: text !== ""
45 opacity: .8
44 opacity: .8
46 text: widgetData["title"] || ""
45 text: widgetData["title"] || ""
@@ -62,8 +61,7 @@ PreviewWidget {
62 clip: true
61 clip: true
63 fontSize: "small"
62 fontSize: "small"
64 lineHeight: 1.2
63 lineHeight: 1.2
65− // TODO karni: Yet another fix requiring Palette update.
64+ color: root.scopeStyle ? root.scopeStyle.foreground : "grey"
66− color: "grey" //Theme.palette.selected.backgroundText
67 opacity: .8
65 opacity: .8
68 text: widgetData["text"]
66 text: widgetData["text"]
69 wrapMode: Text.Wrap
67 wrapMode: Text.Wrap
qml/Dash/Previews/PreviewWidget.qml+3
@@ -28,6 +28,9 @@ Item {
28 //! Variable used to contain widget's data
28 //! Variable used to contain widget's data
29 property var widgetData
29 property var widgetData
30
30
31+ //! The ScopeStyle component.
32+ property var scopeStyle: null
33+
31 /*! \brief This signal should be emitted when a preview action was triggered.
34 /*! \brief This signal should be emitted when a preview action was triggered.
32 *
35 *
33 * \param widgetId, actionId Respective identifiers from widgetData.
36 * \param widgetId, actionId Respective identifiers from widgetData.
qml/Dash/Previews/PreviewWidgetFactory.qml+5
@@ -31,6 +31,9 @@ Loader {
31 //! Widget data, forwarded to the widget as is.
31 //! Widget data, forwarded to the widget as is.
32 property var widgetData: null
32 property var widgetData: null
33
33
34+ //! The ScopeStyle component.
35+ property var scopeStyle: null
36+
34 //! Set to true if the parent preview is displayed.
37 //! Set to true if the parent preview is displayed.
35 property bool isCurrentPreview: false
38 property bool isCurrentPreview: false
36
39
@@ -48,6 +51,7 @@ Loader {
48 case "header": return "PreviewHeader.qml";
51 case "header": return "PreviewHeader.qml";
49 case "image": return "PreviewZoomableImage.qml";
52 case "image": return "PreviewZoomableImage.qml";
50 case "progress": return "PreviewProgress.qml";
53 case "progress": return "PreviewProgress.qml";
54+ case "payments": return "PreviewPayments.qml";
51 case "rating-input": return "PreviewRatingInput.qml";
55 case "rating-input": return "PreviewRatingInput.qml";
52 case "reviews": return "PreviewRatingDisplay.qml";
56 case "reviews": return "PreviewRatingDisplay.qml";
53 case "text": return "PreviewTextSummary.qml";
57 case "text": return "PreviewTextSummary.qml";
@@ -61,6 +65,7 @@ Loader {
61 item.widgetId = Qt.binding(function() { return root.widgetId } )
65 item.widgetId = Qt.binding(function() { return root.widgetId } )
62 item.widgetData = Qt.binding(function() { return root.widgetData } )
66 item.widgetData = Qt.binding(function() { return root.widgetData } )
63 item.isCurrentPreview = Qt.binding(function() { return root.isCurrentPreview } )
67 item.isCurrentPreview = Qt.binding(function() { return root.isCurrentPreview } )
68+ if (item.hasOwnProperty("scopeStyle")) item.scopeStyle = root.scopeStyle;
64 }
69 }
65
70
66 Connections {
71 Connections {
qml/Dash/ScopeItem.qmldeleted−106
@@ -1,106 +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 Unity 0.2
20−import "../Components"
21−
22−Item {
23− id: root
24−
25− property alias scope: scopeView.scope
26− property alias previewOpen: previewListView.open
27−
28− property ListModel searchHistory
29−
30− signal back
31− signal gotoScope(string scopeId)
32− signal openScope(var scope)
33−
34− // TODO see how much code we can share
35− // between here and other Dash parts, it's starting to have
36− // too much duplicated code with the DashDepartments, etc
37−
38− Item {
39− id: scopeViewHolder
40−
41− x: previewListView.open ? -width : 0
42− Behavior on x { UbuntuNumberAnimation { } }
43− width: parent.width
44− height: parent.height
45−
46− GenericScopeView {
47− id: scopeView
48− width: parent.width
49− height: parent.height
50− isCurrent: scope != null
51− tabBarHeight: scopeItemPageHeader.implicitHeight
52− pageHeader: scopeItemPageHeader
53− previewListView: previewListView
54−
55− Connections {
56− target: scopeView.isCurrent ? scope : null
57− onGotoScope: root.gotoScope(scopeId);
58− onOpenScope: root.openScope(scope);
59− }
60− }
61−
62− PageHeader {
63− id: scopeItemPageHeader
64− width: parent.width
65− searchEntryEnabled: true
66− searchHistory: root.searchHistory
67− scope: root.scope
68− height: units.gu(8.5)
69− showBackButton: true
70− onBackClicked: root.back();
71−
72− childItem: Label {
73− id: label
74− anchors {
75− left: parent.left
76− right: parent.right
77− verticalCenter: parent.verticalCenter
78− }
79− text: scope ? scope.name : ""
80− color: "#888888"
81− font.family: "Ubuntu"
82− font.weight: Font.Light
83− fontSize: "x-large"
84− elide: Text.ElideRight
85− }
86−
87− bottomItem: DashDepartments {
88− scope: root.scope
89− width: parent.width <= units.gu(60) ? parent.width : units.gu(40)
90− anchors.right: parent.right
91− windowHeight: root.height
92− windowWidth: root.width
93− }
94− }
95− }
96−
97− PreviewListView {
98− id: previewListView
99− visible: x != width
100− pageHeader: scopeItemPageHeader
101− scope: root.scope
102− width: parent.width
103− height: parent.height
104− anchors.left: scopeViewHolder.right
105− }
106−}
qml/Dash/graphics/icon_listview_clear@20.pngdeleted

Binary file not shown.

qml/Dash/graphics/tick@30.pngdeleted

Binary file not shown.

qml/Hud/HudParametrizedActionsPage.qml+2−2
@@ -19,7 +19,7 @@ import Ubuntu.Components 0.1
19import "../Components"
19import "../Components"
20
20
21Item {
21Item {
22− property alias header: header.text
22+ property alias header: header.title
23 signal backPressed
23 signal backPressed
24 signal confirmPressed
24 signal confirmPressed
25 signal valuesUpdated
25 signal valuesUpdated
@@ -89,7 +89,7 @@ Item {
89 anchors.left: parent.left
89 anchors.left: parent.left
90 anchors.right: parent.right
90 anchors.right: parent.right
91
91
92− PageHeaderLabel {
92+ PageHeader {
93 id: header
93 id: header
94 anchors.top: parent.top
94 anchors.top: parent.top
95 anchors.left: parent.left
95 anchors.left: parent.left
qml/Launcher/Launcher.qml+33−3
@@ -55,6 +55,10 @@ Item {
55 switchToNextState("")
55 switchToNextState("")
56 }
56 }
57
57
58+ function fadeOut() {
59+ fadeOutAnimation.start();
60+ }
61+
58 function switchToNextState(state) {
62 function switchToNextState(state) {
59 animateTimer.nextState = state
63 animateTimer.nextState = state
60 animateTimer.start();
64 animateTimer.start();
@@ -99,6 +103,31 @@ Item {
99 }
103 }
100 }
104 }
101
105
106+ SequentialAnimation {
107+ id: fadeOutAnimation
108+ ScriptAction {
109+ script: {
110+ panel.layer.enabled = true
111+ }
112+ }
113+ UbuntuNumberAnimation {
114+ target: panel
115+ property: "opacity"
116+ easing.type: Easing.InQuad
117+ to: 0
118+ }
119+ ScriptAction {
120+ script: {
121+ panel.layer.enabled = false
122+ panel.animate = false;
123+ root.state = "";
124+ panel.x = -panel.width
125+ panel.opacity = 1;
126+ panel.animate = true;
127+ }
128+ }
129+ }
130+
102 MouseArea {
131 MouseArea {
103 id: launcherDragArea
132 id: launcherDragArea
104 enabled: root.state == "visible"
133 enabled: root.state == "visible"
@@ -173,9 +202,9 @@ Item {
173 }
202 }
174
203
175 Behavior on x {
204 Behavior on x {
205+ enabled: !dragArea.dragging && !launcherDragArea.drag.active && panel.animate;
176 NumberAnimation {
206 NumberAnimation {
177− // Disabling animation when dragging
207+ duration: 300
178− duration: dragArea.dragging || launcherDragArea.drag.active ? 0 : 300;
179 easing.type: Easing.OutCubic
208 easing.type: Easing.OutCubic
180 }
209 }
181 }
210 }
@@ -215,9 +244,10 @@ Item {
215 onDraggingChanged: {
244 onDraggingChanged: {
216 if (!dragging) {
245 if (!dragging) {
217 if (distance > panel.width / 2) {
246 if (distance > panel.width / 2) {
218− root.switchToNextState("visible")
219 if (distance > minimizeDistance) {
247 if (distance > minimizeDistance) {
220 root.dash()
248 root.dash()
249+ } else {
250+ root.switchToNextState("visible")
221 }
251 }
222 } else {
252 } else {
223 root.switchToNextState("")
253 root.switchToNextState("")
qml/Launcher/LauncherDelegate.qml+36−13
@@ -23,10 +23,10 @@ Item {
23 property string iconName
23 property string iconName
24 property int count: -1
24 property int count: -1
25 property int progress: -1
25 property int progress: -1
26− property bool highlighted: false
27 property bool itemFocused: false
26 property bool itemFocused: false
28 property real maxAngle: 0
27 property real maxAngle: 0
29 property bool inverted: false
28 property bool inverted: false
29+ property bool clipCorner: false
30
30
31 readonly property int effectiveHeight: Math.cos(angle * Math.PI / 180) * itemHeight
31 readonly property int effectiveHeight: Math.cos(angle * Math.PI / 180) * itemHeight
32 readonly property real foldedHeight: Math.cos(maxAngle * Math.PI / 180) * itemHeight
32 readonly property real foldedHeight: Math.cos(maxAngle * Math.PI / 180) * itemHeight
@@ -40,12 +40,6 @@ Item {
40 property real itemOpacity: 1
40 property real itemOpacity: 1
41 property real brightness: 0
41 property real brightness: 0
42
42
43− onIconNameChanged: shaderEffectSource.scheduleUpdate();
44− onCountChanged: shaderEffectSource.scheduleUpdate();
45− onProgressChanged: shaderEffectSource.scheduleUpdate();
46− onHighlightedChanged: shaderEffectSource.scheduleUpdate();
47− onItemFocusedChanged: shaderEffectSource.scheduleUpdate();
48−
49 Item {
43 Item {
50 id: iconItem
44 id: iconItem
51 width: parent.itemWidth + units.gu(1)
45 width: parent.itemWidth + units.gu(1)
@@ -63,17 +57,17 @@ Item {
63 id: iconImage
57 id: iconImage
64 sourceSize.width: iconShape.width
58 sourceSize.width: iconShape.width
65 sourceSize.height: iconShape.height
59 sourceSize.height: iconShape.height
60+ fillMode: Image.PreserveAspectCrop
66 source: root.iconName
61 source: root.iconName
67 }
62 }
68 }
63 }
69
64
70 BorderImage {
65 BorderImage {
71− id: overlayHighlight
66+ id: itemGlow
72 anchors.centerIn: iconItem
67 anchors.centerIn: iconItem
73− rotation: inverted ? 180 : 0
68+ source: "graphics/icon-top-highlight.png"
74− source: root.highlighted ? "graphics/selected.sci" : "graphics/non-selected.sci"
75− width: root.itemWidth + units.gu(0.5)
69+ width: root.itemWidth - units.gu(1)
76− height: root.itemHeight + units.gu(0.5)
70+ height: root.itemHeight - units.gu(1)
77 }
71 }
78
72
79 BorderImage {
73 BorderImage {
@@ -150,6 +144,24 @@ Item {
150 }
144 }
151 }
145 }
152
146
147+ Item {
148+ id: clipper
149+ anchors.centerIn: parent
150+ width: iconItem.width
151+ height: iconItem.height
152+ Rectangle {
153+ anchors {
154+ fill: parent
155+ topMargin: -units.gu(2)
156+ leftMargin: -units.gu(2)
157+ rightMargin: -units.gu(2)
158+ bottomMargin: units.gu(1.2)
159+ }
160+ color: "red"
161+ rotation: root.rotation + 45
162+ }
163+ }
164+
153 ShaderEffect {
165 ShaderEffect {
154 id: transformEffect
166 id: transformEffect
155 anchors.centerIn: parent
167 anchors.centerIn: parent
@@ -159,13 +171,18 @@ Item {
159 property real itemOpacity: root.itemOpacity
171 property real itemOpacity: root.itemOpacity
160 property real brightness: Math.max(-1, root.brightness)
172 property real brightness: Math.max(-1, root.brightness)
161 property real angle: root.angle
173 property real angle: root.angle
174+ property bool clipCorner: root.clipCorner
162 rotation: root.inverted ? 180 : 0
175 rotation: root.inverted ? 180 : 0
163
176
164 property variant source: ShaderEffectSource {
177 property variant source: ShaderEffectSource {
165 id: shaderEffectSource
178 id: shaderEffectSource
166 sourceItem: iconItem
179 sourceItem: iconItem
167 hideSource: true
180 hideSource: true
168− live: false
181+ }
182+
183+ property var mask: ShaderEffectSource {
184+ sourceItem: clipper
185+ hideSource: true
169 }
186 }
170
187
171 transform: [
188 transform: [
@@ -202,13 +219,19 @@ Item {
202 fragmentShader: "
219 fragmentShader: "
203 varying highp vec2 qt_TexCoord0;
220 varying highp vec2 qt_TexCoord0;
204 uniform sampler2D source;
221 uniform sampler2D source;
222+ uniform sampler2D mask;
205 uniform lowp float brightness;
223 uniform lowp float brightness;
206 uniform lowp float itemOpacity;
224 uniform lowp float itemOpacity;
225+ uniform bool clipCorner;
207 void main(void)
226 void main(void)
208 {
227 {
209 highp vec4 sourceColor = texture2D(source, qt_TexCoord0);
228 highp vec4 sourceColor = texture2D(source, qt_TexCoord0);
229+ highp vec4 maskColor = texture2D(mask, qt_TexCoord0);
210 sourceColor.rgb = mix(sourceColor.rgb, vec3(step(0.0, brightness)), abs(brightness));
230 sourceColor.rgb = mix(sourceColor.rgb, vec3(step(0.0, brightness)), abs(brightness));
211 sourceColor *= itemOpacity;
231 sourceColor *= itemOpacity;
232+ if (clipCorner) {
233+ sourceColor *= maskColor.a;
234+ }
212 gl_FragColor = sourceColor;
235 gl_FragColor = sourceColor;
213 }"
236 }"
214 }
237 }
qml/Launcher/LauncherPanel.qml+19−16
@@ -22,8 +22,9 @@ import Ubuntu.Components.Popups 0.1
22import "../Components/ListItems"
22import "../Components/ListItems"
23import "../Components/"
23import "../Components/"
24
24
25−Item {
25+Rectangle {
26 id: root
26 id: root
27+ color: "#B2000000"
27
28
28 rotation: inverted ? 180 : 0
29 rotation: inverted ? 180 : 0
29
30
@@ -37,27 +38,18 @@ Item {
37 signal applicationSelected(string appId)
38 signal applicationSelected(string appId)
38 signal showDashHome()
39 signal showDashHome()
39
40
40− BorderImage {
41− id: background
42− source: "graphics/launcher_bg.sci"
43− anchors.fill: parent
44− anchors.rightMargin: root.inverted ? 0 : -units.gu(1)
45− anchors.leftMargin: root.inverted ? -units.gu(1) : 0
46− rotation: root.rotation
47− }
48−
49 Column {
41 Column {
50 id: mainColumn
42 id: mainColumn
51 anchors {
43 anchors {
52 fill: parent
44 fill: parent
53 }
45 }
54
46
55− MouseArea {
47+ Rectangle {
56− id: dashItem
57 width: parent.width
48 width: parent.width
58 height: units.gu(7)
49 height: units.gu(7)
59− onClicked: root.showDashHome()
50+ color: UbuntuColors.orange
60 z: 1
51 z: 1
52+
61 Image {
53 Image {
62 objectName: "dashItem"
54 objectName: "dashItem"
63 width: units.gu(5)
55 width: units.gu(5)
@@ -66,7 +58,13 @@ Item {
66 source: "graphics/home.png"
58 source: "graphics/home.png"
67 rotation: root.rotation
59 rotation: root.rotation
68 }
60 }
61+ MouseArea {
62+ id: dashItem
63+ anchors.fill: parent
64+ onClicked: root.showDashHome()
65+ }
69 }
66 }
67+
70 ThinDivider {
68 ThinDivider {
71 anchors {
69 anchors {
72 left: parent.left
70 left: parent.left
@@ -104,7 +102,6 @@ Item {
104 highlightRangeMode: ListView.ApplyRange
102 highlightRangeMode: ListView.ApplyRange
105 preferredHighlightBegin: (height - itemHeight) / 2
103 preferredHighlightBegin: (height - itemHeight) / 2
106 preferredHighlightEnd: (height + itemHeight) / 2
104 preferredHighlightEnd: (height + itemHeight) / 2
107− spacing: units.gu(0.5)
108
105
109 // The size of the area the ListView is extended to make sure items are not
106 // The size of the area the ListView is extended to make sure items are not
110 // destroyed when dragging them outside the list. This needs to be at least
107 // destroyed when dragging them outside the list. This needs to be at least
@@ -156,6 +153,7 @@ Item {
156 iconName: model.icon
153 iconName: model.icon
157 count: model.count
154 count: model.count
158 progress: model.progress
155 progress: model.progress
156+ clipCorner: model.pinned
159 itemFocused: model.focused
157 itemFocused: model.focused
160 inverted: root.inverted
158 inverted: root.inverted
161 z: -Math.abs(offset)
159 z: -Math.abs(offset)
@@ -168,6 +166,7 @@ Item {
168 anchors.centerIn: parent
166 anchors.centerIn: parent
169 width: parent.width + mainColumn.anchors.leftMargin + mainColumn.anchors.rightMargin
167 width: parent.width + mainColumn.anchors.leftMargin + mainColumn.anchors.rightMargin
170 opacity: 0
168 opacity: 0
169+ source: "graphics/divider-line.png"
171 }
170 }
172
171
173 states: [
172 states: [
@@ -247,7 +246,7 @@ Item {
247 Transition {
246 Transition {
248 from: "dragging"
247 from: "dragging"
249 to: "*"
248 to: "*"
250− NumberAnimation { target: dropIndicator; properties: "opacity"; duration: UbuntuAnimation.FastDuration }
249+ NumberAnimation { target: dropIndicator; properties: "opacity"; duration: UbuntuAnimation.SnapDuration }
251 NumberAnimation { properties: "itemOpacity"; duration: UbuntuAnimation.BriskDuration }
250 NumberAnimation { properties: "itemOpacity"; duration: UbuntuAnimation.BriskDuration }
252 SequentialAnimation {
251 SequentialAnimation {
253 ScriptAction { script: if (index == launcherListView.count-1) launcherListView.flick(0, -launcherListView.clickFlickSpeed); }
252 ScriptAction { script: if (index == launcherListView.count-1) launcherListView.flick(0, -launcherListView.clickFlickSpeed); }
@@ -465,6 +464,10 @@ Item {
465 width: itemWidth
464 width: itemWidth
466 rotation: root.rotation
465 rotation: root.rotation
467 itemOpacity: 0.9
466 itemOpacity: 0.9
467+ clipCorner: dndArea.draggedIndex > -1 &&
468+ LauncherModel.get(dndArea.draggedIndex).pinned &&
469+ !dndArea.preDragging &&
470+ !dndArea.dragging
468
471
469 function flatten() {
472 function flatten() {
470 fakeDragItemAnimation.start();
473 fakeDragItemAnimation.start();
@@ -523,11 +526,11 @@ Item {
523 color: "#221e1c"
526 color: "#221e1c"
524 width: units.gu(30)
527 width: units.gu(30)
525 height: quickListColumn.height
528 height: quickListColumn.height
529+ visible: quickListShape.visible
526 anchors {
530 anchors {
527 left: root.inverted ? undefined : parent.right
531 left: root.inverted ? undefined : parent.right
528 right: root.inverted ? parent.left : undefined
532 right: root.inverted ? parent.left : undefined
529 margins: units.gu(1)
533 margins: units.gu(1)
530−
531 }
534 }
532 y: itemCenter - (height / 2) + offset
535 y: itemCenter - (height / 2) + offset
533 rotation: root.rotation
536 rotation: root.rotation
qml/Launcher/graphics/divider-line.pngnew file

Binary file not shown.

qml/Launcher/graphics/highlight@18.pngdeleted

Binary file not shown.

qml/Launcher/graphics/home@18.png

Binary file not shown.

qml/Launcher/graphics/icon-top-highlight.pngnew file

Binary file not shown.

qml/Launcher/graphics/launcher_bg@30.pngdeleted

Binary file not shown.

qml/Launcher/graphics/launcher_bg@30.scideleted−5
@@ -1,5 +0,0 @@
1−border.left: 4
2−border.top: 4
3−border.bottom: 4
4−border.right: 66
5−source: launcher_bg@30.png
qml/Launcher/graphics/non-selected@18.pngdeleted

Binary file not shown.

qml/Launcher/graphics/non-selected@18.scideleted−5
@@ -1,5 +0,0 @@
1−border.left: 54
2−border.top: 60
3−border.bottom: 60
4−border.right: 54
5−source: non-selected@18.png
qml/Launcher/graphics/selected@18.pngdeleted

Binary file not shown.

qml/Launcher/graphics/selected@18.scideleted−5
@@ -1,5 +0,0 @@
1−border.left: 54
2−border.top: 60
3−border.bottom: 60
4−border.right: 54
5−source: selected@18.png
qml/Launcher/graphics/triangle@18.pngdeleted

Binary file not shown.

qml/Panel/ActiveCallHint.qmlnew file+206
@@ -0,0 +1,206 @@
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.Telephony 0.1 as Telephony
19+import Ubuntu.Components 0.1
20+import Unity.Application 0.1
21+import "../Components"
22+
23+Item {
24+ id: callHint
25+
26+ readonly property bool active: {
27+ var application = ApplicationManager.findApplication("dialer-app");
28+
29+ if (callManager.callIndicatorVisible) {
30+ // at the moment, callIndicatorVisible is only "valid" if dialer is in focus.
31+ if (application && ApplicationManager.focusedApplicationId === "dialer-app") {
32+ // Don't show if application is still starting; might get a fleeting true/false.
33+ return application.state !== ApplicationInfoInterface.Starting;
34+ }
35+ }
36+ if (ApplicationManager.focusedApplicationId !== "dialer-app") {
37+ if (application) {
38+ // Don't show if application is still starting; might get a fleeting true/false.
39+ return application.state !== ApplicationInfoInterface.Starting && callManager.hasCalls;
40+ }
41+ return callManager.hasCalls;
42+ }
43+ return false;
44+ }
45+ readonly property QtObject contactWatcher: _contactWatcher
46+ property int labelSwitchInterval: 6000
47+ implicitWidth: row.x + row.width
48+
49+ Component.onCompleted: {
50+ telepathyHelper.registerChannelObserver("unity8");
51+ }
52+
53+ function showLiveCall() {
54+ Qt.openUrlExternally("dialer:///?view=liveCall");
55+ }
56+
57+ Component {
58+ id: contactColumn
59+
60+ Column {
61+ id: column
62+ objectName: "contactColumn"
63+
64+ anchors.left: parent.left
65+
66+ Component.onCompleted: {
67+ if (index === 0) {
68+ labelPathView.column1 = column;
69+ } else {
70+ labelPathView.column2 = column;
71+ }
72+ }
73+
74+ Label {
75+ height: callHint.height
76+ verticalAlignment: Text.AlignVCenter
77+ text: i18n.tr("Tap to return to call...");
78+ }
79+
80+ Label {
81+ objectName: "contactLabel"
82+ height: callHint.height
83+ verticalAlignment: Text.AlignVCenter
84+ width: Math.max(contentWidth, 1)
85+
86+ text: {
87+ if (!d.activeCall) {
88+ return "";
89+ } else if (d.activeCall.isConference) {
90+ return i18n.tr("Conference");
91+ } else {
92+ return contactWatcher.alias !== "" ? contactWatcher.alias : contactWatcher.phoneNumber;
93+ }
94+ }
95+ }
96+ }
97+ }
98+
99+ Row {
100+ id: row
101+ anchors {
102+ top: parent.top
103+ bottom: parent.bottom
104+ left: parent.left
105+ leftMargin: units.gu(1)
106+ }
107+ spacing: units.gu(1)
108+
109+ Label {
110+ id: time
111+ objectName: "timeLabel"
112+
113+ anchors {
114+ top: parent.top
115+ bottom: parent.bottom
116+ }
117+ verticalAlignment: Text.AlignVCenter
118+ horizontalAlignment: Text.AlignRight
119+ text: {
120+ var m = Math.round(d.callTime/60);
121+ var ss = d.callTime % 60;
122+ if (ss >= 10) {
123+ return m + ":" + ss;
124+ } else {
125+ return m + ":0" + ss;
126+ }
127+ }
128+ }
129+
130+ PathView {
131+ id: labelPathView
132+ objectName: "labelPathView"
133+
134+ anchors {
135+ top: parent.top
136+ bottom: parent.bottom
137+ }
138+ width: column1 && column2 ? Math.max(column1.width, column1.width) : 0
139+ clip: true
140+
141+ property Column column1
142+ property Column column2
143+ property int columnHeight: column1 ? column1.height : 0
144+
145+ delegate: contactColumn
146+ model: 2
147+ offset: 0
148+ interactive: false
149+
150+ path: Path {
151+ startY: -labelPathView.columnHeight / 2
152+ PathLine {
153+ y: labelPathView.columnHeight * 1.5
154+ }
155+ }
156+
157+ Behavior on offset {
158+ id: offsetBehaviour
159+ SmoothedAnimation {
160+ id: offsetAnimation
161+ // ensure we go faster than the label switch
162+ duration: labelSwitchInterval/8
163+ velocity: 0.75
164+ easing.type: Easing.InOutQuad
165+ }
166+ }
167+ }
168+ }
169+
170+ Timer {
171+ id: alternateLabelTimer
172+ running: callHint.active
173+ interval: labelPathView.offset % 1.0 !== 0 ? labelSwitchInterval : labelSwitchInterval/4
174+ repeat: true
175+
176+ onRunningChanged: {
177+ if (running) {
178+ offsetBehaviour.enabled = false;
179+ labelPathView.offset = 0;
180+ offsetBehaviour.enabled = true;
181+ }
182+ }
183+
184+ onTriggered: {
185+ labelPathView.offset = labelPathView.offset + 0.5;
186+ }
187+ }
188+
189+ Telephony.ContactWatcher {
190+ id: _contactWatcher
191+ objectName: "contactWatcher"
192+ phoneNumber: d.activeCall ? d.activeCall.phoneNumber : ""
193+ }
194+
195+ QtObject {
196+ id: d
197+
198+ property QtObject activeCall: {
199+ if (callManager.foregroundCall) {
200+ return callManager.foregroundCall;
201+ }
202+ return callManager.backgroundCall;
203+ }
204+ property int callTime: activeCall ? activeCall.elapsedTime : 0
205+ }
206+}
qml/Panel/IndicatorRow.qml+1−1
@@ -36,7 +36,7 @@ Item {
36
36
37 function setDefaultItem() {
37 function setDefaultItem() {
38 // The leftmost indicator
38 // The leftmost indicator
39− setCurrentItem(0);
39+ setCurrentItemIndex(0);
40 }
40 }
41
41
42 function setCurrentItemIndex(index) {
42 function setCurrentItemIndex(index) {
qml/Panel/Indicators.qml+22−36
@@ -28,7 +28,6 @@ Showable {
28
28
29 property real openedHeight: units.gu(71)
29 property real openedHeight: units.gu(71)
30 property int panelHeight: units.gu(3)
30 property int panelHeight: units.gu(3)
31− property bool pinnedMode: true //should be set true if indicators menu can cover whole screen
32 property alias overFlowWidth: indicatorRow.overFlowWidth
31 property alias overFlowWidth: indicatorRow.overFlowWidth
33 property alias showAll: indicatorRow.showAll
32 property alias showAll: indicatorRow.showAll
34 // TODO: This should be sourced by device type (eg "desktop", "tablet", "phone"...)
33 // TODO: This should be sourced by device type (eg "desktop", "tablet", "phone"...)
@@ -38,26 +37,20 @@ Showable {
38 readonly property int lockThreshold: openedHeight / 2
37 readonly property int lockThreshold: openedHeight / 2
39 property bool fullyOpened: height == openedHeight
38 property bool fullyOpened: height == openedHeight
40 property bool partiallyOpened: height > panelHeight && !fullyOpened
39 property bool partiallyOpened: height > panelHeight && !fullyOpened
41− property real visualBottom: Math.max(y+height, y+indicatorRow.y+indicatorRow.height)
42 property bool contentEnabled: true
40 property bool contentEnabled: true
43 property bool initalizeItem: true
41 property bool initalizeItem: true
44 readonly property alias content: menuContent
42 readonly property alias content: menuContent
45 property real unitProgress: (height - panelHeight) / (openedHeight - panelHeight)
43 property real unitProgress: (height - panelHeight) / (openedHeight - panelHeight)
44+ property bool enableHint: true
45+ property real showHintBottomMargin: 0
46+
47+ signal showTapped(point position)
46
48
47 // TODO: Perhaps we need a animation standard for showing/hiding? Each showable seems to
49 // TODO: Perhaps we need a animation standard for showing/hiding? Each showable seems to
48 // use its own values. Need to ask design about this.
50 // use its own values. Need to ask design about this.
49 showAnimation: StandardAnimation {
51 showAnimation: StandardAnimation {
50 property: "height"
52 property: "height"
51− duration: 350
52 to: openedHeight
53 to: openedHeight
53− easing.type: Easing.OutCubic
54−
55− // Re-size if we've changed the openHeight while shown.
56− onToChanged: {
57− if (indicators.shown) {
58− indicators.show();
59− }
60− }
61 }
54 }
62
55
63 hideAnimation: StandardAnimation {
56 hideAnimation: StandardAnimation {
@@ -67,16 +60,24 @@ Showable {
67 easing.type: Easing.OutCubic
60 easing.type: Easing.OutCubic
68 }
61 }
69
62
63+ onOpenedHeightChanged: {
64+ if (showAnimation.running) {
65+ showAnimation.restart();
66+ } else if (indicators.shown) {
67+ height = openedHeight;
68+ }
69+ }
70+
70 height: panelHeight
71 height: panelHeight
71− onHeightChanged: updateRevealProgressState(indicators.height - panelHeight, true)
72+ onHeightChanged: updateRevealProgressState(indicators.height - panelHeight - showHintBottomMargin, true)
72
73
73 function updateRevealProgressState(revealProgress, enableRelease) {
74 function updateRevealProgressState(revealProgress, enableRelease) {
74 if (!showAnimation.running && !hideAnimation.running) {
75 if (!showAnimation.running && !hideAnimation.running) {
75 if (revealProgress === 0) {
76 if (revealProgress === 0) {
76 indicators.state = "initial";
77 indicators.state = "initial";
77− } else if (revealProgress > 0 && revealProgress <= hintValue) {
78+ } else if (enableHint && revealProgress > 0 && revealProgress <= hintValue) {
78 indicators.state = "hint";
79 indicators.state = "hint";
79− } else if (revealProgress > hintValue && revealProgress < lockThreshold) {
80+ } else if ((!enableHint || revealProgress > hintValue) && revealProgress < lockThreshold) {
80 indicators.state = "reveal";
81 indicators.state = "reveal";
81 } else if (revealProgress >= lockThreshold && lockThreshold > 0) {
82 } else if (revealProgress >= lockThreshold && lockThreshold > 0) {
82 indicators.state = "locked";
83 indicators.state = "locked";
@@ -171,17 +172,6 @@ Showable {
171 }
172 }
172 }
173 }
173
174
174− VerticalThinDivider {
175− anchors {
176− top: indicators.top
177− topMargin: panelHeight
178− bottom: handle.bottom
179− right: indicators.left
180− }
181− width: units.dp(2)
182− source: "graphics/VerticalDivider.png"
183− }
184−
185 VisibleIndicators {
175 VisibleIndicators {
186 id: visibleIndicators
176 id: visibleIndicators
187 }
177 }
@@ -245,10 +235,6 @@ Showable {
245 }
235 }
246 }
236 }
247
237
248− PanelBackground {
249− anchors.fill: indicatorRow
250− }
251−
252 IndicatorRow {
238 IndicatorRow {
253 id: indicatorRow
239 id: indicatorRow
254 objectName: "indicatorRow"
240 objectName: "indicatorRow"
@@ -356,24 +342,27 @@ Showable {
356 id: showDragHandle
342 id: showDragHandle
357 anchors.bottom: parent.bottom
343 anchors.bottom: parent.bottom
358 // go beyond parent so that it stays reachable, at the top of the screen.
344 // go beyond parent so that it stays reachable, at the top of the screen.
359− anchors.bottomMargin: pinnedMode ? 0 : -panelHeight
345+ anchors.bottomMargin: showHintBottomMargin
360 anchors.left: parent.left
346 anchors.left: parent.left
361 anchors.right: parent.right
347 anchors.right: parent.right
362 height: panelHeight
348 height: panelHeight
363 direction: Direction.Downwards
349 direction: Direction.Downwards
364 enabled: !indicators.shown && indicators.available
350 enabled: !indicators.shown && indicators.available
365− hintDisplacement: pinnedMode ? indicators.hintValue : 0
351+ hintDisplacement: enableHint ? indicators.hintValue : 0
366 autoCompleteDragThreshold: maxTotalDragDistance / 2
352 autoCompleteDragThreshold: maxTotalDragDistance / 2
367 stretch: true
353 stretch: true
368 maxTotalDragDistance: openedHeight - panelHeight
354 maxTotalDragDistance: openedHeight - panelHeight
369− distanceThreshold: pinnedMode ? 0 : units.gu(3)
355+ distanceThreshold: panelHeight
370
356
371 onStatusChanged: {
357 onStatusChanged: {
372 if (status === DirectionalDragArea.Recognized) {
358 if (status === DirectionalDragArea.Recognized) {
373 menuContent.activateContent();
359 menuContent.activateContent();
374 }
360 }
375 }
361 }
362+
363+ onTapped: showTapped(Qt.point(touchSceneX, touchSceneY));
376 }
364 }
365+
377 DragHandle {
366 DragHandle {
378 id: hideDragHandle
367 id: hideDragHandle
379 anchors.fill: handle
368 anchors.fill: handle
@@ -396,10 +385,6 @@ Showable {
396 },
385 },
397 State {
386 State {
398 name: "hint"
387 name: "hint"
399− PropertyChanges {
400− target: indicatorRow;
401− y: pinnedMode ? 0 : panelHeight
402− }
403 StateChangeScript {
388 StateChangeScript {
404 script: {
389 script: {
405 if (d.activeDragHandle) {
390 if (d.activeDragHandle) {
@@ -432,5 +417,6 @@ Showable {
432 Component.onCompleted: initialise();
417 Component.onCompleted: initialise();
433 function initialise() {
418 function initialise() {
434 visibleIndicators.load(profile);
419 visibleIndicators.load(profile);
420+ indicatorRow.setDefaultItem();
435 }
421 }
436}
422}
qml/Panel/Indicators/DefaultIndicatorPage.qml+3−2
@@ -22,7 +22,7 @@ import QtQuick 2.0
22import Ubuntu.Components 0.1 as Components
22import Ubuntu.Components 0.1 as Components
23import Unity.Indicators 0.1 as Indicators
23import Unity.Indicators 0.1 as Indicators
24
24
25−Indicators.IndicatorBase {
25+IndicatorBase {
26 id: main
26 id: main
27
27
28 //const
28 //const
@@ -174,8 +174,9 @@ Indicators.IndicatorBase {
174 }
174 }
175 }
175 }
176
176
177− Indicators.MenuItemFactory {
177+ MenuItemFactory {
178 id: factory
178 id: factory
179+ rootModel: main.menuModel ? main.menuModel : null
179 menuModel: mainMenu.model ? mainMenu.model : null
180 menuModel: mainMenu.model ? mainMenu.model : null
180 }
181 }
181
182
qml/Panel/Indicators/DefaultIndicatorWidget.qml+22−31
@@ -19,12 +19,12 @@
19
19
20import QtQuick 2.0
20import QtQuick 2.0
21import Ubuntu.Components 0.1
21import Ubuntu.Components 0.1
22−import Unity.Indicators 0.1 as Indicators
22+import Ubuntu.Settings.Components 0.1
23
23
24−Indicators.IndicatorBase {
24+IndicatorBase {
25 id: indicatorWidget
25 id: indicatorWidget
26
26
27− property int iconSize: height
27+ property int iconSize: units.gu(2)
28 property alias leftLabel: itemLeftLabel.text
28 property alias leftLabel: itemLeftLabel.text
29 property alias rightLabel: itemRightLabel.text
29 property alias rightLabel: itemRightLabel.text
30 property var icons: undefined
30 property var icons: undefined
@@ -32,9 +32,16 @@ Indicators.IndicatorBase {
32 width: itemRow.width
32 width: itemRow.width
33 enabled: false
33 enabled: false
34
34
35+ // FIXME: For now we will enable led indicator support only for messaging indicator
36+ // in the future we should export a led API insted of doing that,
37+ Loader {
38+ id: indicatorLed
39+ // only load source Component if the icons contains the new message icon
40+ source: (indicatorWidget.icons && (String(indicatorWidget.icons).indexOf("indicator-messages-new") != -1)) ? Qt.resolvedUrl("IndicatorsLight.qml") : ""
41+ }
42+
35 Row {
43 Row {
36 id: itemRow
44 id: itemRow
37− width: childrenRect.width
38 objectName: "itemRow"
45 objectName: "itemRow"
39 anchors {
46 anchors {
40 top: parent.top
47 top: parent.top
@@ -44,7 +51,7 @@ Indicators.IndicatorBase {
44
51
45 Label {
52 Label {
46 id: itemLeftLabel
53 id: itemLeftLabel
47− width: guRoundUp(implicitWidth)
54+ width: contentWidth + units.gu(1)
48 objectName: "leftLabel"
55 objectName: "leftLabel"
49 color: Theme.palette.selected.backgroundText
56 color: Theme.palette.selected.backgroundText
50 opacity: 0.8
57 opacity: 0.8
@@ -52,10 +59,10 @@ Indicators.IndicatorBase {
52 fontSize: "medium"
59 fontSize: "medium"
53 anchors.verticalCenter: parent.verticalCenter
60 anchors.verticalCenter: parent.verticalCenter
54 visible: text != ""
61 visible: text != ""
62+ horizontalAlignment: Text.AlignHCenter
55 }
63 }
56
64
57 Row {
65 Row {
58− width: childrenRect.width
59 anchors {
66 anchors {
60 top: parent.top
67 top: parent.top
61 bottom: parent.bottom
68 bottom: parent.bottom
@@ -65,22 +72,16 @@ Indicators.IndicatorBase {
65 model: indicatorWidget.icons
72 model: indicatorWidget.icons
66
73
67 Item {
74 Item {
68− width: guRoundUp(itemImage.width)
75+ width: itemImage.width + units.gu(1)
69− height: indicatorWidget.iconSize
76+ anchors { top: parent.top; bottom: parent.bottom }
70
77
71− Image {
78+ StatusIcon {
72 id: itemImage
79 id: itemImage
73− objectName: "itemImage"
80+ height: indicatorWidget.iconSize
74− visible: source != ""
81+ anchors.centerIn: parent
75 source: modelData
82 source: modelData
76− height: parent.height
83+ sets: ["status", "actions"]
77− anchors.horizontalCenter: parent.horizontalCenter
84+ color: "#CCCCCC"
78− fillMode: Image.PreserveAspectFit
79−
80− sourceSize {
81− width: indicatorWidget.iconSize
82− height: indicatorWidget.iconSize
83− }
84 }
85 }
85 }
86 }
86 }
87 }
@@ -88,7 +89,7 @@ Indicators.IndicatorBase {
88
89
89 Label {
90 Label {
90 id: itemRightLabel
91 id: itemRightLabel
91− width: guRoundUp(implicitWidth)
92+ width: contentWidth + units.gu(1)
92 objectName: "rightLabel"
93 objectName: "rightLabel"
93 color: Theme.palette.selected.backgroundText
94 color: Theme.palette.selected.backgroundText
94 opacity: 0.8
95 opacity: 0.8
@@ -96,20 +97,10 @@ Indicators.IndicatorBase {
96 fontSize: "medium"
97 fontSize: "medium"
97 anchors.verticalCenter: parent.verticalCenter
98 anchors.verticalCenter: parent.verticalCenter
98 visible: text != ""
99 visible: text != ""
100+ horizontalAlignment: Text.AlignHCenter
99 }
101 }
100 }
102 }
101
103
102− // TODO: Use toolkit function https://bugs.launchpad.net/ubuntu-ui-toolkit/+bug/1242575
103− function guRoundUp(width) {
104− if (width == 0) {
105− return 0;
106− }
107− var gu1 = units.gu(1.0);
108− var mod = (width % gu1);
109−
110− return mod == 0 ? width : width + (gu1 - mod);
111− }
112−
113 onRootActionStateChanged: {
104 onRootActionStateChanged: {
114 if (rootActionState == undefined) {
105 if (rootActionState == undefined) {
115 leftLabel = "";
106 leftLabel = "";
plugins/Unity/Indicators/qml/IndicatorBase.qml → qml/Panel/Indicators/IndicatorBase.qmlrenamed+2−3
@@ -18,8 +18,7 @@
18 */
18 */
19
19
20import QtQuick 2.0
20import QtQuick 2.0
21−import QMenuModel 0.1 as QMenuModel
22−import Unity.Indicators 0.1 as Indicators
21+import Unity.Indicators 0.1
23
22
24Item {
23Item {
25 id: indicatorItem
24 id: indicatorItem
@@ -43,7 +42,7 @@ Item {
43 menuObjectPath: indicatorItem.deviceMenuObjectPath
42 menuObjectPath: indicatorItem.deviceMenuObjectPath
44 }
43 }
45
44
46− property var rootActionState: Indicators.RootActionState {
45+ property RootActionState rootActionState: RootActionState {
47 menu: menuModel
46 menu: menuModel
48 onUpdated: indicatorItem.rootActionStateChanged()
47 onUpdated: indicatorItem.rootActionStateChanged()
49 }
48 }
qml/Panel/Indicators/IndicatorDelegate.qml+1−2
@@ -18,9 +18,8 @@
18 */
18 */
19
19
20import QtQuick 2.0
20import QtQuick 2.0
21−import Unity.Indicators 0.1 as Indicators
22
21
23−Indicators.IndicatorBase {
22+IndicatorBase {
24 enabled: false
23 enabled: false
25
24
26 onRootActionStateChanged: {
25 onRootActionStateChanged: {
tests/mocks/Unity/Indicators/MenuItemFactory.qml → qml/Panel/Indicators/IndicatorsLight.qmlrenamed+14−14
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright 2013 Canonical Ltd.
2+ * Copyright 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 Lesser General Public License as published by
5 * it under the terms of the GNU Lesser General Public License as published by
@@ -14,25 +14,25 @@
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
15 *
16 * Authors:
16 * Authors:
17− * Nick Dedekind <nick.dedekind@canonical.com>
17+ * Renato Araujo Oliveira Filho <renato@canonical.com>
18 */
18 */
19
19
20import QtQuick 2.0
20import QtQuick 2.0
21−import Ubuntu.Components.ListItems 0.1 as ListItem
21+import Powerd 0.1
22+import Lights 0.1
22
23
23−Item {
24+QtObject {
24− id: menuFactory
25+ id: root
25
26
26− property var menuModel: null
27+ Component.onDestruction: Lights.state = Lights.Off
27
28
28− Component {
29+ // QtObject does not have children
29− id: standardMenu;
30+ property var _connections: Connections {
30− ListItem.Standard {
31+ id: powerConnection
31− objectName: "standardMenu"
32− }
33− }
34
32
35− function load(modelData) {
33+ target: Powerd
36− return standardMenu;
34+ onDisplayPowerStateChange: {
35+ Lights.state = (status === Powerd.Off) ? Lights.On : Lights.Off
36+ }
37 }
37 }
38}
38}
plugins/Unity/Indicators/qml/MenuItemFactory.qml → qml/Panel/Indicators/MenuItemFactory.qmlrenamed+178−14
@@ -19,7 +19,8 @@
19
19
20import QtQuick 2.0
20import QtQuick 2.0
21import Ubuntu.Settings.Menus 0.1 as Menus
21import Ubuntu.Settings.Menus 0.1 as Menus
22+import Ubuntu.Settings.Components 0.1 as SettingsComponents
22−import QMenuModel 0.1 as QMenuModel
23+import QMenuModel 0.1
23import Utils 0.1 as Utils
24import Utils 0.1 as Utils
24import Ubuntu.Components.ListItems 0.1 as ListItems
25import Ubuntu.Components.ListItems 0.1 as ListItems
25import Ubuntu.Components 0.1
26import Ubuntu.Components 0.1
@@ -27,20 +28,23 @@ import Ubuntu.Components 0.1
27Item {
28Item {
28 id: menuFactory
29 id: menuFactory
29
30
31+ property var rootModel: null
30 property var menuModel: null
32 property var menuModel: null
31
33
32 property var _map: {
34 property var _map: {
33 "unity.widgets.systemsettings.tablet.volumecontrol" : sliderMenu,
35 "unity.widgets.systemsettings.tablet.volumecontrol" : sliderMenu,
34 "unity.widgets.systemsettings.tablet.switch" : switchMenu,
36 "unity.widgets.systemsettings.tablet.switch" : switchMenu,
35
37
36− "com.canonical.indicator.button" : buttonMenu,
38+ "com.canonical.indicator.button" : buttonMenu,
37− "com.canonical.indicator.div" : separatorMenu,
39+ "com.canonical.indicator.div" : separatorMenu,
38− "com.canonical.indicator.section" : sectionMenu,
40+ "com.canonical.indicator.section" : sectionMenu,
39− "com.canonical.indicator.progress" : progressMenu,
41+ "com.canonical.indicator.progress" : progressMenu,
40− "com.canonical.indicator.slider" : sliderMenu,
42+ "com.canonical.indicator.slider" : sliderMenu,
41− "com.canonical.indicator.switch" : switchMenu,
43+ "com.canonical.indicator.switch" : switchMenu,
42− "com.canonical.indicator.alarm" : alarmMenu,
44+ "com.canonical.indicator.alarm" : alarmMenu,
43− "com.canonical.indicator.appointment" : appointmentMenu,
45+ "com.canonical.indicator.appointment" : appointmentMenu,
46+ "com.canonical.indicator.transfer" : transferMenu,
47+ "com.canonical.indicator.button-section" : buttonSectionMenu,
44
48
45 "com.canonical.indicator.messages.messageitem" : messageItem,
49 "com.canonical.indicator.messages.messageitem" : messageItem,
46 "com.canonical.indicator.messages.sourceitem" : groupedMessage,
50 "com.canonical.indicator.messages.sourceitem" : groupedMessage,
@@ -64,6 +68,7 @@ Item {
64
68
65 Component {
69 Component {
66 id: separatorMenu;
70 id: separatorMenu;
71+
67 Menus.SeparatorMenu {
72 Menus.SeparatorMenu {
68 objectName: "separatorMenu"
73 objectName: "separatorMenu"
69 }
74 }
@@ -71,6 +76,7 @@ Item {
71
76
72 Component {
77 Component {
73 id: sliderMenu;
78 id: sliderMenu;
79+
74 Menus.SliderMenu {
80 Menus.SliderMenu {
75 objectName: "sliderMenu"
81 objectName: "sliderMenu"
76 property QtObject menuData: null
82 property QtObject menuData: null
@@ -122,6 +128,7 @@ Item {
122
128
123 Component {
129 Component {
124 id: buttonMenu;
130 id: buttonMenu;
131+
125 Menus.ButtonMenu {
132 Menus.ButtonMenu {
126 objectName: "buttonMenu"
133 objectName: "buttonMenu"
127 property QtObject menuData: null
134 property QtObject menuData: null
@@ -139,6 +146,7 @@ Item {
139 }
146 }
140 Component {
147 Component {
141 id: sectionMenu;
148 id: sectionMenu;
149+
142 Menus.SectionMenu {
150 Menus.SectionMenu {
143 objectName: "sectionMenu"
151 objectName: "sectionMenu"
144 property QtObject menuData: null
152 property QtObject menuData: null
@@ -151,6 +159,7 @@ Item {
151
159
152 Component {
160 Component {
153 id: progressMenu;
161 id: progressMenu;
162+
154 Menus.ProgressValueMenu {
163 Menus.ProgressValueMenu {
155 objectName: "progressMenu"
164 objectName: "progressMenu"
156 property QtObject menuData: null
165 property QtObject menuData: null
@@ -165,7 +174,8 @@ Item {
165
174
166 Component {
175 Component {
167 id: standardMenu;
176 id: standardMenu;
168− ListItems.Standard {
177+
178+ Menus.StandardMenu {
169 objectName: "standardMenu"
179 objectName: "standardMenu"
170 property QtObject menuData: null
180 property QtObject menuData: null
171 property int menuIndex: -1
181 property int menuIndex: -1
@@ -183,6 +193,7 @@ Item {
183
193
184 Component {
194 Component {
185 id: checkableMenu;
195 id: checkableMenu;
196+
186 Menus.CheckableMenu {
197 Menus.CheckableMenu {
187 objectName: "checkableMenu"
198 objectName: "checkableMenu"
188 property QtObject menuData: null
199 property QtObject menuData: null
@@ -202,6 +213,7 @@ Item {
202
213
203 Component {
214 Component {
204 id: switchMenu;
215 id: switchMenu;
216+
205 Menus.SwitchMenu {
217 Menus.SwitchMenu {
206 objectName: "switchMenu"
218 objectName: "switchMenu"
207 property QtObject menuData: null
219 property QtObject menuData: null
@@ -221,6 +233,7 @@ Item {
221
233
222 Component {
234 Component {
223 id: alarmMenu;
235 id: alarmMenu;
236+
224 Menus.EventMenu {
237 Menus.EventMenu {
225 objectName: "alarmMenu"
238 objectName: "alarmMenu"
226 property QtObject menuData: null
239 property QtObject menuData: null
@@ -258,6 +271,7 @@ Item {
258
271
259 Component {
272 Component {
260 id: appointmentMenu;
273 id: appointmentMenu;
274+
261 Menus.EventMenu {
275 Menus.EventMenu {
262 objectName: "appointmentMenu"
276 objectName: "appointmentMenu"
263 property QtObject menuData: null
277 property QtObject menuData: null
@@ -297,6 +311,7 @@ Item {
297
311
298 Component {
312 Component {
299 id: wifiSection;
313 id: wifiSection;
314+
300 Menus.SectionMenu {
315 Menus.SectionMenu {
301 objectName: "wifiSection"
316 objectName: "wifiSection"
302 property QtObject menuData: null
317 property QtObject menuData: null
@@ -323,6 +338,7 @@ Item {
323
338
324 Component {
339 Component {
325 id: accessPoint;
340 id: accessPoint;
341+
326 Menus.AccessPointMenu {
342 Menus.AccessPointMenu {
327 objectName: "accessPoint"
343 objectName: "accessPoint"
328 property QtObject menuData: null
344 property QtObject menuData: null
@@ -330,7 +346,7 @@ Item {
330 property int menuIndex: -1
346 property int menuIndex: -1
331 property var extendedData: menuData && menuData.ext || undefined
347 property var extendedData: menuData && menuData.ext || undefined
332
348
333− property var strengthAction: QMenuModel.UnityMenuAction {
349+ property var strengthAction: UnityMenuAction {
334 model: menuModel
350 model: menuModel
335 index: menuIndex
351 index: menuIndex
336 name: getExtendedProperty(extendedData, "xCanonicalWifiApStrengthAction", "")
352 name: getExtendedProperty(extendedData, "xCanonicalWifiApStrengthAction", "")
@@ -365,6 +381,7 @@ Item {
365
381
366 Component {
382 Component {
367 id: messageItem
383 id: messageItem
384+
368 MessageMenuItemFactory {
385 MessageMenuItemFactory {
369 objectName: "messageItem"
386 objectName: "messageItem"
370 menuModel: menuFactory.menuModel
387 menuModel: menuFactory.menuModel
@@ -373,6 +390,7 @@ Item {
373
390
374 Component {
391 Component {
375 id: groupedMessage
392 id: groupedMessage
393+
376 Menus.GroupedMessageMenu {
394 Menus.GroupedMessageMenu {
377 objectName: "groupedMessage"
395 objectName: "groupedMessage"
378 property QtObject menuData: null
396 property QtObject menuData: null
@@ -409,6 +427,7 @@ Item {
409
427
410 Component {
428 Component {
411 id: mediaPayerMenu;
429 id: mediaPayerMenu;
430+
412 Menus.MediaPlayerMenu {
431 Menus.MediaPlayerMenu {
413 objectName: "mediaPayerMenu"
432 objectName: "mediaPayerMenu"
414 property QtObject menuData: null
433 property QtObject menuData: null
@@ -435,6 +454,7 @@ Item {
435
454
436 Component {
455 Component {
437 id: playbackItemMenu;
456 id: playbackItemMenu;
457+
438 Menus.PlaybackItemMenu {
458 Menus.PlaybackItemMenu {
439 objectName: "playbackItemMenu"
459 objectName: "playbackItemMenu"
440 property QtObject menuData: null
460 property QtObject menuData: null
@@ -442,17 +462,17 @@ Item {
442 property int menuIndex: -1
462 property int menuIndex: -1
443 property var extendedData: menuData && menuData.ext || undefined
463 property var extendedData: menuData && menuData.ext || undefined
444
464
445− property var playAction: QMenuModel.UnityMenuAction {
465+ property var playAction: UnityMenuAction {
446 model: menuModel
466 model: menuModel
447 index: menuIndex
467 index: menuIndex
448 name: getExtendedProperty(extendedData, "xCanonicalPlayAction", "")
468 name: getExtendedProperty(extendedData, "xCanonicalPlayAction", "")
449 }
469 }
450− property var nextAction: QMenuModel.UnityMenuAction {
470+ property var nextAction: UnityMenuAction {
451 model: menuModel
471 model: menuModel
452 index: menuIndex
472 index: menuIndex
453 name: getExtendedProperty(extendedData, "xCanonicalNextAction", "")
473 name: getExtendedProperty(extendedData, "xCanonicalNextAction", "")
454 }
474 }
455− property var previousAction: QMenuModel.UnityMenuAction {
475+ property var previousAction: UnityMenuAction {
456 model: menuModel
476 model: menuModel
457 index: menuIndex
477 index: menuIndex
458 name: getExtendedProperty(extendedData, "xCanonicalPreviousAction", "")
478 name: getExtendedProperty(extendedData, "xCanonicalPreviousAction", "")
@@ -489,6 +509,150 @@ Item {
489 }
509 }
490 }
510 }
491
511
512+ Component {
513+ id: transferMenu
514+
515+ Menus.TransferMenu {
516+ objectName: "transferMenu"
517+ id: transfer
518+ property QtObject menuData: null
519+ property var menuModel: menuFactory.menuModel
520+ property int menuIndex: -1
521+ property var extendedData: menuData && menuData.ext || undefined
522+ property var uid: getExtendedProperty(extendedData, "xCanonicalUid", undefined)
523+
524+ text: menuData && menuData.label || ""
525+ iconSource: menuData && menuData.icon || ""
526+ maximum: 1.0
527+ enabled: menuData && menuData.sensitive || false
528+ removable: true
529+ confirmRemoval: true
530+
531+ QDBusActionGroup {
532+ id: actionGroup
533+ busType: 1
534+ busName: rootModel.busName
535+ objectPath: rootModel.actions["indicator"]
536+
537+ property var activateAction: action("activate-transfer")
538+ property var cancelAction: action("cancel-transfer")
539+ property var transferStateAction: uid !== undefined ? action("transfer-state."+uid) : null
540+
541+ Component.onCompleted: actionGroup.start()
542+ }
543+
544+ property var transferState: {
545+ if (actionGroup.transferStateAction === null) return undefined;
546+ return actionGroup.transferStateAction.valid ? actionGroup.transferStateAction.state : undefined
547+ }
548+
549+ property var runningState : transferState !== undefined ? transferState["state"] : undefined
550+ property var secondsLeft : transferState !== undefined ? transferState["seconds-left"] : undefined
551+
552+ active: runningState !== undefined && runningState !== Menus.TransferState.Finished
553+ progress: transferState !== undefined ? transferState["percent"] : 0.0
554+
555+ // TODO - Should be in the SDK
556+ property var timeRemaining: {
557+ if (secondsLeft === undefined) return undefined;
558+
559+ var remaining = "";
560+ var hours = Math.floor(secondsLeft / (60 * 60));
561+ var minutes = Math.floor(secondsLeft / 60) % 60;
562+ var seconds = secondsLeft % 60;
563+ if (hours > 0) {
564+ remaining += hours + (hours == 1 ? " hour" : " hours");
565+ }
566+ if (minutes > 0) {
567+ if (remaining != "") remaining += ", ";
568+ remaining += minutes + (minutes == 1 ? " minute" : " minutes");
569+ }
570+ // don't include seconds if hours > 0
571+ if (hours == 0 && minutes < 5 && seconds > 0) {
572+ if (remaining != "") remaining += ", ";
573+ remaining += seconds + (seconds == 1 ? " second" : " seconds");
574+ }
575+ if (remaining == "")
576+ remaining = "0 seconds";
577+ return remaining + " remaining";
578+ }
579+
580+ stateText: {
581+ switch (runningState) {
582+ case Menus.TransferState.Queued:
583+ return i18n.tr("In queue…");
584+ case Menus.TransferState.Hashing:
585+ case Menus.TransferState.Processing:
586+ case Menus.TransferState.Running:
587+ return timeRemaining === undefined ? i18n.tr("Downloading") : timeRemaining;
588+ case Menus.TransferState.Paused:
589+ return i18n.tr("Paused, tap to resume");
590+ case Menus.TransferState.Canceled:
591+ return i18n.tr("Canceled");
592+ case Menus.TransferState.Finished:
593+ return i18n.tr("Finished");
594+ case Menus.TransferState.Error:
595+ return i18n.tr("Failed, tap to retry");
596+ }
597+ return "";
598+ }
599+
600+ onMenuModelChanged: {
601+ loadAttributes();
602+ }
603+ onMenuIndexChanged: {
604+ loadAttributes();
605+ }
606+ onTriggered: {
607+ actionGroup.activateAction.activate(uid);
608+ }
609+ onItemRemoved: {
610+ actionGroup.cancelAction.activate(uid);
611+ }
612+
613+ function loadAttributes() {
614+ if (!menuModel || menuIndex == -1) return;
615+ menuModel.loadExtendedAttributes(menuIndex, {'x-canonical-uid': 'string'});
616+ }
617+ }
618+ }
619+
620+ Component {
621+ id: buttonSectionMenu;
622+
623+ ListItems.Standard {
624+ objectName: "buttonSectionMenu"
625+ property QtObject menuData: null
626+ property var menuModel: menuFactory.menuModel
627+ property int menuIndex: -1
628+ property var extendedData: menuData && menuData.ext || undefined
629+
630+ iconSource: menuData && menuData.icon || ""
631+ enabled: menuData && menuData.sensitive || false
632+ text: menuData && menuData.label || ""
633+ showDivider: false
634+
635+ onMenuModelChanged: {
636+ loadAttributes();
637+ }
638+ onMenuIndexChanged: {
639+ loadAttributes();
640+ }
641+ function loadAttributes() {
642+ if (!menuModel || menuIndex == -1) return;
643+ menuModel.loadExtendedAttributes(menuIndex, {'x-canonical-extra-label': 'string'});
644+ }
645+
646+ control: Button {
647+ text: getExtendedProperty(extendedData, "xCanonicalExtraLabel", "")
648+
649+ onClicked: {
650+ menuModel.activate(menuIndex);
651+ }
652+ }
653+ }
654+ }
655+
492 function load(modelData) {
656 function load(modelData) {
493 if (modelData.type !== undefined) {
657 if (modelData.type !== undefined) {
494 var component = _map[modelData.type];
658 var component = _map[modelData.type];
plugins/Unity/Indicators/qml/MessageMenuItemFactory.qml → qml/Panel/Indicators/MessageMenuItemFactory.qmlrenamed+3
@@ -77,6 +77,7 @@ Item {
77
77
78 Component {
78 Component {
79 id: simpleTextMessage
79 id: simpleTextMessage
80+
80 Menus.SimpleTextMessageMenu {
81 Menus.SimpleTextMessageMenu {
81 id: message
82 id: message
82 objectName: "simpleTextMessage"
83 objectName: "simpleTextMessage"
@@ -115,6 +116,7 @@ Item {
115
116
116 Component {
117 Component {
117 id: textMessage
118 id: textMessage
119+
118 Menus.TextMessageMenu {
120 Menus.TextMessageMenu {
119 id: message
121 id: message
120 objectName: "textMessage"
122 objectName: "textMessage"
@@ -165,6 +167,7 @@ Item {
165 }
167 }
166 Component {
168 Component {
167 id: snapDecision
169 id: snapDecision
170+
168 Menus.SnapDecisionMenu {
171 Menus.SnapDecisionMenu {
169 id: message
172 id: message
170 objectName: "snapDecision"
173 objectName: "snapDecision"
plugins/Unity/Indicators/qml/RemoveBackground.qml → qml/Panel/Indicators/RemoveBackground.qmlrenamed

The content is the same.

qml/Panel/Panel.qml+131−90
@@ -16,27 +16,23 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import Ubuntu.Components 0.1
18import Ubuntu.Components 0.1
19+import Unity.Application 0.1
19import "../Components"
20import "../Components"
21+import "../Components/ListItems"
20
22
21Item {
23Item {
22 id: root
24 id: root
23− readonly property real panelHeight: units.gu(3) + units.dp(2)
25+ readonly property real panelHeight: indicatorArea.y + d.indicatorHeight
24− property real indicatorsMenuWidth: (shell.width > units.gu(60)) ? units.gu(40) : shell.width
25− property alias indicators: indicatorsMenu
26+ property alias indicators: __indicators
27+ property alias callHint: __callHint
26 property bool fullscreenMode: false
28 property bool fullscreenMode: false
27− property bool searchVisible: true
28−
29− readonly property real separatorLineHeight: leftSeparatorLine.height
30− readonly property real __panelMinusSeparatorLineHeight: panelHeight - separatorLineHeight
31−
32− signal searchClicked
33
29
34 function hideIndicatorMenu(delay) {
30 function hideIndicatorMenu(delay) {
35 if (delay !== undefined) {
31 if (delay !== undefined) {
36 hideTimer.interval = delay;
32 hideTimer.interval = delay;
37 hideTimer.start();
33 hideTimer.start();
38 } else {
34 } else {
39− indicatorsMenu.hide();
35+ indicators.hide();
40 }
36 }
41 }
37 }
42
38
@@ -44,129 +40,174 @@ Item {
44 id: hideTimer
40 id: hideTimer
45 running: false
41 running: false
46 onTriggered: {
42 onTriggered: {
47− indicatorsMenu.hide();
43+ indicators.hide();
48 }
44 }
49 }
45 }
50
46
51 Connections {
47 Connections {
52− target: indicatorsMenu
48+ target: indicators
53 onShownChanged: hideTimer.stop()
49 onShownChanged: hideTimer.stop()
54 }
50 }
55
51
56− PanelBackground {
57− id: panelBackground
58− anchors {
59− left: parent.left
60− right: parent.right
61− }
62− height: __panelMinusSeparatorLineHeight
63− y: 0
64−
65− Behavior on y { StandardAnimation { duration: 500 } }
66− }
67−
68− PanelSeparatorLine {
69− id: leftSeparatorLine
70− anchors {
71− top: panelBackground.bottom
72− left: parent.left
73− right: indicatorsMenu.left
74− }
75− saturation: 1 - indicatorsMenu.unitProgress
76− }
77−
78 Rectangle {
52 Rectangle {
79 id: darkenedArea
53 id: darkenedArea
80 property real darkenedOpacity: 0.6
54 property real darkenedOpacity: 0.6
81 anchors {
55 anchors {
56+ top: parent.top
57+ topMargin: panelHeight
82 left: parent.left
58 left: parent.left
83 right: parent.right
59 right: parent.right
84− top: panelBackground.bottom
85 bottom: parent.bottom
60 bottom: parent.bottom
86 }
61 }
87 color: "black"
62 color: "black"
88− opacity: indicatorsMenu.unitProgress * darkenedOpacity
63+ opacity: indicators.unitProgress * darkenedOpacity
64+
89 MouseArea {
65 MouseArea {
90 anchors.fill: parent
66 anchors.fill: parent
91− enabled: indicatorsMenu.shown
67+ enabled: indicators.shown
92− onClicked: if (indicatorsMenu.fullyOpened) indicatorsMenu.hide();
68+ onClicked: if (indicators.fullyOpened) indicators.hide();
93 }
69 }
94 }
70 }
95
71
96− Indicators {
72+ Item {
97− id: indicatorsMenu
73+ id: indicatorArea
98− objectName: "indicators"
74+ objectName: "indicatorArea"
99−
100− anchors.right: parent.right
101− y: panelBackground.y
102− width: root.indicatorsMenuWidth
103− shown: false
104− panelHeight: __panelMinusSeparatorLineHeight
105− openedHeight: parent.height + (pinnedMode ? 0 : root.panelHeight)
106− pinnedMode: !fullscreenMode
107− overFlowWidth: search.state=="hidden" ? parent.width : parent.width - search.width
108− }
109
75
110− PanelSeparatorLine {
76+ anchors.fill: parent
111− id: indicatorsSeparatorLine
77+
112− visible: true
78+ Behavior on anchors.topMargin { StandardAnimation {} }
113− anchors {
79+
114− left: indicatorsMenu.left
80+ BorderImage {
115− right: indicatorsMenu.right
81+ id: dropShadow
82+ anchors {
83+ fill: indicators
84+ leftMargin: -units.gu(1)
85+ bottomMargin: -units.gu(1)
86+ }
87+ visible: indicators.height > indicators.panelHeight
88+ source: "graphics/rectangular_dropshadow.sci"
116 }
89 }
117− y: indicatorsMenu.visualBottom
118− }
119
90
120− BorderImage {
91+ VerticalThinDivider {
121− id: dropShadow
92+ id: indicatorDividor
122− anchors {
93+ anchors {
123− top: indicators.top
94+ top: indicators.top
124− bottom: indicatorsSeparatorLine.bottom
95+ bottom: indicators.bottom
125− left: indicators.left
96+ right: indicators.left
126− right: indicators.right
97+
127− margins: -units.gu(1)
98+ topMargin: indicatorArea.anchors.topMargin + indicators.panelHeight
99+ }
100+
101+ width: units.dp(2)
102+ source: "graphics/VerticalDivider.png"
103+ }
104+
105+ Rectangle {
106+ id: indicatorAreaBackground
107+ color: callHint.visible ? "green" : "black"
108+ anchors {
109+ top: parent.top
110+ left: parent.left
111+ right: parent.right
112+ }
113+ height: indicators.panelHeight
114+
115+ Behavior on color { ColorAnimation { duration: UbuntuAnimation.FastDuration } }
116+ }
117+
118+ PanelSeparatorLine {
119+ id: nonIndicatorAreaSeparatorLine
120+ anchors {
121+ top: indicatorAreaBackground.bottom
122+ left: parent.left
123+ right: indicators.left
124+ }
125+ saturation: 1 - indicators.unitProgress
126+ }
127+
128+ MouseArea {
129+ anchors {
130+ top: parent.top
131+ left: parent.left
132+ right: indicators.left
133+ }
134+ height: indicators.panelHeight
135+ enabled: callHint.visible
136+ onClicked: callHint.showLiveCall()
128 }
137 }
129− visible: indicatorsMenu.height > indicatorsMenu.panelHeight
130− source: "graphics/rectangular_dropshadow.sci"
131− }
132
138
133− SearchIndicator {
139+ Indicators {
134− id: search
140+ id: __indicators
135− objectName: "search"
141+ objectName: "indicators"
136− enabled: root.searchVisible
137
142
138− state: {
143+ anchors {
139− if (parent.width < indicatorsMenu.width + width) {
144+ top: parent.top
140− if (indicatorsMenu.state != "initial") {
145+ right: parent.right
141− return "hidden";
146+ }
147+
148+ width: root.width
149+ shown: false
150+ panelHeight: units.gu(3)
151+ openedHeight: root.height
152+ overFlowWidth: {
153+ if (callHint.visible) {
154+ return Math.max(root.width - (callHint.width + units.gu(2)), 0)
142 }
155 }
156+ return root.width
143 }
157 }
144− if (root.searchVisible && !indicatorsMenu.showAll) {
158+
145− return "visible";
159+ enableHint: !callHint.active && !fullscreenMode
160+ showHintBottomMargin: fullscreenMode ? -panelHeight : 0
161+
162+ onShowTapped: {
163+ if (callHint.active) {
164+ callHint.showLiveCall();
165+ }
146 }
166 }
167+ }
147
168
148− return "hidden";
169+ ActiveCallHint {
170+ id: __callHint
171+ anchors {
172+ top: parent.top
173+ left: parent.left
174+ }
175+ height: indicators.panelHeight
176+ visible: active && indicators.state == "initial"
149 }
177 }
150
178
151− height: __panelMinusSeparatorLineHeight
179+ PanelSeparatorLine {
180+ id: indicatorsSeparatorLine
181+ visible: true
152− anchors {
182+ anchors {
153− top: panelBackground.top
183+ top: indicators.bottom
154− left: panelBackground.left
184+ left: indicatorDividor.left
185+ right: indicators.right
186+ }
155 }
187 }
188+ }
156
189
157− onClicked: root.searchClicked()
190+ QtObject {
191+ id: d
192+ readonly property real indicatorHeight: indicators.panelHeight + indicatorsSeparatorLine.height
158 }
193 }
159
194
160 states: [
195 states: [
161 State {
196 State {
162− name: "in" //fully opaque and visible at top edge of screen
197+ name: "onscreen" //fully opaque and visible at top edge of screen
163 when: !fullscreenMode
198 when: !fullscreenMode
164− PropertyChanges { target: panelBackground; y: 0 }
199+ PropertyChanges {
200+ target: indicatorArea;
201+ anchors.topMargin: 0
202+ }
165 },
203 },
166 State {
204 State {
167− name: "out" //pushed off screen
205+ name: "offscreen" //pushed off screen
168 when: fullscreenMode
206 when: fullscreenMode
169− PropertyChanges { target: panelBackground; y: -panelHeight }
207+ PropertyChanges {
208+ target: indicatorArea;
209+ anchors.topMargin: indicators.state === "initial" ? -d.indicatorHeight : 0
210+ }
170 }
211 }
171 ]
212 ]
172}
213}
qml/ScopeTool.qml−1
@@ -73,7 +73,6 @@ Rectangle {
73 id: dashContent
73 id: dashContent
74
74
75 model: filteredScopes
75 model: filteredScopes
76− searchHistory: SearchHistoryModel { }
77 property var scope: scopes.getScope(currentIndex)
76 property var scope: scopes.getScope(currentIndex)
78
77
79 anchors {
78 anchors {
qml/Shell.qml+14−15
@@ -109,7 +109,7 @@ FocusScope {
109 anchors.rightMargin: -parent.anchors.rightMargin
109 anchors.rightMargin: -parent.anchors.rightMargin
110
110
111 // Whether the underlay is fully covered by opaque UI elements.
111 // Whether the underlay is fully covered by opaque UI elements.
112− property bool fullyCovered: panel.indicators.fullyOpened && shell.width <= panel.indicatorsMenuWidth
112+ property bool fullyCovered: panel.indicators.fullyOpened && shell.width <= panel.indicators.width
113
113
114 // Whether the user should see the topmost application surface (if there's one at all).
114 // Whether the user should see the topmost application surface (if there's one at all).
115 readonly property bool applicationSurfaceShouldBeSeen: stages.shown && !stages.painting && !stages.overlayMode
115 readonly property bool applicationSurfaceShouldBeSeen: stages.shown && !stages.painting && !stages.overlayMode
@@ -533,15 +533,16 @@ FocusScope {
533 if (LightDM.Greeter.active && !LightDM.Greeter.promptless)
533 if (LightDM.Greeter.active && !LightDM.Greeter.promptless)
534 return;
534 return;
535
535
536− if (stages.shown && !stages.overlayMode) {
536+ if (stages.shown && !stages.overlayMode && !stages.locked) {
537− if (!stages.locked) {
538− stages.hide();
537+ stages.hide();
539− launcher.hide();
538+ launcher.fadeOut();
540− }
539+ } else {
540+ launcher.switchToNextState("visible");
541 }
541 }
542+
542 if (greeter.shown) {
543 if (greeter.shown) {
543 greeter.hideRight();
544 greeter.hideRight();
544− launcher.hide();
545+ launcher.fadeOut();
545 }
546 }
546 }
547 }
547
548
@@ -558,16 +559,16 @@ FocusScope {
558 id: panel
559 id: panel
559 objectName: "panel"
560 objectName: "panel"
560 anchors.fill: parent //because this draws indicator menus
561 anchors.fill: parent //because this draws indicator menus
561− indicatorsMenuWidth: parent.width > units.gu(60) ? units.gu(40) : parent.width
562 indicators {
562 indicators {
563 hides: [launcher]
563 hides: [launcher]
564 available: edgeDemo.panelEnabled && greeter.fakeActiveForApp === ""
564 available: edgeDemo.panelEnabled && greeter.fakeActiveForApp === ""
565 contentEnabled: edgeDemo.panelContentEnabled
565 contentEnabled: edgeDemo.panelContentEnabled
566+ width: parent.width > units.gu(60) ? units.gu(40) : parent.width
567+ panelHeight: units.gu(3)
566 }
568 }
567 property string focusedAppId: ApplicationManager.focusedApplicationId
569 property string focusedAppId: ApplicationManager.focusedApplicationId
568 property var focusedApplication: ApplicationManager.findApplication(focusedAppId)
570 property var focusedApplication: ApplicationManager.findApplication(focusedAppId)
569 fullscreenMode: (focusedApplication && stages.fullscreen && !LightDM.Greeter.active) || greeter.fakeActiveForApp !== ""
571 fullscreenMode: (focusedApplication && stages.fullscreen && !LightDM.Greeter.active) || greeter.fakeActiveForApp !== ""
570− searchVisible: !LightDM.Greeter.active && dash.shown && dash.searchable
571
572
572 InputFilterArea {
573 InputFilterArea {
573 anchors {
574 anchors {
@@ -642,12 +643,10 @@ FocusScope {
642 model: NotificationBackend.Model
643 model: NotificationBackend.Model
643 margin: units.gu(1)
644 margin: units.gu(1)
644
645
645− anchors {
646+ y: panel.panelHeight
646− top: parent.top
647+ width: parent.width
647− right: parent.right
648− bottom: parent.bottom
649− topMargin: panel.panelHeight
648+ height: parent.height - panel.panelHeight
650− }
649+
651 states: [
650 states: [
652 State {
651 State {
653 name: "narrow"
652 name: "narrow"
run.sh−6
@@ -57,12 +57,6 @@ if $KEYLOCK; then
57 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/builddir/tests/mocks/libusermetrics:$PWD/builddir/tests/mocks/LightDM/single-passphrase
57 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/builddir/tests/mocks/libusermetrics:$PWD/builddir/tests/mocks/LightDM/single-passphrase
58fi
58fi
59
59
60−# Force icon theme if running on the desktop, otherwise gnome theme (if running
61−# on Ubuntu Desktop) will be used and icons won't be found
62−if [ -n "$DESKTOP_SESSION" ]; then
63− export UBUNTU_ICON_THEME=ubuntu-mobile
64−fi
65−
66QML_PHONE_SHELL_ARGS=""
60QML_PHONE_SHELL_ARGS=""
67if $MOUSE_TOUCH; then
61if $MOUSE_TOUCH; then
68 QML_PHONE_SHELL_ARGS="$QML_PHONE_SHELL_ARGS -mousetouch"
62 QML_PHONE_SHELL_ARGS="$QML_PHONE_SHELL_ARGS -mousetouch"
src/CMakeLists.txt+1
@@ -19,6 +19,7 @@ add_executable(${SHELL_APP}
19 ApplicationArguments.h
19 ApplicationArguments.h
20 main.cpp
20 main.cpp
21 MouseTouchAdaptor.cpp
21 MouseTouchAdaptor.cpp
22+ CachingNetworkManagerFactory.cpp
22 ${QML_FILES} # This is to make qml and image files appear in the IDE's project tree
23 ${QML_FILES} # This is to make qml and image files appear in the IDE's project tree
23)
24)
24
25
src/CachingNetworkManagerFactory.cppnew file+62
@@ -0,0 +1,62 @@
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+
18+#include "CachingNetworkManagerFactory.h"
19+
20+#include <QNetworkDiskCache>
21+#include <QNetworkAccessManager>
22+#include <QStandardPaths>
23+#include <QNetworkConfigurationManager>
24+
25+CachingNetworkAccessManager::CachingNetworkAccessManager(QObject *parent)
26+ : QNetworkAccessManager(parent)
27+{
28+ m_networkManager = new QNetworkConfigurationManager(this);
29+
30+ QObject::connect(m_networkManager, &QNetworkConfigurationManager::onlineStateChanged, this, &CachingNetworkAccessManager::onlineStateChanged);
31+ m_isOnline = m_networkManager->isOnline();
32+}
33+
34+void CachingNetworkAccessManager::onlineStateChanged(bool isOnline)
35+{
36+ m_isOnline = isOnline;
37+}
38+
39+QNetworkReply* CachingNetworkAccessManager::createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData)
40+{
41+ if (!m_isOnline) {
42+ QNetworkRequest req(request);
43+ req.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysCache);
44+ return QNetworkAccessManager::createRequest(op, req, outgoingData);
45+ }
46+
47+ return QNetworkAccessManager::createRequest(op, request, outgoingData);
48+}
49+
50+CachingNetworkManagerFactory::CachingNetworkManagerFactory()
51+{
52+}
53+
54+QNetworkAccessManager *CachingNetworkManagerFactory::create(QObject *parent) {
55+ QNetworkAccessManager *manager = new CachingNetworkAccessManager(parent);
56+
57+ QNetworkDiskCache* cache = new QNetworkDiskCache(manager);
58+ cache->setCacheDirectory(QString("%1/network").arg(QStandardPaths::writableLocation(QStandardPaths::CacheLocation)));
59+
60+ manager->setCache(cache);
61+ return manager;
62+}
src/CachingNetworkManagerFactory.hnew file+50
@@ -0,0 +1,50 @@
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+
18+#ifndef CACHINGNETWORKMANAGERFACTORY_H
19+#define CACHINGNETWORKMANAGERFACTORY_H
20+
21+#include <QQmlNetworkAccessManagerFactory>
22+#include <QNetworkAccessManager>
23+
24+class QNetworkConfigurationManager;
25+
26+class CachingNetworkAccessManager : public QNetworkAccessManager
27+{
28+public:
29+ CachingNetworkAccessManager(QObject *parent = 0);
30+
31+protected:
32+ QNetworkReply* createRequest(Operation op, const QNetworkRequest &req, QIODevice *outgoingData = 0) override;
33+
34+private Q_SLOTS:
35+ void onlineStateChanged(bool isOnline);
36+
37+private:
38+ QNetworkConfigurationManager* m_networkManager;
39+ bool m_isOnline;
40+};
41+
42+class CachingNetworkManagerFactory : public QQmlNetworkAccessManagerFactory
43+{
44+public:
45+ CachingNetworkManagerFactory();
46+
47+ QNetworkAccessManager *create(QObject *parent) override;
48+};
49+
50+#endif // CACHINGNETWORKMANAGERFACTORY_H
src/Panel/Indicators/client/indicatorsclient.cpp−1
@@ -32,7 +32,6 @@ IndicatorsClient::IndicatorsClient(int &argc, char **argv)
32 m_view(0)
32 m_view(0)
33{
33{
34 m_application = new QApplication(argc, argv);
34 m_application = new QApplication(argc, argv);
35− resolveIconTheme();
36
35
37 QStringList args = m_application->arguments();
36 QStringList args = m_application->arguments();
38
37
src/main.cpp+5−4
@@ -34,15 +34,15 @@
34#include <paths.h>
34#include <paths.h>
35#include "MouseTouchAdaptor.h"
35#include "MouseTouchAdaptor.h"
36#include "ApplicationArguments.h"
36#include "ApplicationArguments.h"
37+#include "CachingNetworkManagerFactory.h"
37
38
38#include <unity-mir/qmirserver.h>
39#include <unity-mir/qmirserver.h>
39
40
40−
41int startShell(int argc, const char** argv, void* server)
41int startShell(int argc, const char** argv, void* server)
42{
42{
43 const bool isUbuntuMirServer = qgetenv("QT_QPA_PLATFORM") == "ubuntumirserver";
43 const bool isUbuntuMirServer = qgetenv("QT_QPA_PLATFORM") == "ubuntumirserver";
44
44
45− QGuiApplication::setApplicationName("Unity 8");
45+ QGuiApplication::setApplicationName("unity8");
46 QGuiApplication *application;
46 QGuiApplication *application;
47
47
48 QCommandLineParser parser;
48 QCommandLineParser parser;
@@ -96,8 +96,6 @@ Load the testability driver");
96 indicatorProfile = "phone";
96 indicatorProfile = "phone";
97 }
97 }
98
98
99− resolveIconTheme();
100−
101 ApplicationArguments qmlArgs;
99 ApplicationArguments qmlArgs;
102 if (parser.isSet(windowGeometryOption) &&
100 if (parser.isSet(windowGeometryOption) &&
103 parser.value(windowGeometryOption).split('x').size() == 2)
101 parser.value(windowGeometryOption).split('x').size() == 2)
@@ -159,6 +157,9 @@ Load the testability driver");
159 }
157 }
160 appendImportPaths(view->engine(), ::fallbackImportPaths());
158 appendImportPaths(view->engine(), ::fallbackImportPaths());
161
159
160+ CachingNetworkManagerFactory *managerFactory = new CachingNetworkManagerFactory();
161+ view->engine()->setNetworkAccessManagerFactory(managerFactory);
162+
162 view->setSource(source);
163 view->setSource(source);
163 view->setColor("transparent");
164 view->setColor("transparent");
164 QObject::connect(view->engine(), SIGNAL(quit()), application, SLOT(quit()));
165 QObject::connect(view->engine(), SIGNAL(quit()), application, SLOT(quit()));
tests/autopilot/unity8/process_helpers.py+4−3
@@ -75,7 +75,7 @@ def unlock_unity(unity_proxy_obj=None):
75 main_window_emulator.QQuickView)
75 main_window_emulator.QQuickView)
76
76
77 greeter = main_window.get_greeter()
77 greeter = main_window.get_greeter()
78− if greeter.created == False:
78+ if greeter.created is False:
79 raise RuntimeWarning("Greeter appears to be already unlocked.")
79 raise RuntimeWarning("Greeter appears to be already unlocked.")
80
80
81 # Because of potential input jerkiness under heavy load,
81 # Because of potential input jerkiness under heavy load,
@@ -98,7 +98,8 @@ def unlock_unity(unity_proxy_obj=None):
98
98
99def lock_unity(unity_proxy_obj=None):
99def lock_unity(unity_proxy_obj=None):
100 """Helper function that attempts to lock the unity greeter."""
100 """Helper function that attempts to lock the unity greeter."""
101− import evdev, time
101+ import evdev
102+ import time
102 uinput = evdev.UInput(name='unity8-autopilot-power-button',
103 uinput = evdev.UInput(name='unity8-autopilot-power-button',
103 devnode='/dev/autopilot-uinput')
104 devnode='/dev/autopilot-uinput')
104 # One press and release to turn screen off (locking unity)
105 # One press and release to turn screen off (locking unity)
@@ -172,7 +173,7 @@ def _get_unity_status():
172
173
173def _get_unity_pid():
174def _get_unity_pid():
174 status = _get_unity_status()
175 status = _get_unity_status()
175− if not "start/" in status:
176+ if "start/" not in status:
176 raise CannotAccessUnity("Unity is not in the running state.")
177 raise CannotAccessUnity("Unity is not in the running state.")
177 return int(status.split()[-1])
178 return int(status.split()[-1])
178
179
tests/autopilot/unity8/shell/emulators/dash.py+29−26
@@ -108,44 +108,47 @@ class Dash(emulators.UnityEmulatorBase):
108 @autopilot_logging.log_action(logger.info)
108 @autopilot_logging.log_action(logger.info)
109 def _scroll_to_left_scope(self):
109 def _scroll_to_left_scope(self):
110 original_index = self.dash_content_list.currentIndex
110 original_index = self.dash_content_list.currentIndex
111− # Scroll on the border of the page header, because some scopes have
111+ dashContent = self.select_single(objectName="dashContent")
112− # contents that can be scrolled horizontally.
113− page_header = self._get_page_header()
114− border = page_header.select_single('QQuickBorderImage')
115− start_x = border.width / 3
112+ start_x = dashContent.width / 3
116− stop_x = border.width / 3 * 2
113+ stop_x = dashContent.width / 3 * 2
117− start_y = stop_y = border.globalRect.y + border.height / 2
114+ start_y = stop_y = dashContent.globalRect.y + 1
118 self.pointing_device.drag(start_x, start_y, stop_x, stop_y)
115 self.pointing_device.drag(start_x, start_y, stop_x, stop_y)
119 self.dash_content_list.currentIndex.wait_for(original_index - 1)
116 self.dash_content_list.currentIndex.wait_for(original_index - 1)
120
117
121− def _get_page_header(self):
122− return self.select_single('PageHeader', objectName='pageHeader')
123−
124 @autopilot_logging.log_action(logger.info)
118 @autopilot_logging.log_action(logger.info)
125 def _scroll_to_right_scope(self):
119 def _scroll_to_right_scope(self):
126 original_index = self.dash_content_list.currentIndex
120 original_index = self.dash_content_list.currentIndex
127− # Scroll on the border of the page header, because some scopes have
121+ dashContent = self.select_single(objectName="dashContent")
128− # contents that can be scrolled horizontally.
129− page_header = self._get_page_header()
130− border = page_header.select_single('QQuickBorderImage')
131− start_x = border.width / 3 * 2
122+ start_x = dashContent.width / 3 * 2
132− stop_x = border.width / 3
123+ stop_x = dashContent.width / 3
133− start_y = stop_y = border.globalRect.y + border.height / 2
124+ start_y = stop_y = dashContent.globalRect.y + 1
134 self.pointing_device.drag(start_x, start_y, stop_x, stop_y)
125 self.pointing_device.drag(start_x, start_y, stop_x, stop_y)
135 self.dash_content_list.currentIndex.wait_for(original_index + 1)
126 self.dash_content_list.currentIndex.wait_for(original_index + 1)
136
127
137 def enter_search_query(self, query):
128 def enter_search_query(self, query):
129+ current_header = self._get_current_page_header()
130+ self.pointing_device.move(current_header.globalRect.x +
131+ current_header.width - current_header.height / 2,
132+ current_header.globalRect.y +
133+ current_header.height / 2)
134+ self.pointing_device.click()
135+ headerContainer = current_header.select_single(objectName="headerContainer")
136+ headerContainer.contentY.wait_for(0)
138 search_text_field = self._get_search_text_field()
137 search_text_field = self._get_search_text_field()
139 search_text_field.write(query)
138 search_text_field.write(query)
140− search_text_field.state.wait_for('idle')
139+ current_header.select_single(objectName="searchIndicator").running.wait_for(False)
141
140
142 def _get_search_text_field(self):
141 def _get_search_text_field(self):
143− page_header = self._get_page_header()
142+ page_header = self._get_current_page_header()
144− search_container = page_header.select_single(
143+ return page_header.select_single(objectName='searchTextField')
145− 'QQuickItem', objectName='searchContainer')
144+
146− search_container.state.wait_for(
145+ def _get_current_page_header(self):
147− MatchesAny(Equals('narrowActive'), Equals('active')))
146+ dashContentList = self.select_single(objectName="dashContentList")
148− return search_container.select_single(toolkit_emulators.TextField)
147+ all_headers = dashContentList.select_many("QQuickLoader")
148+ for i in all_headers:
149+ if i.isCurrent:
150+ return i.select_single(objectName="scopePageHeader")
151+ return None
149
152
150
153
151class GenericScopeView(emulators.UnityEmulatorBase):
154class GenericScopeView(emulators.UnityEmulatorBase):
@@ -166,8 +169,8 @@ class GenericScopeView(emulators.UnityEmulatorBase):
166 # Some categories do not show previews, like recent apps.
169 # Some categories do not show previews, like recent apps.
167 # --elopio - 2014-1-14
170 # --elopio - 2014-1-14
168 self.pointing_device.click_object(icon)
171 self.pointing_device.click_object(icon)
169− preview_list = self.get_root_instance().wait_select_single(
172+ preview_list = self.wait_select_single(
170− 'PreviewListView', objectName='dashContentPreviewList')
173+ 'PreviewListView', objectName='previewListView')
171 preview_list.x.wait_for(0)
174 preview_list.x.wait_for(0)
172 return preview_list.select_single(
175 return preview_list.select_single(
173 Preview, objectName='preview{}'.format(preview_list.currentIndex))
176 Preview, objectName='preview{}'.format(preview_list.currentIndex))
tests/autopilot/unity8/shell/emulators/main_window.py−5
@@ -133,9 +133,4 @@ class QQuickView(emulators.UnityEmulatorBase):
133
133
134 @autopilot_logging.log_action(logger.info)
134 @autopilot_logging.log_action(logger.info)
135 def search(self, query):
135 def search(self, query):
136− search_indicator = self._get_search_indicator()
137− self.pointing_device.click_object(search_indicator)
138 self.get_dash().enter_search_query(query)
136 self.get_dash().enter_search_query(query)
139−
140− def _get_search_indicator(self):
141− return self.select_single('SearchIndicator', objectName='search')
tests/autopilot/unity8/shell/tests/__init__.py+1−2
@@ -142,12 +142,11 @@ class UnityTestCase(AutopilotTestCase):
142 self._data_dirs_mock_enabled = True
142 self._data_dirs_mock_enabled = True
143 self._environment = {}
143 self._environment = {}
144
144
145− #### FIXME: This is a work around re: lp:1238417 ####
145+ # FIXME: This is a work around re: lp:1238417
146 if model() != "Desktop":
146 if model() != "Desktop":
147 from autopilot.input import _uinput
147 from autopilot.input import _uinput
148 _uinput._touch_device = _uinput.create_touch_device()
148 _uinput._touch_device = _uinput.create_touch_device()
149 self.addCleanup(_uinput._touch_device.close)
149 self.addCleanup(_uinput._touch_device.close)
150− ####
151
150
152 self.touch = Touch.create()
151 self.touch = Touch.create()
153 self._setup_display_details()
152 self._setup_display_details()
tests/autopilot/unity8/shell/tests/disabled_test_hud.py+44−13
@@ -20,12 +20,13 @@
20from __future__ import absolute_import
20from __future__ import absolute_import
21
21
22from unity8.process_helpers import unlock_unity
22from unity8.process_helpers import unlock_unity
23−from unity8.shell import with_lightdm_mock, DragMixin
23+from unity8.shell import DragMixin
24from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
24from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
25
25
26from testtools.matchers import Equals
26from testtools.matchers import Equals
27from autopilot.matchers import Eventually
27from autopilot.matchers import Eventually
28
28
29+
29class TestHud(UnityTestCase, DragMixin):
30class TestHud(UnityTestCase, DragMixin):
30
31
31 """Tests the Shell HUD."""
32 """Tests the Shell HUD."""
@@ -33,10 +34,14 @@ class TestHud(UnityTestCase, DragMixin):
33 scenarios = _get_device_emulation_scenarios()
34 scenarios = _get_device_emulation_scenarios()
34
35
35 def test_show_hud_button_appears(self):
36 def test_show_hud_button_appears(self):
36− """Swiping up while an app is active must show the 'show hud' button, following some behaviours.
37+ """Swiping up while an app is active must show the 'show hud' button.
38+
39+ It should follow some behaviours.
37 The button must disappear not opening the HUD when releasing the
40 The button must disappear not opening the HUD when releasing the
38− mouse again somewhere on the screen except on the button itself following a timeout.
41+ mouse again somewhere on the screen except on the button itself
42+ following a timeout.
39− The button must disappear when touching somewhere on the screen except the button itself.
43+ The button must disappear when touching somewhere on the screen
44+ except the button itself.
40
45
41 """
46 """
42 unity_proxy = self.launch_unity()
47 unity_proxy = self.launch_unity()
@@ -55,29 +60,47 @@ class TestHud(UnityTestCase, DragMixin):
55
60
56 self.touch.press(swipe_coords.start_x, swipe_coords.start_y)
61 self.touch.press(swipe_coords.start_x, swipe_coords.start_y)
57 self.addCleanup(self._maybe_release_finger)
62 self.addCleanup(self._maybe_release_finger)
63+ self._drag(
64+ swipe_coords.start_x,
65+ swipe_coords.start_y,
66+ swipe_coords.start_x,
58− self._drag(swipe_coords.start_x, swipe_coords.start_y, swipe_coords.start_x, swipe_coords.start_y - int(edge_drag_area.distanceThreshold) - 5)
67+ swipe_coords.start_y - int(edge_drag_area.distanceThreshold) - 5)
59 self.assertThat(hud_show_button.opacity, Eventually(Equals(0.5)))
68 self.assertThat(hud_show_button.opacity, Eventually(Equals(0.5)))
69+ self.assertThat(
70+ hud_show_button.bottomMargin,
60− self.assertThat(hud_show_button.bottomMargin, Eventually(Equals(initialBottomMargin)))
71+ Eventually(Equals(initialBottomMargin)))
72+ self._drag(
73+ swipe_coords.start_x,
61− self._drag(swipe_coords.start_x, swipe_coords.start_y - int(edge_drag_area.distanceThreshold) - 5, swipe_coords.end_x, swipe_coords.start_y - int(edge_drag_area.distanceThreshold) - int(edge_drag_area.commitDistance) - 5)
74+ swipe_coords.start_y - int(edge_drag_area.distanceThreshold) - 5,
75+ swipe_coords.end_x,
76+ swipe_coords.start_y - int(edge_drag_area.distanceThreshold) -
77+ int(edge_drag_area.commitDistance) - 5)
62 self.assertThat(hud_show_button.opacity, Eventually(Equals(1.0)))
78 self.assertThat(hud_show_button.opacity, Eventually(Equals(1.0)))
63 self.assertThat(hud_show_button.bottomMargin, Eventually(Equals(0.0)))
79 self.assertThat(hud_show_button.bottomMargin, Eventually(Equals(0.0)))
64− self.touch.release();
80+ self.touch.release()
65 self.assertThat(hud.shown, Equals(False))
81 self.assertThat(hud.shown, Equals(False))
66 self.assertThat(hud_show_button.opacity, Eventually(Equals(0.0)))
82 self.assertThat(hud_show_button.opacity, Eventually(Equals(0.0)))
67
83
68 self.touch.press(swipe_coords.start_x, swipe_coords.start_y)
84 self.touch.press(swipe_coords.start_x, swipe_coords.start_y)
85+ self._drag(
86+ swipe_coords.start_x,
87+ swipe_coords.start_y,
88+ swipe_coords.start_x,
69− self._drag(swipe_coords.start_x, swipe_coords.start_y, swipe_coords.start_x, swipe_coords.end_y - int(hud_show_button.height))
89+ swipe_coords.end_y - int(hud_show_button.height))
70 self.assertThat(hud.shown, Equals(False))
90 self.assertThat(hud.shown, Equals(False))
71 self.assertThat(hud_show_button.opacity, Eventually(Equals(1.0)))
91 self.assertThat(hud_show_button.opacity, Eventually(Equals(1.0)))
72 self.touch.release()
92 self.touch.release()
73 self.assertThat(hud_show_button.opacity, Eventually(Equals(1.0)))
93 self.assertThat(hud_show_button.opacity, Eventually(Equals(1.0)))
94+ self.touch.tap(
95+ swipe_coords.end_x,
74− self.touch.tap(swipe_coords.end_x, swipe_coords.end_y - int(hud_show_button.height))
96+ swipe_coords.end_y - int(hud_show_button.height))
75 self.assertThat(hud.shown, Equals(False))
97 self.assertThat(hud.shown, Equals(False))
76 self.assertThat(hud_show_button.opacity, Eventually(Equals(0.0)))
98 self.assertThat(hud_show_button.opacity, Eventually(Equals(0.0)))
77
99
78 def test_show_hud_appears(self):
100 def test_show_hud_appears(self):
79 """Releasing the touch on the 'show hud' button must display the hud.
101 """Releasing the touch on the 'show hud' button must display the hud.
80− Test that the hud button stays on screen and tapping it opens the hud.
102+ Test that the hud button stays on screen and tapping it opens the
103+ hud.
81
104
82 """
105 """
83 unity_proxy = self.launch_unity()
106 unity_proxy = self.launch_unity()
@@ -94,7 +117,11 @@ class TestHud(UnityTestCase, DragMixin):
94
117
95 self.touch.press(swipe_coords.start_x, swipe_coords.start_y)
118 self.touch.press(swipe_coords.start_x, swipe_coords.start_y)
96 self.addCleanup(self._maybe_release_finger)
119 self.addCleanup(self._maybe_release_finger)
97− self._drag(swipe_coords.start_x, swipe_coords.start_y, swipe_coords.start_x, swipe_coords.end_y)
120+ self._drag(
121+ swipe_coords.start_x,
122+ swipe_coords.start_y,
123+ swipe_coords.start_x,
124+ swipe_coords.end_y)
98 self.assertThat(hud.shown, Eventually(Equals(False)))
125 self.assertThat(hud.shown, Eventually(Equals(False)))
99 self.assertThat(hud_show_button.opacity, Eventually(Equals(1.0)))
126 self.assertThat(hud_show_button.opacity, Eventually(Equals(1.0)))
100 self.touch.release()
127 self.touch.release()
@@ -105,7 +132,11 @@ class TestHud(UnityTestCase, DragMixin):
105 self.assertThat(hud.shown, Eventually(Equals(False)))
132 self.assertThat(hud.shown, Eventually(Equals(False)))
106
133
107 self.touch.press(swipe_coords.start_x, swipe_coords.start_y)
134 self.touch.press(swipe_coords.start_x, swipe_coords.start_y)
135+ self._drag(
136+ swipe_coords.start_x,
137+ swipe_coords.start_y,
138+ swipe_coords.start_x,
108− self._drag(swipe_coords.start_x, swipe_coords.start_y, swipe_coords.start_x, swipe_coords.end_y - int(hud_show_button.height))
139+ swipe_coords.end_y - int(hud_show_button.height))
109 self.assertThat(hud.shown, Equals(False))
140 self.assertThat(hud.shown, Equals(False))
110 self.assertThat(hud_show_button.opacity, Eventually(Equals(1.0)))
141 self.assertThat(hud_show_button.opacity, Eventually(Equals(1.0)))
111 self.touch.release()
142 self.touch.release()
tests/autopilot/unity8/shell/tests/test_emulators.py−3
@@ -32,8 +32,6 @@ try:
32except ImportError:
32except ImportError:
33 import mock
33 import mock
34
34
35−from testtools.matchers import Contains, HasLength
36−
37from unity8 import process_helpers
35from unity8 import process_helpers
38from unity8.shell import emulators, fixture_setup, tests
36from unity8.shell import emulators, fixture_setup, tests
39from unity8.shell.emulators import dash as dash_emulators
37from unity8.shell.emulators import dash as dash_emulators
@@ -52,7 +50,6 @@ class MainWindowTestCase(tests.UnityTestCase):
52 self.main_window.search('Test')
50 self.main_window.search('Test')
53 text_field = self.main_window.get_dash()._get_search_text_field()
51 text_field = self.main_window.get_dash()._get_search_text_field()
54 self.assertEqual(text_field.text, 'Test')
52 self.assertEqual(text_field.text, 'Test')
55− self.assertEqual(text_field.state, 'idle')
56
53
57
54
58class DashBaseTestCase(tests.UnityTestCase):
55class DashBaseTestCase(tests.UnityTestCase):
tests/autopilot/unity8/shell/tests/test_lock_screen.py+4−5
@@ -1,7 +1,7 @@
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2#
2#
3# Unity Autopilot Test Suite
3# Unity Autopilot Test Suite
4−# Copyright (C) 2012-2013 Canonical
4+# Copyright (C) 2012, 2013, 2014 Canonical
5#
5#
6# This program is free software: you can redistribute it and/or modify
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU General Public License as published by
7# it under the terms of the GNU General Public License as published by
@@ -25,9 +25,7 @@ from unity8.shell import with_lightdm_mock
25from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
25from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
26
26
27from autopilot.matchers import Eventually
27from autopilot.matchers import Eventually
28−from autopilot.platform import model
29import sys
28import sys
30−from testtools import skipUnless
31from testtools.matchers import Equals
29from testtools.matchers import Equals
32import logging
30import logging
33
31
@@ -133,7 +131,7 @@ class TestLockscreen(UnityTestCase):
133 if not isinstance(code, basestring):
131 if not isinstance(code, basestring):
134 raise TypeError(
132 raise TypeError(
135 "'code' parameter must be a string, not %r."
133 "'code' parameter must be a string, not %r."
136− % type(passphrase)
134+ % type(code)
137 )
135 )
138 for num in code:
136 for num in code:
139 if not num.isdigit():
137 if not num.isdigit():
@@ -190,7 +188,8 @@ class TestLockscreen(UnityTestCase):
190 current_text = prompt.text
188 current_text = prompt.text
191 self.keyboard.type(character)
189 self.keyboard.type(character)
192 try:
190 try:
191+ self.assertThat(
193− self.assertThat(prompt.text, Eventually(Equals(current_text + character)))
192+ prompt.text, Eventually(Equals(current_text + character)))
194 except AssertionError:
193 except AssertionError:
195 if retries > 0:
194 if retries > 0:
196 self._type_character(character, prompt, retries-1)
195 self._type_character(character, prompt, retries-1)
tests/autopilot/unity8/shell/tests/test_notifications.py+15−10
@@ -211,8 +211,8 @@ class InteractiveNotificationBase(NotificationsBase):
211 self.touch.tap_object(notification.select_single(objectName="button4"))
211 self.touch.tap_object(notification.select_single(objectName="button4"))
212 self.assert_notification_action_id_was_called("action_decline_4")
212 self.assert_notification_action_id_was_called("action_decline_4")
213
213
214− def test_modal_sd_without_greeter (self):
214+ def test_modal_sd_without_greeter(self):
215− """A snap-decision on a phone should block input to shell beneath it when there's no greeter."""
215+ """Snap-decision should block input to shell without greeter."""
216 unity_proxy = self.launch_unity()
216 unity_proxy = self.launch_unity()
217 unlock_unity(unity_proxy)
217 unlock_unity(unity_proxy)
218
218
@@ -238,7 +238,8 @@ class InteractiveNotificationBase(NotificationsBase):
238 hints
238 hints
239 )
239 )
240
240
241− # verify that we cannot reveal the launcher (no longer interact with the shell)
241+ # verify that we cannot reveal the launcher (no longer interact with
242+ # the shell)
242 time.sleep(1)
243 time.sleep(1)
243 self.main_window.show_dash_swiping()
244 self.main_window.show_dash_swiping()
244 launcher = self.main_window.get_launcher()
245 launcher = self.main_window.get_launcher()
@@ -249,13 +250,14 @@ class InteractiveNotificationBase(NotificationsBase):
249 get_notification = lambda: notify_list.wait_select_single(
250 get_notification = lambda: notify_list.wait_select_single(
250 'Notification', objectName='notification1')
251 'Notification', objectName='notification1')
251 notification = get_notification()
252 notification = get_notification()
253+ self._assert_notification(
252− self._assert_notification(notification, summary, body, True, False, 1.0)
254+ notification, summary, body, True, False, 1.0)
253 self.touch.tap_object(notification.select_single(objectName="button0"))
255 self.touch.tap_object(notification.select_single(objectName="button0"))
254 self.assert_notification_action_id_was_called("action_accept")
256 self.assert_notification_action_id_was_called("action_accept")
255
257
256− def test_modal_sd_with_greeter (self):
258+ def test_modal_sd_with_greeter(self):
257− """A snap-decision on a phone should not block input to the greeter beneath it."""
259+ """A snap-decision should not block input to the greeter beneath it."""
258− unity_proxy = self.launch_unity()
260+ self.launch_unity()
259
261
260 summary = "Incoming file"
262 summary = "Incoming file"
261 body = "Frank would like to send you the file: essay.pdf"
263 body = "Frank would like to send you the file: essay.pdf"
@@ -290,7 +292,8 @@ class InteractiveNotificationBase(NotificationsBase):
290 get_notification = lambda: notify_list.wait_select_single(
292 get_notification = lambda: notify_list.wait_select_single(
291 'Notification', objectName='notification1')
293 'Notification', objectName='notification1')
292 notification = get_notification()
294 notification = get_notification()
295+ self._assert_notification(
293− self._assert_notification(notification, summary, body, True, False, 1.0)
296+ notification, summary, body, True, False, 1.0)
294 self.touch.tap_object(notification.select_single(objectName="button0"))
297 self.touch.tap_object(notification.select_single(objectName="button0"))
295 self.assert_notification_action_id_was_called("action_accept")
298 self.assert_notification_action_id_was_called("action_accept")
296
299
@@ -663,7 +666,8 @@ class EphemeralNotificationsTests(NotificationsBase):
663 icon_path = self._get_icon_path('avatars/amanda.png')
666 icon_path = self._get_icon_path('avatars/amanda.png')
664 notification.update(summary, body, icon_path)
667 notification.update(summary, body, icon_path)
665 notification.show()
668 notification.show()
669+ self._assert_notification(
666− self._assert_notification(get_notification(), summary, body, True, False, 1.0)
670+ get_notification(), summary, body, True, False, 1.0)
667
671
668 def test_update_notification_layout_change(self):
672 def test_update_notification_layout_change(self):
669 """Notification must allow updating its contents and layout while
673 """Notification must allow updating its contents and layout while
@@ -710,7 +714,8 @@ class EphemeralNotificationsTests(NotificationsBase):
710 notification.show()
714 notification.show()
711
715
712 self.assertThat(get_notification, Eventually(NotEquals(None)))
716 self.assertThat(get_notification, Eventually(NotEquals(None)))
717+ self._assert_notification(
713− self._assert_notification(get_notification(), summary, body, False, False, 1.0)
718+ get_notification(), summary, body, False, False, 1.0)
714
719
715 def test_append_hint(self):
720 def test_append_hint(self):
716 """Notification has to accumulate body-text using append-hint."""
721 """Notification has to accumulate body-text using append-hint."""
tests/autopilot/unity8/shell/tests/test_system_integration.py+10−5
@@ -23,19 +23,24 @@ import subprocess
23import unittest
23import unittest
24
24
25from autopilot import platform
25from autopilot import platform
26−from unity8.shell.emulators import UnityEmulatorBase
27from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
26from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
28
27
29−from testtools.matchers._basic import Equals
30
28
31class SystemIntegrationTests(UnityTestCase):
29class SystemIntegrationTests(UnityTestCase):
32
30
33 scenarios = _get_device_emulation_scenarios()
31 scenarios = _get_device_emulation_scenarios()
34
32
33+ @unittest.skipIf(
34+ platform.model() == "Desktop",
35− @unittest.skipIf(platform.model() == "Desktop", "Test is broken on otto, see bug 1281634.")
35+ "Test is broken on otto, see bug 1281634.")
36 def test_networkmanager_integration(self):
36 def test_networkmanager_integration(self):
37 self.launch_unity()
37 self.launch_unity()
38
38
39 # invoke policykit to check permissions
39 # invoke policykit to check permissions
40+ pid = subprocess.check_output(
40− pid = subprocess.check_output(["pidof", "-s", "unity8"], universal_newlines=True)
41+ ["pidof", "-s", "unity8"], universal_newlines=True)
42+ subprocess.check_call(
43+ "pkcheck --action-id "
41− subprocess.check_call("pkcheck --action-id org.freedesktop.NetworkManager.enable-disable-network --process " + pid, shell=True)
44+ "org.freedesktop.NetworkManager.enable-disable-network "
45+ "--process " + pid,
46+ shell=True)
tests/autopilot/unity8/shell/tests/test_upstart.py+20−11
@@ -1,7 +1,7 @@
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2#
2#
3# Unity Autopilot Test Suite
3# Unity Autopilot Test Suite
4−# Copyright (C) 2013 Canonical
4+# Copyright (C) 2013, 2014 Canonical
5#
5#
6# This program is free software: you can redistribute it and/or modify
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU General Public License as published by
7# it under the terms of the GNU General Public License as published by
@@ -42,19 +42,24 @@ import sys
42if sys.version_info < (3,):
42if sys.version_info < (3,):
43 range = xrange
43 range = xrange
44
44
45+
45class UpstartIntegrationTests(UnityTestCase):
46class UpstartIntegrationTests(UnityTestCase):
46
47
47 scenarios = _get_device_emulation_scenarios()
48 scenarios = _get_device_emulation_scenarios()
48
49
49 def _get_status(self):
50 def _get_status(self):
51+ pid, status = os.waitpid(
50− pid, status = os.waitpid(self.process.pid, os.WUNTRACED | os.WCONTINUED | os.WNOHANG)
52+ self.process.pid, os.WUNTRACED | os.WCONTINUED | os.WNOHANG)
53+ logger.debug(
51− logger.debug("Got status: {0}; stopped: {1}; continued: {2}"\
54+ "Got status: {0}; stopped: {1}; continued: {2}".format(
52− .format(status, os.WIFSTOPPED(status), os.WIFCONTINUED(status)))
55+ status, os.WIFSTOPPED(status), os.WIFCONTINUED(status)))
53 return status
56 return status
54
57
55 def _launch_unity(self):
58 def _launch_unity(self):
56 self.patch_environment("QT_LOAD_TESTABILITY", "1")
59 self.patch_environment("QT_LOAD_TESTABILITY", "1")
60+ self.process = subprocess.Popen(
57− self.process = subprocess.Popen([get_binary_path()] + self.unity_geometry_args)
61+ [get_binary_path()] + self.unity_geometry_args)
62+
58 def ensure_stopped():
63 def ensure_stopped():
59 self.process.terminate()
64 self.process.terminate()
60 for i in range(10):
65 for i in range(10):
@@ -76,10 +81,10 @@ class UpstartIntegrationTests(UnityTestCase):
76 self.addCleanup(ensure_stopped)
81 self.addCleanup(ensure_stopped)
77
82
78 def _set_proxy(self):
83 def _set_proxy(self):
79− super(UpstartIntegrationTests, self)._set_proxy(get_proxy_object_for_existing_process(
84+ super(UpstartIntegrationTests, self)._set_proxy(
85+ get_proxy_object_for_existing_process(
80− pid=self.process.pid,
86+ pid=self.process.pid,
81− emulator_base=UnityEmulatorBase,
87+ emulator_base=UnityEmulatorBase,))
82− ))
83
88
84 def test_no_sigstop(self):
89 def test_no_sigstop(self):
85 self.patch_environment("UNITY_MIR_EMITS_SIGSTOP", "")
90 self.patch_environment("UNITY_MIR_EMITS_SIGSTOP", "")
@@ -93,10 +98,14 @@ class UpstartIntegrationTests(UnityTestCase):
93 def test_expect_sigstop(self):
98 def test_expect_sigstop(self):
94 self.patch_environment("UNITY_MIR_EMITS_SIGSTOP", "1")
99 self.patch_environment("UNITY_MIR_EMITS_SIGSTOP", "1")
95 self._launch_unity()
100 self._launch_unity()
101+ self.assertThat(
102+ lambda: os.WIFSTOPPED(self._get_status()),
96− self.assertThat(lambda: os.WIFSTOPPED(self._get_status()), Eventually(Equals(True)), "Unity8 should raise SIGSTOP when ready")
103+ Eventually(Equals(True)), "Unity8 should raise SIGSTOP when ready")
97
104
98 self.process.send_signal(signal.SIGCONT)
105 self.process.send_signal(signal.SIGCONT)
106+ self.assertThat(
107+ lambda: os.WIFCONTINUED(self._get_status()),
99− self.assertThat(lambda: os.WIFCONTINUED(self._get_status()), Eventually(Equals(True)), "Unity8 should have resumed")
108+ Eventually(Equals(True)), "Unity8 should have resumed")
100
109
101 logger.debug("Unity started, waiting for it to be ready.")
110 logger.debug("Unity started, waiting for it to be ready.")
102 self._set_proxy()
111 self._set_proxy()
tests/mocks/AccountsService/AccountsService.qmltypesnew file+22
@@ -0,0 +1,22 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable AccountsService 0.1 tests/mocks'
8+
9+Module {
10+ Component {
11+ name: "AccountsService"
12+ prototype: "QObject"
13+ exports: ["AccountsService/AccountsService 0.1"]
14+ isCreatable: false
15+ isSingleton: true
16+ exportMetaObjectRevisions: [0]
17+ Property { name: "user"; type: "string" }
18+ Property { name: "demoEdges"; type: "bool" }
19+ Property { name: "backgroundFile"; type: "string" }
20+ Property { name: "statsWelcomeScreen"; type: "bool" }
21+ }
22+}
tests/mocks/GSettings.1.0/GSettings.qmltypesnew file+42
@@ -0,0 +1,42 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable GSettings 1.0 tests/mocks'
8+
9+Module {
10+ Component {
11+ name: "GSettingsControllerQml"
12+ prototype: "QObject"
13+ exports: ["GSettings/GSettingsController 1.0"]
14+ isCreatable: false
15+ isSingleton: true
16+ exportMetaObjectRevisions: [0]
17+ Method {
18+ name: "setPictureUri"
19+ Parameter { name: "str"; type: "string" }
20+ }
21+ }
22+ Component {
23+ name: "GSettingsQml"
24+ prototype: "QObject"
25+ exports: ["GSettings/GSettings 1.0"]
26+ exportMetaObjectRevisions: [0]
27+ Property { name: "schema"; type: "GSettingsSchemaQml"; isReadonly: true; isPointer: true }
28+ Property { name: "pictureUri"; type: "string" }
29+ Signal {
30+ name: "pictureUriChanged"
31+ Parameter { type: "string" }
32+ }
33+ }
34+ Component {
35+ name: "GSettingsSchemaQml"
36+ prototype: "QObject"
37+ exports: ["GSettings/GSettingsSchema 1.0"]
38+ isCreatable: false
39+ exportMetaObjectRevisions: [0]
40+ Property { name: "id"; type: "QByteArray" }
41+ }
42+}
tests/mocks/HudClient/HudClient.qmltypesnew file+113
@@ -0,0 +1,113 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable HudClient 0.1 tests/mocks'
8+
9+Module {
10+ Component {
11+ name: "DeeListModel"
12+ prototype: "QAbstractListModel"
13+ Property { name: "name"; type: "string" }
14+ Property { name: "synchronized"; type: "bool"; isReadonly: true }
15+ Property { name: "count"; type: "int"; isReadonly: true }
16+ Signal {
17+ name: "nameChanged"
18+ Parameter { type: "string" }
19+ }
20+ Signal {
21+ name: "synchronizedChanged"
22+ Parameter { type: "bool" }
23+ }
24+ Signal {
25+ name: "roleNamesChanged"
26+ Parameter { type: "QHash<int,QByteArray>" }
27+ }
28+ Method {
29+ name: "get"
30+ type: "QVariantMap"
31+ Parameter { name: "row"; type: "int" }
32+ }
33+ Method { name: "count"; type: "int" }
34+ }
35+ Component {
36+ name: "HudClient"
37+ prototype: "QObject"
38+ exports: ["HudClient/HudClient 0.1"]
39+ exportMetaObjectRevisions: [0]
40+ Property { name: "results"; type: "DeeListModel"; isReadonly: true; isPointer: true }
41+ Property { name: "toolBarModel"; type: "QAbstractItemModel"; isReadonly: true; isPointer: true }
42+ Signal { name: "voiceQueryLoading" }
43+ Signal { name: "voiceQueryListening" }
44+ Signal { name: "voiceQueryHeardSomething" }
45+ Signal { name: "voiceQueryFailed" }
46+ Signal {
47+ name: "voiceQueryFinished"
48+ Parameter { name: "query"; type: "string" }
49+ }
50+ Signal { name: "commandExecuted" }
51+ Signal {
52+ name: "showParametrizedAction"
53+ Parameter { name: "action"; type: "string" }
54+ Parameter { name: "items"; type: "QVariant" }
55+ }
56+ Method {
57+ name: "executeCommand"
58+ Parameter { name: "index"; type: "int" }
59+ }
60+ Method {
61+ name: "setQuery"
62+ Parameter { name: "new_query"; type: "string" }
63+ }
64+ Method { name: "startVoiceQuery" }
65+ Method {
66+ name: "executeParametrizedAction"
67+ Parameter { name: "values"; type: "QVariant" }
68+ }
69+ Method {
70+ name: "updateParametrizedAction"
71+ Parameter { name: "values"; type: "QVariant" }
72+ }
73+ Method { name: "cancelParametrizedAction" }
74+ Method {
75+ name: "executeToolBarAction"
76+ Parameter { name: "action"; type: "HudClientQueryToolbarItems" }
77+ }
78+ }
79+ Component {
80+ name: "HudClientStub"
81+ prototype: "QObject"
82+ exports: ["HudClient/HudClientStub 0.1"]
83+ exportMetaObjectRevisions: [0]
84+ Property { name: "lastExecutedToolbarItem"; type: "int"; isReadonly: true }
85+ Property { name: "lastSetQuery"; type: "string"; isReadonly: true }
86+ Property { name: "lastExecutedCommandRow"; type: "int"; isReadonly: true }
87+ Property { name: "lastExecutedParametrizedCommandRow"; type: "int"; isReadonly: true }
88+ Property { name: "lastParametrizedCommandCommited"; type: "bool"; isReadonly: true }
89+ Property { name: "activatedActions"; type: "QVariantMap"; isReadonly: true }
90+ Method { name: "reset" }
91+ Method { name: "fullScreenToolbarItemValue"; type: "int" }
92+ Method { name: "helpToolbarItemValue"; type: "int" }
93+ Method { name: "preferencesToolbarItemValue"; type: "int" }
94+ Method { name: "undoToolbarItemValue"; type: "int" }
95+ Method {
96+ name: "setHelpToolbarItemEnabled"
97+ Parameter { name: "enabled"; type: "bool" }
98+ }
99+ }
100+ Component { name: "HudToolBarModel"; prototype: "QAbstractListModel" }
101+ Component {
102+ name: "VolumePeakDetector"
103+ prototype: "QObject"
104+ exports: ["HudClient/VolumePeakDetector 0.1"]
105+ exportMetaObjectRevisions: [0]
106+ Property { name: "enabled"; type: "bool" }
107+ Property { name: "desiredInterval"; type: "int" }
108+ Signal {
109+ name: "newPeak"
110+ Parameter { name: "volume"; type: "float" }
111+ }
112+ }
113+}
tests/mocks/LightDM/LightDM.qmltypesnew file+241
@@ -0,0 +1,241 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable LightDM 0.1 tests/mocks'
8+
9+Module {
10+ Component {
11+ name: "Greeter"
12+ prototype: "QObject"
13+ exports: ["LightDM/Greeter 0.1"]
14+ isCreatable: false
15+ isSingleton: true
16+ exportMetaObjectRevisions: [0]
17+ Property { name: "authenticated"; type: "bool"; isReadonly: true }
18+ Property { name: "authenticationUser"; type: "string"; isReadonly: true }
19+ Property { name: "promptless"; type: "bool"; isReadonly: true }
20+ Signal {
21+ name: "showMessage"
22+ Parameter { name: "text"; type: "string" }
23+ Parameter { name: "isError"; type: "bool" }
24+ }
25+ Signal {
26+ name: "showPrompt"
27+ Parameter { name: "text"; type: "string" }
28+ Parameter { name: "isSecret"; type: "bool" }
29+ }
30+ Signal { name: "authenticationComplete" }
31+ Signal {
32+ name: "authenticationUserChanged"
33+ Parameter { name: "user"; type: "string" }
34+ }
35+ Signal {
36+ name: "requestAuthenticationUser"
37+ Parameter { name: "user"; type: "string" }
38+ }
39+ Method {
40+ name: "authenticate"
41+ Parameter { name: "username"; type: "string" }
42+ }
43+ Method { name: "authenticate" }
44+ Method {
45+ name: "respond"
46+ Parameter { name: "response"; type: "string" }
47+ }
48+ Method {
49+ name: "startSessionSync"
50+ type: "bool"
51+ Parameter { name: "session"; type: "string" }
52+ }
53+ Method { name: "startSessionSync"; type: "bool" }
54+ }
55+ Component {
56+ name: "QAbstractProxyModel"
57+ prototype: "QAbstractItemModel"
58+ Property { name: "sourceModel"; type: "QAbstractItemModel"; isPointer: true }
59+ }
60+ Component {
61+ name: "QLightDM::UsersModel"
62+ prototype: "QAbstractListModel"
63+ exports: ["LightDM/UserRoles 0.1"]
64+ isCreatable: false
65+ exportMetaObjectRevisions: [0]
66+ Enum {
67+ name: "UserModelRoles"
68+ values: {
69+ "NameRole": 256,
70+ "RealNameRole": 257,
71+ "LoggedInRole": 258,
72+ "BackgroundRole": 259,
73+ "SessionRole": 260,
74+ "HasMessagesRole": 261,
75+ "ImagePathRole": 262,
76+ "BackgroundPathRole": 263
77+ }
78+ }
79+ }
80+ Component {
81+ name: "QSortFilterProxyModel"
82+ prototype: "QAbstractProxyModel"
83+ Property { name: "filterRegExp"; type: "QRegExp" }
84+ Property { name: "filterKeyColumn"; type: "int" }
85+ Property { name: "dynamicSortFilter"; type: "bool" }
86+ Property { name: "filterCaseSensitivity"; type: "Qt::CaseSensitivity" }
87+ Property { name: "sortCaseSensitivity"; type: "Qt::CaseSensitivity" }
88+ Property { name: "isSortLocaleAware"; type: "bool" }
89+ Property { name: "sortRole"; type: "int" }
90+ Property { name: "filterRole"; type: "int" }
91+ Method {
92+ name: "setFilterRegExp"
93+ Parameter { name: "pattern"; type: "string" }
94+ }
95+ Method {
96+ name: "setFilterWildcard"
97+ Parameter { name: "pattern"; type: "string" }
98+ }
99+ Method {
100+ name: "setFilterFixedString"
101+ Parameter { name: "pattern"; type: "string" }
102+ }
103+ Method { name: "clear" }
104+ Method { name: "invalidate" }
105+ }
106+ Component {
107+ name: "QSortFilterProxyModelQML"
108+ prototype: "QSortFilterProxyModel"
109+ Property { name: "model"; type: "QAbstractItemModel"; isPointer: true }
110+ Property { name: "totalCount"; type: "int"; isReadonly: true }
111+ Property { name: "count"; type: "int"; isReadonly: true }
112+ Property { name: "invertMatch"; type: "bool" }
113+ Signal {
114+ name: "invertMatchChanged"
115+ Parameter { type: "bool" }
116+ }
117+ Method {
118+ name: "get"
119+ type: "QVariantMap"
120+ Parameter { name: "row"; type: "int" }
121+ }
122+ Method {
123+ name: "data"
124+ type: "QVariant"
125+ Parameter { name: "row"; type: "int" }
126+ Parameter { name: "role"; type: "int" }
127+ }
128+ Method { name: "count"; type: "int" }
129+ Method {
130+ name: "findFirst"
131+ type: "int"
132+ Parameter { name: "role"; type: "int" }
133+ Parameter { name: "value"; type: "QVariant" }
134+ }
135+ Method {
136+ name: "mapRowToSource"
137+ type: "int"
138+ Parameter { name: "row"; type: "int" }
139+ }
140+ Method {
141+ name: "mapFromSource"
142+ type: "int"
143+ Parameter { name: "row"; type: "int" }
144+ }
145+ Method {
146+ name: "mapToSource"
147+ type: "int"
148+ Parameter { name: "row"; type: "int" }
149+ }
150+ }
151+ Component {
152+ name: "UserMetricsOutput::ColorTheme"
153+ prototype: "QObject"
154+ Property { name: "start"; type: "QColor"; isReadonly: true }
155+ Property { name: "main"; type: "QColor"; isReadonly: true }
156+ Property { name: "end"; type: "QColor"; isReadonly: true }
157+ Signal {
158+ name: "startChanged"
159+ Parameter { name: "color"; type: "QColor" }
160+ }
161+ Signal {
162+ name: "mainChanged"
163+ Parameter { name: "color"; type: "QColor" }
164+ }
165+ Signal {
166+ name: "endChanged"
167+ Parameter { name: "color"; type: "QColor" }
168+ }
169+ }
170+ Component {
171+ name: "UserMetricsOutput::UserMetrics"
172+ prototype: "QObject"
173+ exports: ["LightDM/Infographic 0.1"]
174+ isCreatable: false
175+ isSingleton: true
176+ exportMetaObjectRevisions: [0]
177+ Property { name: "label"; type: "string"; isReadonly: true }
178+ Property { name: "username"; type: "string" }
179+ Property {
180+ name: "firstColor"
181+ type: "UserMetricsOutput::ColorTheme"
182+ isReadonly: true
183+ isPointer: true
184+ }
185+ Property {
186+ name: "secondColor"
187+ type: "UserMetricsOutput::ColorTheme"
188+ isReadonly: true
189+ isPointer: true
190+ }
191+ Property { name: "firstMonth"; type: "QAbstractItemModel"; isReadonly: true; isPointer: true }
192+ Property { name: "secondMonth"; type: "QAbstractItemModel"; isReadonly: true; isPointer: true }
193+ Property { name: "currentDay"; type: "int"; isReadonly: true }
194+ Signal {
195+ name: "labelChanged"
196+ Parameter { name: "label"; type: "string" }
197+ }
198+ Signal {
199+ name: "usernameChanged"
200+ Parameter { name: "username"; type: "string" }
201+ }
202+ Signal {
203+ name: "firstColorChanged"
204+ Parameter { name: "color"; type: "ColorTheme"; isPointer: true }
205+ }
206+ Signal {
207+ name: "firstMonthChanged"
208+ Parameter { name: "firstMonth"; type: "QAbstractItemModel"; isPointer: true }
209+ }
210+ Signal {
211+ name: "currentDayChanged"
212+ Parameter { name: "currentDay"; type: "int" }
213+ }
214+ Signal {
215+ name: "secondColorChanged"
216+ Parameter { name: "color"; type: "ColorTheme"; isPointer: true }
217+ }
218+ Signal {
219+ name: "secondMonthChanged"
220+ Parameter { name: "secondMonth"; type: "QAbstractItemModel"; isPointer: true }
221+ }
222+ Signal { name: "nextDataSource" }
223+ Signal { name: "readyForDataChange" }
224+ Signal { name: "dataAboutToAppear" }
225+ Signal { name: "dataAppeared" }
226+ Signal { name: "dataAboutToChange" }
227+ Signal { name: "dataChanged" }
228+ Signal { name: "dataAboutToDisappear" }
229+ Signal { name: "dataDisappeared" }
230+ Method { name: "nextDataSourceSlot" }
231+ Method { name: "readyForDataChangeSlot" }
232+ }
233+ Component {
234+ name: "UsersModel"
235+ prototype: "QSortFilterProxyModelQML"
236+ exports: ["LightDM/Users 0.1"]
237+ isCreatable: false
238+ isSingleton: true
239+ exportMetaObjectRevisions: [0]
240+ }
241+}
tests/mocks/Powerd/Powerd.qmltypesnew file+46
@@ -0,0 +1,46 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable Powerd 0.1 tests/mocks'
8+
9+Module {
10+ Component {
11+ name: "Powerd"
12+ prototype: "QObject"
13+ exports: ["Powerd/Powerd 0.1"]
14+ isCreatable: false
15+ isSingleton: true
16+ exportMetaObjectRevisions: [0]
17+ Enum {
18+ name: "DisplayFlag"
19+ values: {
20+ "UseProximity": 1,
21+ "DisableAutoBrightness": 2,
22+ "Bright": 4
23+ }
24+ }
25+ Enum {
26+ name: "DisplayFlags"
27+ values: {
28+ "UseProximity": 1,
29+ "DisableAutoBrightness": 2,
30+ "Bright": 4
31+ }
32+ }
33+ Enum {
34+ name: "Status"
35+ values: {
36+ "Off": 0,
37+ "On": 1
38+ }
39+ }
40+ Signal {
41+ name: "displayPowerStateChange"
42+ Parameter { name: "status"; type: "int" }
43+ Parameter { name: "flags"; type: "uint" }
44+ }
45+ }
46+}
tests/mocks/QMenuModel/QDBusActionGroup.qml+60
@@ -18,10 +18,70 @@
18 */
18 */
19
19
20import QtQuick 2.0
20import QtQuick 2.0
21+import Ubuntu.Settings.Menus 0.1 as Menus
21
22
22QtObject {
23QtObject {
23 property int busType
24 property int busType
24 property string busName
25 property string busName
25 property string objectPath
26 property string objectPath
26 function start() {}
27 function start() {}
28+ function action(actionName) {
29+ switch (actionName) {
30+ case "transfer-state.queued":
31+ return {
32+ 'valid': true,
33+ 'state': {
34+ 'state': Menus.TransferState.Queued,
35+ 'percent': 0.0
36+ }
37+ }
38+ case "transfer-state.running":
39+ return {
40+ 'valid': true,
41+ 'state': {
42+ 'state': Menus.TransferState.Running,
43+ 'seconds-left': 100,
44+ 'percent': 0.1
45+ }
46+ }
47+ case "transfer-state.paused":
48+ return {
49+ 'valid': true,
50+ 'state': {
51+ 'state': Menus.TransferState.Paused,
52+ 'seconds-left': 100,
53+ 'percent': 0.5
54+ }
55+ }
56+ case "transfer-state.cancelled":
57+ return {
58+ 'valid': true,
59+ 'state': {
60+ 'state': Menus.TransferState.Canceled,
61+ 'percent': 0.4
62+ }
63+ }
64+ case "transfer-state.finished": return {
65+ 'valid': true,
66+ 'state': {
67+ 'state': Menus.TransferState.Finished,
68+ 'seconds-left': 0,
69+ 'percent': 1.0
70+ }
71+ }
72+ case "transfer-state.error":
73+ return {
74+ 'valid': true,
75+ 'state': {
76+ 'state': Menus.TransferState.Error,
77+ 'seconds-left': 100,
78+ 'percent': 0.0
79+ }
80+ }
81+ default:
82+ break;
83+ }
84+
85+ return null;
86+ }
27}
87}
tests/mocks/QMenuModel/QMenuModel.qmltypesnew file+77
@@ -0,0 +1,77 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable QMenuModel 0.1 tests/mocks'
8+
9+Module {
10+ Component {
11+ name: "ActionStateParser"
12+ prototype: "QObject"
13+ exports: ["QMenuModel/ActionStateParser 0.1"]
14+ exportMetaObjectRevisions: [0]
15+ }
16+ Component {
17+ name: "UnityMenuModel"
18+ prototype: "QAbstractListModel"
19+ exports: ["QMenuModel/UnityMenuModel 0.1"]
20+ exportMetaObjectRevisions: [0]
21+ Property { name: "modelData"; type: "QVariant" }
22+ Property { name: "busName"; type: "QByteArray" }
23+ Property { name: "actions"; type: "QVariantMap" }
24+ Property { name: "menuObjectPath"; type: "QByteArray" }
25+ Property { name: "actionStateParser"; type: "ActionStateParser"; isPointer: true }
26+ Method {
27+ name: "insertRow"
28+ Parameter { name: "row"; type: "int" }
29+ Parameter { name: "data"; type: "QVariant" }
30+ }
31+ Method {
32+ name: "appendRow"
33+ Parameter { name: "data"; type: "QVariant" }
34+ }
35+ Method {
36+ name: "removeRow"
37+ Parameter { name: "row"; type: "int" }
38+ }
39+ Method {
40+ name: "submenu"
41+ type: "QObject*"
42+ Parameter { name: "position"; type: "int" }
43+ Parameter { name: "actionStateParser"; type: "QQmlComponent"; isPointer: true }
44+ }
45+ Method {
46+ name: "submenu"
47+ type: "QObject*"
48+ Parameter { name: "position"; type: "int" }
49+ }
50+ Method {
51+ name: "loadExtendedAttributes"
52+ type: "bool"
53+ Parameter { name: "position"; type: "int" }
54+ Parameter { name: "schema"; type: "QVariantMap" }
55+ }
56+ Method {
57+ name: "get"
58+ type: "QVariant"
59+ Parameter { name: "row"; type: "int" }
60+ Parameter { name: "role"; type: "QByteArray" }
61+ }
62+ Method {
63+ name: "activate"
64+ Parameter { name: "index"; type: "int" }
65+ Parameter { name: "parameter"; type: "QVariant" }
66+ }
67+ Method {
68+ name: "activate"
69+ Parameter { name: "index"; type: "int" }
70+ }
71+ Method {
72+ name: "changeState"
73+ Parameter { name: "index"; type: "int" }
74+ Parameter { name: "parameter"; type: "QVariant" }
75+ }
76+ }
77+}
tests/mocks/QtMultimedia/QtMultimedia.qmltypesnew file+52
@@ -0,0 +1,52 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable QtMultimedia 5.0 tests/mocks'
8+
9+Module {
10+ Component {
11+ name: "Audio"
12+ prototype: "QObject"
13+ exports: ["QtMultimedia/Audio 5.0"]
14+ exportMetaObjectRevisions: [0]
15+ Enum {
16+ name: "PlaybackState"
17+ values: {
18+ "PlayingState": 0,
19+ "PausedState": 1,
20+ "StoppedState": 2
21+ }
22+ }
23+ Property { name: "source"; type: "QUrl" }
24+ Property { name: "playbackState"; type: "PlaybackState"; isReadonly: true }
25+ Property { name: "position"; type: "int"; isReadonly: true }
26+ Property { name: "duration"; type: "int"; isReadonly: true }
27+ Property { name: "errorString"; type: "string"; isReadonly: true }
28+ Signal {
29+ name: "sourceChanged"
30+ Parameter { name: "source"; type: "QUrl" }
31+ }
32+ Signal {
33+ name: "playbackStateChanged"
34+ Parameter { name: "playbackState"; type: "PlaybackState" }
35+ }
36+ Signal {
37+ name: "positionChanged"
38+ Parameter { name: "position"; type: "int" }
39+ }
40+ Signal {
41+ name: "durationChanged"
42+ Parameter { name: "duration"; type: "int" }
43+ }
44+ Signal {
45+ name: "errorStringChanged"
46+ Parameter { name: "errorString"; type: "string" }
47+ }
48+ Method { name: "pause" }
49+ Method { name: "play" }
50+ Method { name: "stop" }
51+ }
52+}
tests/mocks/Ubuntu/CMakeLists.txt+2
@@ -1,2 +1,4 @@
1add_subdirectory(DownloadDaemonListener)
1add_subdirectory(DownloadDaemonListener)
2+add_subdirectory(Payments)
3+add_subdirectory(Telephony)
2add_subdirectory(Thumbnailer)
4add_subdirectory(Thumbnailer)
tests/mocks/Ubuntu/DownloadDaemonListener/DownloadDaemonListener.qmltypesnew file+60
@@ -0,0 +1,60 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable Ubuntu.DownloadDaemonListener 0.1 tests/mocks'
8+
9+Module {
10+ Component {
11+ name: "MockDownloadTracker"
12+ prototype: "QObject"
13+ exports: ["Ubuntu.DownloadDaemonListener/DownloadTracker 0.1"]
14+ exportMetaObjectRevisions: [0]
15+ Property { name: "service"; type: "string" }
16+ Property { name: "dbusPath"; type: "string" }
17+ Property { name: "serviceReady"; type: "bool"; isReadonly: true }
18+ Signal {
19+ name: "serviceChanged"
20+ Parameter { name: "service"; type: "string" }
21+ }
22+ Signal {
23+ name: "dbusPathChanged"
24+ Parameter { name: "dbusPath"; type: "string" }
25+ }
26+ Signal {
27+ name: "serviceReadyChanged"
28+ Parameter { name: "serviceReady"; type: "bool" }
29+ }
30+ Signal {
31+ name: "canceled"
32+ Parameter { name: "success"; type: "bool" }
33+ }
34+ Signal {
35+ name: "error"
36+ Parameter { name: "error"; type: "string" }
37+ }
38+ Signal {
39+ name: "finished"
40+ Parameter { name: "path"; type: "string" }
41+ }
42+ Signal {
43+ name: "paused"
44+ Parameter { name: "success"; type: "bool" }
45+ }
46+ Signal {
47+ name: "progress"
48+ Parameter { name: "received"; type: "qulonglong" }
49+ Parameter { name: "total"; type: "qulonglong" }
50+ }
51+ Signal {
52+ name: "resumed"
53+ Parameter { name: "success"; type: "bool" }
54+ }
55+ Signal {
56+ name: "started"
57+ Parameter { name: "success"; type: "bool" }
58+ }
59+ }
60+}
tests/mocks/Ubuntu/Payments/CMakeLists.txtnew file+10
@@ -0,0 +1,10 @@
1+set(FakeUbuntuPaymentsQml_SOURCES
2+ plugin.cpp
3+ MockPayments.cpp
4+ )
5+
6+add_library(FakeUbuntuPaymentsQml MODULE ${FakeUbuntuPaymentsQml_SOURCES})
7+
8+qt5_use_modules(FakeUbuntuPaymentsQml Qml Quick Core)
9+
10+add_unity8_mock(Ubuntu.Payments 0.1 Ubuntu/Payments TARGETS FakeUbuntuPaymentsQml)
tests/mocks/Ubuntu/Payments/MockPayments.cppnew file+89
@@ -0,0 +1,89 @@
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 "MockPayments.h"
18+
19+#include <QLocale>
20+
21+
22+MockPayments::MockPayments(QObject *parent)
23+ : QObject(parent)
24+{
25+}
26+
27+QString MockPayments::currency() const
28+{
29+ return m_currency;
30+}
31+
32+double MockPayments::price() const
33+{
34+ return m_price;
35+}
36+
37+QString MockPayments::storeItemId() const
38+{
39+ return m_store_item_id;
40+}
41+
42+QString MockPayments::formattedPrice() const
43+{
44+ QLocale locale;
45+ return locale.toCurrencyString(m_price, m_currency);
46+}
47+
48+void MockPayments::setCurrency(const QString &currency)
49+{
50+ if(m_currency != currency) {
51+ m_currency = currency;
52+ Q_EMIT currencyChanged(currency);
53+ Q_EMIT formattedPriceChanged(formattedPrice());
54+ }
55+}
56+
57+void MockPayments::setPrice(const double price)
58+{
59+ if(m_price != price) {
60+ m_price = price;
61+ Q_EMIT priceChanged(price);
62+ Q_EMIT formattedPriceChanged(formattedPrice());
63+ }
64+}
65+
66+void MockPayments::setStoreItemId(const QString &store_item_id)
67+{
68+ if (m_store_item_id != store_item_id) {
69+ m_store_item_id = store_item_id;
70+ Q_EMIT storeItemIdChanged(m_store_item_id);
71+ }
72+
73+ if (m_store_item_id.isEmpty()) {
74+ return;
75+ }
76+}
77+
78+void MockPayments::start()
79+{
80+ if (!m_store_item_id.isEmpty()) {
81+ if (m_store_item_id == "com.example.invalid") {
82+ Q_EMIT purchaseError("Purchase failed.");
83+ } else {
84+ Q_EMIT purchaseCompleted();
85+ }
86+ } else {
87+ Q_EMIT purchaseError("No item ID supplied.");
88+ }
89+}
tests/mocks/Ubuntu/Payments/MockPayments.hnew file+60
@@ -0,0 +1,60 @@
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 MOCK_PAYMENTS_H
18+#define MOCK_PAYMENTS_H
19+
20+#include <QObject>
21+
22+
23+class MockPayments : public QObject
24+{
25+ Q_OBJECT
26+ Q_DISABLE_COPY(MockPayments)
27+ Q_PROPERTY(QString currency READ currency WRITE setCurrency NOTIFY currencyChanged)
28+ Q_PROPERTY(double price READ price WRITE setPrice NOTIFY priceChanged)
29+ Q_PROPERTY(QString storeItemId READ storeItemId WRITE setStoreItemId NOTIFY storeItemIdChanged)
30+ Q_PROPERTY(QString formattedPrice READ formattedPrice NOTIFY formattedPriceChanged)
31+
32+public:
33+ explicit MockPayments(QObject *parent = 0);
34+
35+ QString currency() const;
36+ double price() const;
37+ QString storeItemId() const;
38+ QString formattedPrice() const;
39+
40+ void setCurrency(const QString& currency);
41+ void setPrice(const double price);
42+ void setStoreItemId(const QString& store_item_id);
43+ Q_INVOKABLE void start();
44+
45+Q_SIGNALS:
46+ void currencyChanged(const QString& currency);
47+ void priceChanged(const double price);
48+ void storeItemIdChanged(const QString &store_item_id);
49+ void formattedPriceChanged(const QString &formatted_price);
50+
51+ void purchaseError(const QString &error);
52+ void purchaseCompleted();
53+
54+private:
55+ QString m_currency;
56+ double m_price;
57+ QString m_store_item_id;
58+};
59+
60+#endif // MOCK_PAYMENTS_H
tests/mocks/Ubuntu/Payments/Payments.qmltypesnew file+42
@@ -0,0 +1,42 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable Ubuntu.Payments 0.1 tests/mocks'
8+
9+Module {
10+ Component {
11+ name: "MockPayments"
12+ prototype: "QObject"
13+ exports: ["Ubuntu.Payments/Payments 0.1"]
14+ exportMetaObjectRevisions: [0]
15+ Property { name: "currency"; type: "string" }
16+ Property { name: "price"; type: "double" }
17+ Property { name: "storeItemId"; type: "string" }
18+ Property { name: "formattedPrice"; type: "string"; isReadonly: true }
19+ Signal {
20+ name: "currencyChanged"
21+ Parameter { name: "currency"; type: "string" }
22+ }
23+ Signal {
24+ name: "priceChanged"
25+ Parameter { name: "price"; type: "double" }
26+ }
27+ Signal {
28+ name: "storeItemIdChanged"
29+ Parameter { name: "store_item_id"; type: "string" }
30+ }
31+ Signal {
32+ name: "formattedPriceChanged"
33+ Parameter { name: "formatted_price"; type: "string" }
34+ }
35+ Signal {
36+ name: "purchaseError"
37+ Parameter { name: "error"; type: "string" }
38+ }
39+ Signal { name: "purchaseCompleted" }
40+ Method { name: "start" }
41+ }
42+}
tests/mocks/Ubuntu/Payments/plugin.cppnew file+28
@@ -0,0 +1,28 @@
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 "plugin.h"
18+#include "MockPayments.h"
19+
20+#include <QtQml>
21+
22+
23+void BackendPlugin::registerTypes(const char *uri)
24+{
25+ Q_ASSERT(uri == QLatin1String("Ubuntu.Payments"));
26+
27+ qmlRegisterType<MockPayments>(uri, 0, 1, "Payments");
28+}
tests/mocks/Ubuntu/Payments/plugin.hnew file+31
@@ -0,0 +1,31 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef PAYMENTS_PLUGIN_H
18+#define PAYMENTS_PLUGIN_H
19+
20+#include <QQmlExtensionPlugin>
21+
22+class BackendPlugin : public QQmlExtensionPlugin
23+{
24+ Q_OBJECT
25+ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
26+
27+public:
28+ void registerTypes(const char *uri);
29+};
30+
31+#endif // PAYMENTS_PLUGIN_H
tests/mocks/Ubuntu/Payments/qmldirnew file+3
@@ -0,0 +1,3 @@
1+module Ubuntu.Payments
2+plugin FakeUbuntuPaymentsQml
3+typeinfo Payments.qmltypes
tests/mocks/Ubuntu/Telephony/CMakeLists.txtnew file+22
@@ -0,0 +1,22 @@
1+set(FakeUbuntuTelephonyQml_SOURCES
2+ plugin.cpp
3+ ContactWatcherData.cpp
4+ MockCallEntry.cpp
5+ MockCallManager.cpp
6+ MockContactWatcher.cpp
7+ MockTelepathyHelper.cpp
8+)
9+
10+add_library(FakeUbuntuTelephonyQml MODULE ${FakeUbuntuTelephonyQml_SOURCES})
11+
12+qt5_use_modules(FakeUbuntuTelephonyQml Core Quick)
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
21+ DESTINATION ${SHELL_INSTALL_QML}/mocks/Ubuntu/Telephony
22+ )
tests/mocks/Ubuntu/Telephony/ContactWatcherData.cppnew 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+ * Authored by: Nick Dedekind <nick.dedekind@canonical.com
17+ */
18+
19+#include "ContactWatcherData.h"
20+
21+ContactWatcherData::ContactWatcherData(QObject *parent)
22+ : QObject(parent)
23+{
24+}
25+
26+ContactWatcherData *ContactWatcherData::instance()
27+{
28+ static ContactWatcherData* contactData = new ContactWatcherData();
29+ return contactData;
30+}
31+
32+QVariant ContactWatcherData::contactData() const
33+{
34+ return m_data;
35+}
36+
37+void ContactWatcherData::setContactData(const QVariant& contactData)
38+{
39+ if(m_data != contactData){
40+ m_data = contactData;
41+ Q_EMIT contactDataChanged();
42+ }
43+}
tests/mocks/Ubuntu/Telephony/ContactWatcherData.hnew file+46
@@ -0,0 +1,46 @@
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+ * Authored by: Nick Dedekind <nick.dedekind@canonical.com
17+ */
18+
19+#ifndef CONTACTWATCHERDATA_H
20+#define CONTACTWATCHERDATA_H
21+
22+#include <QObject>
23+#include <QVariant>
24+
25+class ContactWatcherData : public QObject
26+{
27+ Q_OBJECT
28+ Q_DISABLE_COPY(ContactWatcherData)
29+ Q_PROPERTY(QVariant contactData READ contactData WRITE setContactData NOTIFY contactDataChanged)
30+
31+public:
32+ ContactWatcherData(QObject *parent = 0);
33+
34+ static ContactWatcherData *instance();
35+
36+ QVariant contactData() const;
37+ void setContactData(const QVariant& contactData);
38+
39+Q_SIGNALS:
40+ void contactDataChanged();
41+
42+private:
43+ QVariant m_data;
44+};
45+
46+#endif // CONTACTWATCHERDATA_H
tests/mocks/Ubuntu/Telephony/MockCallEntry.cppnew file+66
@@ -0,0 +1,66 @@
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+ * Authored by: Nick Dedekind <nick.dedekind@canonical.com
17+ */
18+
19+#include "MockCallEntry.h"
20+
21+MockCallEntry::MockCallEntry(QObject *parent)
22+ : QObject(parent)
23+ , m_conference(false)
24+ , m_elapsed(0)
25+{
26+ startTimer(1000);
27+}
28+
29+QString MockCallEntry::phoneNumber() const
30+{
31+ return m_phoneNumber;
32+}
33+
34+void MockCallEntry::setPhoneNumber(const QString& phoneNumber)
35+{
36+ if(m_phoneNumber != phoneNumber){
37+ m_phoneNumber = phoneNumber;
38+ Q_EMIT phoneNumberChanged();
39+ }
40+}
41+
42+bool MockCallEntry::isConference() const
43+{
44+ return m_conference;
45+}
46+
47+void MockCallEntry::setIsConference(bool isConference)
48+{
49+ if(m_conference != isConference){
50+ m_conference = isConference;
51+ Q_EMIT isConferenceChanged();
52+ }
53+}
54+
55+int MockCallEntry::elapsedTime() const
56+{
57+ return m_elapsed;
58+}
59+
60+void MockCallEntry::timerEvent(QTimerEvent * event)
61+{
62+ Q_UNUSED(event);
63+
64+ m_elapsed++;
65+ Q_EMIT elapsedTimeChanged();
66+}
tests/mocks/Ubuntu/Telephony/MockCallEntry.hnew 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+ * Authored by: Nick Dedekind <nick.dedekind@canonical.com
17+ */
18+
19+#ifndef MOCKCALLENTRY_H
20+#define MOCKCALLENTRY_H
21+
22+#include <QObject>
23+
24+class MockCallEntry : public QObject
25+{
26+ Q_OBJECT
27+ Q_DISABLE_COPY(MockCallEntry)
28+
29+ Q_PROPERTY(QString phoneNumber READ phoneNumber WRITE setPhoneNumber NOTIFY phoneNumberChanged)
30+ Q_PROPERTY(bool isConference READ isConference WRITE setIsConference NOTIFY isConferenceChanged)
31+ Q_PROPERTY(int elapsedTime READ elapsedTime NOTIFY elapsedTimeChanged)
32+
33+public:
34+ MockCallEntry(QObject *parent = 0);
35+
36+ QString phoneNumber() const;
37+ bool isConference() const;
38+ int elapsedTime() const;
39+
40+ void setPhoneNumber(const QString& phoneNumber);
41+ void setIsConference(bool isConference);
42+
43+Q_SIGNALS:
44+ void phoneNumberChanged();
45+ void isConferenceChanged();
46+ void elapsedTimeChanged();
47+
48+protected:
49+ void timerEvent(QTimerEvent * event);
50+
51+private:
52+ QString m_phoneNumber;
53+ bool m_conference;
54+ int m_elapsed;
55+};
56+
57+#endif // MOCKCALLENTRY_H
tests/mocks/Ubuntu/Telephony/MockCallManager.cppnew file+80
@@ -0,0 +1,80 @@
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+ * Authored by: Nick Dedekind <nick.dedekind@canonical.com
17+ */
18+
19+#include "MockCallManager.h"
20+
21+MockCallManager::MockCallManager(QObject *parent)
22+ : QObject(parent)
23+ , m_foregroundCall(nullptr)
24+ , m_backgroundCall(nullptr)
25+ , m_callIndicatorVisible(false)
26+{
27+}
28+
29+MockCallManager *MockCallManager::instance()
30+{
31+ static MockCallManager* manager = new MockCallManager();
32+ return manager;
33+}
34+
35+QObject* MockCallManager::foregroundCall() const
36+{
37+ return m_foregroundCall;
38+}
39+
40+void MockCallManager::setForegroundCall(QObject* foregroundCall)
41+{
42+ if(m_foregroundCall != foregroundCall){
43+ m_foregroundCall = foregroundCall;
44+ Q_EMIT foregroundCallChanged();
45+ Q_EMIT hasCallsChanged();
46+ }
47+}
48+
49+QObject* MockCallManager::backgroundCall() const
50+{
51+ return m_backgroundCall;
52+}
53+
54+void MockCallManager::setBackgroundCall(QObject* backgroundCall)
55+{
56+ if(m_backgroundCall != backgroundCall){
57+ m_backgroundCall = backgroundCall;
58+ Q_EMIT backgroundCallChanged();
59+ Q_EMIT hasCallsChanged();
60+ }
61+}
62+
63+bool MockCallManager::hasCalls() const
64+{
65+ return m_foregroundCall || m_backgroundCall;
66+}
67+
68+
69+bool MockCallManager::callIndicatorVisible() const
70+{
71+ return m_callIndicatorVisible;
72+}
73+
74+void MockCallManager::setCallIndicatorVisible(bool callIndicatorVisible)
75+{
76+ if(m_callIndicatorVisible != callIndicatorVisible){
77+ m_callIndicatorVisible = callIndicatorVisible;
78+ Q_EMIT callIndicatorVisibleChanged();
79+ }
80+}
tests/mocks/Ubuntu/Telephony/MockCallManager.hnew file+60
@@ -0,0 +1,60 @@
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+ * Authored by: Nick Dedekind <nick.dedekind@canonical.com
17+ */
18+
19+#ifndef MOCKCALLMANAGER_H
20+#define MOCKCALLMANAGER_H
21+
22+#include <QObject>
23+
24+class MockCallManager : public QObject
25+{
26+ Q_OBJECT
27+ Q_DISABLE_COPY(MockCallManager)
28+
29+ Q_PROPERTY(QObject *foregroundCall READ foregroundCall WRITE setForegroundCall NOTIFY foregroundCallChanged)
30+ Q_PROPERTY(QObject *backgroundCall READ backgroundCall WRITE setBackgroundCall NOTIFY backgroundCallChanged)
31+ Q_PROPERTY(bool hasCalls READ hasCalls NOTIFY hasCallsChanged)
32+ Q_PROPERTY(bool callIndicatorVisible READ callIndicatorVisible WRITE setCallIndicatorVisible NOTIFY callIndicatorVisibleChanged)
33+
34+public:
35+ explicit MockCallManager(QObject *parent = 0);
36+
37+ static MockCallManager *instance();
38+
39+ QObject* foregroundCall() const;
40+ QObject* backgroundCall() const;
41+ bool hasCalls() const;
42+ bool callIndicatorVisible() const;
43+
44+ void setForegroundCall(QObject* foregroundCall);
45+ void setBackgroundCall(QObject* backgroundCall);
46+ void setCallIndicatorVisible(bool callIndicatorVisible);
47+
48+Q_SIGNALS:
49+ void foregroundCallChanged();
50+ void backgroundCallChanged();
51+ void hasCallsChanged();
52+ void callIndicatorVisibleChanged();
53+
54+private:
55+ QObject* m_foregroundCall;
56+ QObject* m_backgroundCall;
57+ bool m_callIndicatorVisible;
58+};
59+
60+#endif // MOCKCALLMANAGER_H
tests/mocks/Ubuntu/Telephony/MockContactWatcher.cppnew file+50
@@ -0,0 +1,50 @@
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+ * Authored by: Nick Dedekind <nick.dedekind@canonical.com
17+ */
18+
19+#include "MockContactWatcher.h"
20+#include "ContactWatcherData.h"
21+
22+MockContactWatcher::MockContactWatcher(QObject *parent)
23+ : QObject(parent)
24+{
25+ connect(ContactWatcherData::instance(), &ContactWatcherData::contactDataChanged,
26+ this, &MockContactWatcher::aliasChanged);
27+}
28+
29+QString MockContactWatcher::phoneNumber() const
30+{
31+ return m_phoneNumber;
32+}
33+
34+void MockContactWatcher::setPhoneNumber(const QString& phoneNumber)
35+{
36+ if(m_phoneNumber != phoneNumber){
37+ m_phoneNumber = phoneNumber;
38+ Q_EMIT phoneNumberChanged();
39+ Q_EMIT aliasChanged();
40+ }
41+}
42+
43+QString MockContactWatcher::alias() const
44+{
45+ QVariantMap data = ContactWatcherData::instance()->contactData().toMap();
46+ if (data.contains(m_phoneNumber)) {
47+ return data[m_phoneNumber].toMap()["alias"].toString();
48+ }
49+ return "";
50+}
tests/mocks/Ubuntu/Telephony/MockContactWatcher.hnew 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+ * Authored by: Nick Dedekind <nick.dedekind@canonical.com
17+ */
18+
19+#ifndef MOCKCONTACTWATCHER_H
20+#define MOCKCONTACTWATCHER_H
21+
22+#include <QObject>
23+#include <QVariant>
24+
25+class MockContactWatcher : public QObject
26+{
27+ Q_OBJECT
28+ Q_DISABLE_COPY(MockContactWatcher)
29+
30+ Q_PROPERTY(QString phoneNumber READ phoneNumber WRITE setPhoneNumber NOTIFY phoneNumberChanged)
31+ Q_PROPERTY(QString alias READ alias NOTIFY aliasChanged)
32+
33+public:
34+ MockContactWatcher(QObject *parent = 0);
35+
36+ QString phoneNumber() const;
37+ QString alias() const;
38+
39+ void setPhoneNumber(const QString& phoneNumber);
40+
41+Q_SIGNALS:
42+ void phoneNumberChanged();
43+ void aliasChanged();
44+
45+private:
46+ QString m_phoneNumber;
47+};
48+
49+#endif // MOCKCONTACTWATCHER_H
tests/mocks/Ubuntu/Telephony/MockTelepathyHelper.cppnew file+35
@@ -0,0 +1,35 @@
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+ * Authored by: Nick Dedekind <nick.dedekind@canonical.com
17+ */
18+
19+#include "MockTelepathyHelper.h"
20+
21+MockTelepathyHelper::MockTelepathyHelper(QObject *parent)
22+ : QObject(parent)
23+{
24+}
25+
26+MockTelepathyHelper *MockTelepathyHelper::instance()
27+{
28+ static MockTelepathyHelper* helper = new MockTelepathyHelper();
29+ return helper;
30+}
31+
32+void MockTelepathyHelper::registerChannelObserver(const QString& name)
33+{
34+ Q_UNUSED(name);
35+}
tests/mocks/Ubuntu/Telephony/MockTelepathyHelper.hnew file+36
@@ -0,0 +1,36 @@
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+ * Authored by: Nick Dedekind <nick.dedekind@canonical.com
17+ */
18+
19+#ifndef MOCKTELEPATHYHELPER_H
20+#define MOCKTELEPATHYHELPER_H
21+
22+#include <QObject>
23+
24+class MockTelepathyHelper : public QObject
25+{
26+ Q_OBJECT
27+ Q_DISABLE_COPY(MockTelepathyHelper)
28+public:
29+ MockTelepathyHelper(QObject *parent = 0);
30+
31+ static MockTelepathyHelper *instance();
32+
33+ Q_INVOKABLE void registerChannelObserver(const QString& name);
34+};
35+
36+#endif // MOCKCONTACTWATCHER_H
tests/mocks/Ubuntu/Telephony/plugin.cppnew file+52
@@ -0,0 +1,52 @@
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+ * Authored by: Nick Dedekind <nick.dedekind@canonical.com
17+ */
18+
19+#include "plugin.h"
20+#include "MockCallEntry.h"
21+#include "MockCallManager.h"
22+#include "MockContactWatcher.h"
23+#include "MockTelepathyHelper.h"
24+#include "ContactWatcherData.h"
25+
26+#include <QtQml/QQmlContext>
27+#include <QtQml/QQmlEngine>
28+#include <qqml.h>
29+
30+void FakeUbuntuTelephonyQmlPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
31+{
32+ Q_ASSERT(engine);
33+
34+ Q_UNUSED(uri);
35+
36+ mRootContext = engine->rootContext();
37+ Q_ASSERT(mRootContext);
38+
39+ mRootContext->setContextProperty("telepathyHelper", MockTelepathyHelper::instance());
40+ mRootContext->setContextProperty("callManager", MockCallManager::instance());
41+ mRootContext->setContextProperty("contactWactherData", ContactWatcherData::instance());
42+}
43+
44+void FakeUbuntuTelephonyQmlPlugin::registerTypes(const char *uri)
45+{
46+ // @uri Telephony
47+ qmlRegisterUncreatableType<MockTelepathyHelper>(uri, 0, 1, "TelepathyHelper", "This is a singleton helper class");
48+ qmlRegisterUncreatableType<MockCallManager>(uri, 0, 1, "CallManager", "This is a singleton manager class");
49+ qmlRegisterUncreatableType<ContactWatcherData>(uri, 0, 1, "ContactWatcherData", "This is a singleton data class");
50+ qmlRegisterType<MockCallEntry>(uri, 0, 1, "CallEntry");
51+ qmlRegisterType<MockContactWatcher>(uri, 0, 1, "ContactWatcher");
52+}
tests/mocks/Ubuntu/Telephony/plugin.hnew file+37
@@ -0,0 +1,37 @@
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+ * Authored by: Nick Dedekind <nick.dedekind@canonical.com
17+ */
18+
19+#ifndef PLUGIN_H
20+#define PLUGIN_H
21+
22+#include <QQmlContext>
23+#include <QQmlExtensionPlugin>
24+
25+class FakeUbuntuTelephonyQmlPlugin : public QQmlExtensionPlugin
26+{
27+ Q_OBJECT
28+ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
29+public:
30+ void initializeEngine(QQmlEngine *engine, const char *uri);
31+ void registerTypes(const char *uri);
32+
33+private:
34+ QQmlContext *mRootContext;
35+};
36+
37+#endif
tests/mocks/Ubuntu/Telephony/qmldirnew file+2
@@ -0,0 +1,2 @@
1+module Ubuntu.Telephony
2+plugin FakeUbuntuTelephonyQml
tests/mocks/Ubuntu/Thumbnailer/Thumbnailer.qmltypesnew file+17
@@ -0,0 +1,17 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable Ubuntu.Thumbnailer 0.1 tests/mocks'
8+
9+Module {
10+ Component {
11+ name: "QQmlTypeNotAvailable"
12+ prototype: "QObject"
13+ exports: ["Ubuntu.Thumbnailer/__ThumbnailerIgnoreMe 0.1"]
14+ isCreatable: false
15+ exportMetaObjectRevisions: [0]
16+ }
17+}
tests/mocks/Unity/Application/Application.qmltypesnew file+313
@@ -0,0 +1,313 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable Unity.Application 0.1 tests/mocks'
8+
9+Module {
10+ Component {
11+ name: "ApplicationImage"
12+ defaultProperty: "data"
13+ prototype: "QQuickItem"
14+ exports: ["Unity.Application/ApplicationImage 0.1"]
15+ exportMetaObjectRevisions: [0]
16+ Enum {
17+ name: "FillMode"
18+ values: {
19+ "Stretch": 0,
20+ "PreserveAspectCrop": 1
21+ }
22+ }
23+ Property { name: "source"; type: "ApplicationInfo"; isPointer: true }
24+ Property { name: "fillMode"; type: "FillMode" }
25+ Property { name: "ready"; type: "bool" }
26+ Method { name: "scheduleUpdate" }
27+ Method { name: "updateFromCache" }
28+ }
29+ Component {
30+ name: "ApplicationInfo"
31+ prototype: "unity::shell::application::ApplicationInfoInterface"
32+ exports: ["Unity.Application/ApplicationInfo 0.1"]
33+ exportMetaObjectRevisions: [0]
34+ Property { name: "fullscreen"; type: "bool" }
35+ Property { name: "stage"; type: "Stage" }
36+ Property { name: "imageQml"; type: "string" }
37+ Property { name: "windowQml"; type: "string" }
38+ Signal { name: "appIdChanged" }
39+ Signal { name: "nameChanged" }
40+ Signal { name: "commentChanged" }
41+ Signal { name: "iconChanged" }
42+ Signal { name: "stateChanged" }
43+ Signal { name: "focusedChanged" }
44+ Signal { name: "screenshotChanged" }
45+ }
46+ Component {
47+ name: "ApplicationManager"
48+ prototype: "unity::shell::application::ApplicationManagerInterface"
49+ exports: ["Unity.Application/ApplicationManager 0.1"]
50+ isCreatable: false
51+ isSingleton: true
52+ exportMetaObjectRevisions: [0]
53+ Enum {
54+ name: "Role"
55+ values: {
56+ "Dash": 0,
57+ "Default": 1,
58+ "Indicators": 2,
59+ "Notifications": 3,
60+ "Greeter": 4,
61+ "Launcher": 5,
62+ "OnScreenKeyboard": 6,
63+ "ShutdownDialog": 7
64+ }
65+ }
66+ Enum {
67+ name: "StageHint"
68+ values: {
69+ "MainStage": 0,
70+ "IntegrationStage": 1,
71+ "ShareStage": 2,
72+ "ContentPickingStage": 3,
73+ "SideStage": 4,
74+ "ConfigurationStage": 5
75+ }
76+ }
77+ Enum {
78+ name: "FormFactorHint"
79+ values: {
80+ "DesktopFormFactor": 0,
81+ "PhoneFormFactor": 1,
82+ "TabletFormFactor": 2
83+ }
84+ }
85+ Enum {
86+ name: "FavoriteApplication"
87+ values: {
88+ "CameraApplication": 0,
89+ "GalleryApplication": 1,
90+ "BrowserApplication": 2,
91+ "ShareApplication": 3,
92+ "PhoneApplication": 4,
93+ "DialerApplication": 5,
94+ "MessagingApplication": 6,
95+ "AddressbookApplication": 7
96+ }
97+ }
98+ Enum {
99+ name: "ExecFlags"
100+ values: {
101+ "NoFlag": 0,
102+ "ForceMainStage": 1
103+ }
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 }
108+ Property { name: "stageHint"; type: "StageHint"; isReadonly: true }
109+ Property { name: "formFactorHint"; type: "FormFactorHint"; isReadonly: true }
110+ Property { name: "fake"; type: "bool"; isReadonly: true }
111+ Property { name: "rightMargin"; type: "int" }
112+ Signal {
113+ name: "focusRequested"
114+ Parameter { name: "favoriteApplication"; type: "FavoriteApplication" }
115+ }
116+ Signal {
117+ name: "focusRequested"
118+ Parameter { name: "appId"; type: "string" }
119+ }
120+ Method {
121+ name: "get"
122+ type: "ApplicationInfo*"
123+ Parameter { name: "index"; type: "int" }
124+ }
125+ Method {
126+ name: "findApplication"
127+ type: "ApplicationInfo*"
128+ Parameter { name: "appId"; type: "string" }
129+ }
130+ Method {
131+ name: "move"
132+ Parameter { name: "from"; type: "int" }
133+ Parameter { name: "to"; type: "int" }
134+ }
135+ Method {
136+ name: "requestFocusApplication"
137+ type: "bool"
138+ Parameter { name: "appId"; type: "string" }
139+ }
140+ Method {
141+ name: "focusApplication"
142+ type: "bool"
143+ Parameter { name: "appId"; type: "string" }
144+ }
145+ Method { name: "unfocusCurrentApplication" }
146+ Method {
147+ name: "startApplication"
148+ type: "ApplicationInfo*"
149+ Parameter { name: "appId"; type: "string" }
150+ Parameter { name: "arguments"; type: "QStringList" }
151+ }
152+ Method {
153+ name: "startApplication"
154+ type: "ApplicationInfo*"
155+ Parameter { name: "appId"; type: "string" }
156+ }
157+ Method {
158+ name: "startApplication"
159+ type: "ApplicationInfo*"
160+ Parameter { name: "appId"; type: "string" }
161+ Parameter { name: "flags"; type: "ExecFlags" }
162+ Parameter { name: "arguments"; type: "QStringList" }
163+ }
164+ Method {
165+ name: "startApplication"
166+ type: "ApplicationInfo*"
167+ Parameter { name: "appId"; type: "string" }
168+ Parameter { name: "flags"; type: "ExecFlags" }
169+ }
170+ Method {
171+ name: "stopApplication"
172+ type: "bool"
173+ Parameter { name: "appId"; type: "string" }
174+ }
175+ Method {
176+ name: "updateScreenshot"
177+ type: "bool"
178+ Parameter { name: "appId"; type: "string" }
179+ }
180+ Method { name: "availableApplications"; type: "QStringList" }
181+ }
182+ Component {
183+ name: "unity::shell::application::ApplicationInfoInterface"
184+ prototype: "QObject"
185+ exports: ["Unity.Application/ApplicationInfoInterface 0.1"]
186+ isCreatable: false
187+ exportMetaObjectRevisions: [0]
188+ Enum {
189+ name: "Stage"
190+ values: {
191+ "MainStage": 0,
192+ "SideStage": 1
193+ }
194+ }
195+ Enum {
196+ name: "State"
197+ values: {
198+ "Starting": 0,
199+ "Running": 1,
200+ "Suspended": 2,
201+ "Stopped": 3
202+ }
203+ }
204+ Property { name: "appId"; type: "string"; isReadonly: true }
205+ Property { name: "name"; type: "string"; isReadonly: true }
206+ Property { name: "comment"; type: "string"; isReadonly: true }
207+ Property { name: "icon"; type: "QUrl"; isReadonly: true }
208+ Property { name: "stage"; type: "Stage"; isReadonly: true }
209+ Property { name: "state"; type: "State"; isReadonly: true }
210+ Property { name: "focused"; type: "bool"; isReadonly: true }
211+ Property { name: "screenshot"; type: "QUrl"; isReadonly: true }
212+ Signal {
213+ name: "nameChanged"
214+ Parameter { name: "name"; type: "string" }
215+ }
216+ Signal {
217+ name: "commentChanged"
218+ Parameter { name: "comment"; type: "string" }
219+ }
220+ Signal {
221+ name: "iconChanged"
222+ Parameter { name: "icon"; type: "QUrl" }
223+ }
224+ Signal {
225+ name: "stageChanged"
226+ Parameter { name: "stage"; type: "Stage" }
227+ }
228+ Signal {
229+ name: "stateChanged"
230+ Parameter { name: "state"; type: "State" }
231+ }
232+ Signal {
233+ name: "focusedChanged"
234+ Parameter { name: "focused"; type: "bool" }
235+ }
236+ Signal {
237+ name: "screenshotChanged"
238+ Parameter { name: "screenshot"; type: "QUrl" }
239+ }
240+ }
241+ Component {
242+ name: "unity::shell::application::ApplicationManagerInterface"
243+ prototype: "QAbstractListModel"
244+ exports: ["Unity.Application/ApplicationManagerInterface 0.1"]
245+ isCreatable: false
246+ exportMetaObjectRevisions: [0]
247+ Enum {
248+ name: "Roles"
249+ values: {
250+ "RoleAppId": 256,
251+ "RoleName": 257,
252+ "RoleComment": 258,
253+ "RoleIcon": 259,
254+ "RoleStage": 260,
255+ "RoleState": 261,
256+ "RoleFocused": 262,
257+ "RoleScreenshot": 263
258+ }
259+ }
260+ Property { name: "count"; type: "int"; isReadonly: true }
261+ Property { name: "focusedApplicationId"; type: "string"; isReadonly: true }
262+ Property { name: "suspended"; type: "bool" }
263+ Signal {
264+ name: "focusRequested"
265+ Parameter { name: "appId"; type: "string" }
266+ }
267+ Signal {
268+ name: "applicationAdded"
269+ Parameter { name: "appId"; type: "string" }
270+ }
271+ Signal {
272+ name: "applicationRemoved"
273+ Parameter { name: "appId"; type: "string" }
274+ }
275+ Method {
276+ name: "get"
277+ type: "unity::shell::application::ApplicationInfoInterface*"
278+ Parameter { name: "index"; type: "int" }
279+ }
280+ Method {
281+ name: "findApplication"
282+ type: "unity::shell::application::ApplicationInfoInterface*"
283+ Parameter { name: "appId"; type: "string" }
284+ }
285+ Method {
286+ name: "requestFocusApplication"
287+ type: "bool"
288+ Parameter { name: "appId"; type: "string" }
289+ }
290+ Method {
291+ name: "focusApplication"
292+ type: "bool"
293+ Parameter { name: "appId"; type: "string" }
294+ }
295+ Method { name: "unfocusCurrentApplication" }
296+ Method {
297+ name: "startApplication"
298+ type: "unity::shell::application::ApplicationInfoInterface*"
299+ Parameter { name: "appId"; type: "string" }
300+ Parameter { name: "arguments"; type: "QStringList" }
301+ }
302+ Method {
303+ name: "stopApplication"
304+ type: "bool"
305+ Parameter { name: "appId"; type: "string" }
306+ }
307+ Method {
308+ name: "updateScreenshot"
309+ type: "bool"
310+ Parameter { name: "appId"; type: "string" }
311+ }
312+ }
313+}
tests/mocks/Unity/Application/CMakeLists.txt+2−1
@@ -22,4 +22,5 @@ add_unity8_mock(Unity.Application 0.1 Unity/Application PREFIX mocks TARGETS Fak
22add_unity8_mock(Unity.Application 0.1 Unity/Application
22add_unity8_mock(Unity.Application 0.1 Unity/Application
23 PREFIX nonmirplugins
23 PREFIX nonmirplugins
24 TARGETS NonMirUnityApplicationQml
24 TARGETS NonMirUnityApplicationQml
25− BINARY_DIR ${CMAKE_BINARY_DIR}/nonmirplugins)
25+ BINARY_DIR ${CMAKE_BINARY_DIR}/nonmirplugins
26+ NO_TYPES)
tests/mocks/Unity/CMakeLists.txt+1−1
@@ -6,7 +6,7 @@ add_subdirectory(Notifications)
6pkg_search_module(DEE dee-1.0 REQUIRED)
6pkg_search_module(DEE dee-1.0 REQUIRED)
7pkg_search_module(GOBJECT gobject-2.0 REQUIRED)
7pkg_search_module(GOBJECT gobject-2.0 REQUIRED)
8pkg_search_module(DEEQT libdee-qt5 REQUIRED)
8pkg_search_module(DEEQT libdee-qt5 REQUIRED)
9−pkg_check_modules(SCOPES_API REQUIRED unity-shell-scopes=1)
9+pkg_check_modules(SCOPES_API REQUIRED unity-shell-scopes=2)
10
10
11include_directories(
11include_directories(
12 ${CMAKE_CURRENT_BINARY_DIR}
12 ${CMAKE_CURRENT_BINARY_DIR}
tests/mocks/Unity/Indicators/IndicatorBase.qmldeleted−38
@@ -1,38 +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 Lesser General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Nick Dedekind <nick.dedekind@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import QMenuModel 0.1
22−
23−Item {
24− id: indicatorBase
25−
26− //const
27− property string busName
28− property string actionsObjectPath
29− property string menuObjectPath
30− property string rootMenuType: "com.canonical.indicator.root"
31− property string deviceMenuObjectPath: menuObjectPath
32−
33− property var menuModel: UnityMenuModel {}
34−
35− property RootActionState rootActionState: RootActionState {
36− onUpdated: indicatorBase.rootActionStateChanged()
37− }
38−}
tests/mocks/Unity/Indicators/Indicators.qmltypesnew file+210
@@ -0,0 +1,210 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable Unity.Indicators 0.1 tests/mocks'
8+
9+Module {
10+ Component {
11+ name: "ActionState"
12+ prototype: "QObject"
13+ exports: ["Unity.Indicators/ActionState 0.1"]
14+ isCreatable: false
15+ exportMetaObjectRevisions: [0]
16+ Enum {
17+ name: "ActionStates"
18+ values: {
19+ "Label": 0,
20+ "IconSource": 1,
21+ "AccessableName": 2,
22+ "Visible": 3
23+ }
24+ }
25+ }
26+ Component {
27+ name: "FakeIndicatorsModel"
28+ prototype: "QAbstractListModel"
29+ exports: ["Unity.Indicators/FakeIndicatorsModel 0.1"]
30+ exportMetaObjectRevisions: [0]
31+ Property { name: "count"; type: "int"; isReadonly: true }
32+ Method {
33+ name: "load"
34+ Parameter { name: "profile"; type: "string" }
35+ }
36+ Method { name: "unload" }
37+ Method {
38+ name: "append"
39+ Parameter { name: "row"; type: "QVariantMap" }
40+ }
41+ Method {
42+ name: "data"
43+ type: "QVariant"
44+ Parameter { name: "row"; type: "int" }
45+ Parameter { name: "role"; type: "int" }
46+ }
47+ }
48+ Component {
49+ name: "FlatMenuProxyModelRole"
50+ prototype: "QObject"
51+ exports: ["Unity.Indicators/FlatMenuProxyModelRole 0.1"]
52+ isCreatable: false
53+ exportMetaObjectRevisions: [0]
54+ Enum {
55+ name: "Roles"
56+ values: {
57+ "Action": 1,
58+ "Label": 2,
59+ "Extra": 3,
60+ "Depth": 4,
61+ "hasSection": 5,
62+ "hasSubMenu": 6
63+ }
64+ }
65+ }
66+ Component {
67+ name: "IndicatorsModelRole"
68+ prototype: "QObject"
69+ exports: ["Unity.Indicators/IndicatorsModelRole 0.1"]
70+ isCreatable: false
71+ exportMetaObjectRevisions: [0]
72+ Enum {
73+ name: "Roles"
74+ values: {
75+ "Identifier": 0,
76+ "Position": 1,
77+ "WidgetSource": 2,
78+ "PageSource": 3,
79+ "IndicatorProperties": 4,
80+ "IsVisible": 5
81+ }
82+ }
83+ }
84+ Component {
85+ name: "MenuContentActivator"
86+ prototype: "QObject"
87+ exports: ["Unity.Indicators/MenuContentActivator 0.1"]
88+ exportMetaObjectRevisions: [0]
89+ Property { name: "baseIndex"; type: "int" }
90+ Property { name: "running"; type: "bool" }
91+ Property { name: "count"; type: "int" }
92+ Property { name: "content"; type: "MenuContentState"; isList: true; isReadonly: true }
93+ Signal {
94+ name: "baseIndexChanged"
95+ Parameter { name: "baseIndex"; type: "int" }
96+ }
97+ Signal {
98+ name: "deltaChanged"
99+ Parameter { name: "delta"; type: "int" }
100+ }
101+ Signal {
102+ name: "runningChanged"
103+ Parameter { name: "running"; type: "bool" }
104+ }
105+ Signal {
106+ name: "countChanged"
107+ Parameter { name: "count"; type: "int" }
108+ }
109+ Method { name: "restart" }
110+ Method { name: "stop" }
111+ Method { name: "clear" }
112+ Method {
113+ name: "isMenuContentActive"
114+ type: "bool"
115+ Parameter { name: "index"; type: "int" }
116+ }
117+ }
118+ Component {
119+ name: "MenuContentState"
120+ prototype: "QObject"
121+ exports: ["Unity.Indicators/MenuContentState 0.1"]
122+ isCreatable: false
123+ exportMetaObjectRevisions: [0]
124+ Property { name: "active"; type: "bool"; isReadonly: true }
125+ }
126+ Component {
127+ name: "NetworkActionState"
128+ prototype: "QObject"
129+ exports: ["Unity.Indicators/NetworkActionState 0.1"]
130+ isCreatable: false
131+ exportMetaObjectRevisions: [0]
132+ Enum {
133+ name: "NetworkActionStates"
134+ values: {
135+ "Connection": 1,
136+ "SignalStrength": 2
137+ }
138+ }
139+ }
140+ Component {
141+ name: "NetworkConnection"
142+ prototype: "QObject"
143+ exports: ["Unity.Indicators/NetworkConnection 0.1"]
144+ isCreatable: false
145+ exportMetaObjectRevisions: [0]
146+ Enum {
147+ name: "NetworkConnectionStates"
148+ values: {
149+ "Initial": 0,
150+ "Activating": 1,
151+ "Activated": 2,
152+ "Deactivating": 3
153+ }
154+ }
155+ }
156+ Component {
157+ name: "QAbstractProxyModel"
158+ prototype: "QAbstractItemModel"
159+ Property { name: "sourceModel"; type: "QAbstractItemModel"; isPointer: true }
160+ }
161+ Component { name: "QIdentityProxyModel"; prototype: "QAbstractProxyModel" }
162+ Component {
163+ name: "UnityMenuModelStack"
164+ prototype: "QObject"
165+ exports: ["Unity.Indicators/UnityMenuModelStack 0.1"]
166+ exportMetaObjectRevisions: [0]
167+ Property { name: "head"; type: "UnityMenuModel"; isPointer: true }
168+ Property { name: "tail"; type: "UnityMenuModel"; isReadonly: true; isPointer: true }
169+ Property { name: "count"; type: "int"; isReadonly: true }
170+ Signal {
171+ name: "headChanged"
172+ Parameter { name: "head"; type: "UnityMenuModel"; isPointer: true }
173+ }
174+ Signal {
175+ name: "tailChanged"
176+ Parameter { name: "tail"; type: "UnityMenuModel"; isPointer: true }
177+ }
178+ Signal {
179+ name: "countChanged"
180+ Parameter { name: "count"; type: "int" }
181+ }
182+ Method {
183+ name: "push"
184+ Parameter { name: "model"; type: "UnityMenuModel"; isPointer: true }
185+ Parameter { name: "menuIndex"; type: "int" }
186+ }
187+ Method { name: "pop"; type: "UnityMenuModel*" }
188+ }
189+ Component {
190+ name: "VisibleIndicatorsModel"
191+ prototype: "QIdentityProxyModel"
192+ exports: ["Unity.Indicators/VisibleIndicatorsModel 0.1"]
193+ exportMetaObjectRevisions: [0]
194+ Property { name: "model"; type: "QAbstractItemModel"; isPointer: true }
195+ Property { name: "visible"; type: "QVariantMap" }
196+ Signal { name: "totalCountChanged" }
197+ Method {
198+ name: "onBeginRowInserted"
199+ Parameter { type: "QModelIndex" }
200+ Parameter { name: "start"; type: "int" }
201+ Parameter { name: "end"; type: "int" }
202+ }
203+ Method {
204+ name: "onRowInserted"
205+ Parameter { type: "QModelIndex" }
206+ Parameter { name: "start"; type: "int" }
207+ Parameter { name: "end"; type: "int" }
208+ }
209+ }
210+}
tests/mocks/Unity/Indicators/fakeindicatorsmodel.cpp+1−1
@@ -31,7 +31,7 @@ FakeIndicatorsModel::FakeIndicatorsModel(QObject *parent)
31/*! \internal */
31/*! \internal */
32FakeIndicatorsModel::~FakeIndicatorsModel()
32FakeIndicatorsModel::~FakeIndicatorsModel()
33{
33{
34− unload();
34+ qDeleteAll(m_indicators);
35}
35}
36
36
37int FakeIndicatorsModel::count() const
37int FakeIndicatorsModel::count() const
tests/mocks/Unity/Indicators/qmldir−2
@@ -3,8 +3,6 @@ plugin IndicatorsFakeQml
3typeinfo Indicators.qmltypes
3typeinfo Indicators.qmltypes
4
4
5CachedUnityMenuModel 0.1 CachedUnityMenuModel.qml
5CachedUnityMenuModel 0.1 CachedUnityMenuModel.qml
6−IndicatorBase 0.1 IndicatorBase.qml
7IndicatorsModel 0.1 IndicatorsModel.qml
6IndicatorsModel 0.1 IndicatorsModel.qml
8FakeMenuPage 0.1 FakeMenuPage.qml
7FakeMenuPage 0.1 FakeMenuPage.qml
9−MenuItemFactory 0.1 MenuItemFactory.qml
10RootActionState 0.1 RootActionState.qml
8RootActionState 0.1 RootActionState.qml
tests/mocks/Unity/Launcher/Launcher.qmltypesnew file+171
@@ -0,0 +1,171 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable Unity.Launcher 0.1 tests/mocks'
8+
9+Module {
10+ Component {
11+ name: "MockLauncherItem"
12+ prototype: "unity::shell::launcher::LauncherItemInterface"
13+ exports: ["Unity.Launcher/LauncherItem 0.1"]
14+ isCreatable: false
15+ exportMetaObjectRevisions: [0]
16+ }
17+ Component {
18+ name: "MockLauncherModel"
19+ prototype: "unity::shell::launcher::LauncherModelInterface"
20+ exports: ["Unity.Launcher/LauncherModel 0.1"]
21+ isCreatable: false
22+ isSingleton: true
23+ exportMetaObjectRevisions: [0]
24+ Signal {
25+ name: "quickListTriggered"
26+ Parameter { name: "appId"; type: "string" }
27+ Parameter { name: "index"; type: "int" }
28+ }
29+ Method {
30+ name: "get"
31+ type: "unity::shell::launcher::LauncherItemInterface*"
32+ Parameter { name: "index"; type: "int" }
33+ }
34+ Method {
35+ name: "move"
36+ Parameter { name: "oldIndex"; type: "int" }
37+ Parameter { name: "newIndex"; type: "int" }
38+ }
39+ Method {
40+ name: "pin"
41+ Parameter { name: "appId"; type: "string" }
42+ Parameter { name: "index"; type: "int" }
43+ }
44+ Method {
45+ name: "pin"
46+ Parameter { name: "appId"; type: "string" }
47+ }
48+ Method {
49+ name: "requestRemove"
50+ Parameter { name: "appId"; type: "string" }
51+ }
52+ Method {
53+ name: "quickListActionInvoked"
54+ Parameter { name: "appId"; type: "string" }
55+ Parameter { name: "actionIndex"; type: "int" }
56+ }
57+ Method {
58+ name: "setUser"
59+ Parameter { name: "username"; type: "string" }
60+ }
61+ Method {
62+ name: "getUrlForAppId"
63+ type: "string"
64+ Parameter { name: "appId"; type: "string" }
65+ }
66+ }
67+ Component {
68+ name: "MockQuickListModel"
69+ prototype: "unity::shell::launcher::QuickListModelInterface"
70+ exports: ["Unity.Launcher/QuickListModel 0.1"]
71+ isCreatable: false
72+ exportMetaObjectRevisions: [0]
73+ }
74+ Component {
75+ name: "unity::shell::launcher::LauncherItemInterface"
76+ prototype: "QObject"
77+ exports: ["Unity.Launcher/LauncherItemInterface 0.1"]
78+ isCreatable: false
79+ exportMetaObjectRevisions: [0]
80+ Property { name: "appId"; type: "string"; isReadonly: true }
81+ Property { name: "name"; type: "string"; isReadonly: true }
82+ Property { name: "icon"; type: "string"; isReadonly: true }
83+ Property { name: "pinned"; type: "bool"; isReadonly: true }
84+ Property { name: "running"; type: "bool"; isReadonly: true }
85+ Property { name: "recent"; type: "bool"; isReadonly: true }
86+ Property { name: "progress"; type: "int"; isReadonly: true }
87+ Property { name: "count"; type: "int"; isReadonly: true }
88+ Property { name: "focused"; type: "bool"; isReadonly: true }
89+ Property {
90+ name: "quickList"
91+ type: "unity::shell::launcher::QuickListModelInterface"
92+ isReadonly: true
93+ isPointer: true
94+ }
95+ Signal {
96+ name: "pinnedChanged"
97+ Parameter { name: "pinned"; type: "bool" }
98+ }
99+ Signal {
100+ name: "runningChanged"
101+ Parameter { name: "running"; type: "bool" }
102+ }
103+ Signal {
104+ name: "recentChanged"
105+ Parameter { name: "running"; type: "bool" }
106+ }
107+ Signal {
108+ name: "progressChanged"
109+ Parameter { name: "progress"; type: "int" }
110+ }
111+ Signal {
112+ name: "countChanged"
113+ Parameter { name: "count"; type: "int" }
114+ }
115+ Signal {
116+ name: "focusedChanged"
117+ Parameter { name: "focused"; type: "bool" }
118+ }
119+ }
120+ Component {
121+ name: "unity::shell::launcher::LauncherModelInterface"
122+ prototype: "QAbstractListModel"
123+ exports: ["Unity.Launcher/LauncherModelInterface 0.1"]
124+ isCreatable: false
125+ exportMetaObjectRevisions: [0]
126+ Property {
127+ name: "applicationManager"
128+ type: "unity::shell::application::ApplicationManagerInterface"
129+ isPointer: true
130+ }
131+ Method {
132+ name: "move"
133+ Parameter { name: "oldIndex"; type: "int" }
134+ Parameter { name: "newIndex"; type: "int" }
135+ }
136+ Method {
137+ name: "get"
138+ type: "unity::shell::launcher::LauncherItemInterface*"
139+ Parameter { name: "index"; type: "int" }
140+ }
141+ Method {
142+ name: "pin"
143+ Parameter { name: "appId"; type: "string" }
144+ Parameter { name: "index"; type: "int" }
145+ }
146+ Method {
147+ name: "pin"
148+ Parameter { name: "appId"; type: "string" }
149+ }
150+ Method {
151+ name: "requestRemove"
152+ Parameter { name: "appId"; type: "string" }
153+ }
154+ Method {
155+ name: "quickListActionInvoked"
156+ Parameter { name: "appId"; type: "string" }
157+ Parameter { name: "actionIndex"; type: "int" }
158+ }
159+ Method {
160+ name: "setUser"
161+ Parameter { name: "username"; type: "string" }
162+ }
163+ }
164+ Component {
165+ name: "unity::shell::launcher::QuickListModelInterface"
166+ prototype: "QAbstractListModel"
167+ exports: ["Unity.Launcher/QuickListModelInterface 0.1"]
168+ isCreatable: false
169+ exportMetaObjectRevisions: [0]
170+ }
171+}
tests/mocks/Unity/Launcher/MockLauncherModel.cpp+6−1
@@ -24,10 +24,12 @@ MockLauncherModel::MockLauncherModel(QObject* parent): LauncherModelInterface(pa
24{
24{
25 MockLauncherItem *item = new MockLauncherItem("dialer-app", "/usr/share/applications/dialer-app.desktop", "Dialer", "dialer-app", this);
25 MockLauncherItem *item = new MockLauncherItem("dialer-app", "/usr/share/applications/dialer-app.desktop", "Dialer", "dialer-app", this);
26 item->setProgress(0);
26 item->setProgress(0);
27− m_list.append(item);
27+ item->setPinned(true);
28 item->setFocused(true);
28 item->setFocused(true);
29+ m_list.append(item);
29 item = new MockLauncherItem("camera-app", "/usr/share/applications/camera-app.desktop", "Camera", "camera", this);
30 item = new MockLauncherItem("camera-app", "/usr/share/applications/camera-app.desktop", "Camera", "camera", this);
30 item->setProgress(10);
31 item->setProgress(10);
32+ item->setPinned(true);
31 m_list.append(item);
33 m_list.append(item);
32 item = new MockLauncherItem("gallery-app", "/usr/share/applications/gallery-app.desktop", "Gallery", "gallery", this);
34 item = new MockLauncherItem("gallery-app", "/usr/share/applications/gallery-app.desktop", "Gallery", "gallery", this);
33 item->setProgress(50);
35 item->setProgress(50);
@@ -40,6 +42,7 @@ MockLauncherModel::MockLauncherModel(QObject* parent): LauncherModelInterface(pa
40 m_list.append(item);
42 m_list.append(item);
41 item = new MockLauncherItem("twitter-webapp", "/usr/share/applications/twitter-webapp.desktop", "Twitter", "twitter", this);
43 item = new MockLauncherItem("twitter-webapp", "/usr/share/applications/twitter-webapp.desktop", "Twitter", "twitter", this);
42 item->setCount(12);
44 item->setCount(12);
45+ item->setPinned(true);
43 m_list.append(item);
46 m_list.append(item);
44 item = new MockLauncherItem("gmail-webapp", "/usr/share/applications/gmail-webapp.desktop", "GMail", "gmail", this);
47 item = new MockLauncherItem("gmail-webapp", "/usr/share/applications/gmail-webapp.desktop", "GMail", "gmail", this);
45 item->setCount(123);
48 item->setCount(123);
@@ -51,8 +54,10 @@ MockLauncherModel::MockLauncherModel(QObject* parent): LauncherModelInterface(pa
51 item->setProgress(50);
54 item->setProgress(50);
52 item->setCount(5);
55 item->setCount(5);
53 item->setFocused(true);
56 item->setFocused(true);
57+ item->setPinned(true);
54 m_list.append(item);
58 m_list.append(item);
55 item = new MockLauncherItem("calendar-app", "/usr/share/applications/calendar-app.desktop","Calendar", "calendar", this);
59 item = new MockLauncherItem("calendar-app", "/usr/share/applications/calendar-app.desktop","Calendar", "calendar", this);
60+ item->setPinned(true);
56 m_list.append(item);
61 m_list.append(item);
57}
62}
58
63
tests/mocks/Unity/Notifications/Notifications.qmltypesnew file+10
@@ -0,0 +1,10 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable Unity.Notifications 1.0 tests/mocks'
8+
9+Module {
10+}
tests/mocks/Unity/Unity.qmltypesnew file+345
@@ -0,0 +1,345 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable Unity 0.2 tests/mocks'
8+
9+Module {
10+ Component {
11+ name: "Categories"
12+ prototype: "unity::shell::scopes::CategoriesInterface"
13+ Method {
14+ name: "addSpecialCategory"
15+ Parameter { name: "categoryId"; type: "string" }
16+ Parameter { name: "name"; type: "string" }
17+ Parameter { name: "icon"; type: "string" }
18+ Parameter { name: "rawTemplate"; type: "string" }
19+ Parameter { name: "countObject"; type: "QObject"; isPointer: true }
20+ }
21+ Method {
22+ name: "overrideCategoryJson"
23+ type: "bool"
24+ Parameter { name: "categoryId"; type: "string" }
25+ Parameter { name: "json"; type: "string" }
26+ }
27+ }
28+ Component {
29+ name: "PreviewModel"
30+ prototype: "unity::shell::scopes::PreviewModelInterface"
31+ exports: ["Unity/FakePreviewModel 0.2"]
32+ exportMetaObjectRevisions: [0]
33+ }
34+ Component {
35+ name: "PreviewStack"
36+ prototype: "unity::shell::scopes::PreviewStackInterface"
37+ exports: ["Unity/PreviewStack 0.2"]
38+ isCreatable: false
39+ exportMetaObjectRevisions: [0]
40+ Method {
41+ name: "getPreviewModel"
42+ type: "unity::shell::scopes::PreviewModelInterface*"
43+ Parameter { name: "index"; type: "int" }
44+ }
45+ }
46+ Component {
47+ name: "PreviewWidgetModel"
48+ prototype: "unity::shell::scopes::PreviewWidgetModelInterface"
49+ exports: ["Unity/PreviewWidgetModel 0.2"]
50+ isCreatable: false
51+ exportMetaObjectRevisions: [0]
52+ }
53+ Component {
54+ name: "ResultsModel"
55+ prototype: "unity::shell::scopes::ResultsModelInterface"
56+ exports: ["Unity/ResultsModel 0.2"]
57+ isCreatable: false
58+ exportMetaObjectRevisions: [0]
59+ }
60+ Component {
61+ name: "Scope"
62+ prototype: "unity::shell::scopes::ScopeInterface"
63+ exports: ["Unity/MockScope 0.2"]
64+ exportMetaObjectRevisions: [0]
65+ Method {
66+ name: "setSearchInProgress"
67+ Parameter { name: "inProg"; type: "bool" }
68+ }
69+ Method {
70+ name: "activate"
71+ Parameter { name: "result"; type: "QVariant" }
72+ }
73+ Method {
74+ name: "preview"
75+ type: "PreviewStack*"
76+ Parameter { name: "result"; type: "QVariant" }
77+ }
78+ Method { name: "cancelActivation" }
79+ Method {
80+ name: "closeScope"
81+ Parameter { name: "scope"; type: "unity::shell::scopes::ScopeInterface"; isPointer: true }
82+ }
83+ Method {
84+ name: "getDepartment"
85+ type: "unity::shell::scopes::DepartmentInterface*"
86+ Parameter { name: "id"; type: "string" }
87+ }
88+ Method {
89+ name: "loadDepartment"
90+ Parameter { name: "id"; type: "string" }
91+ }
92+ }
93+ Component {
94+ name: "Scopes"
95+ prototype: "unity::shell::scopes::ScopesInterface"
96+ exports: ["Unity/Scopes 0.2"]
97+ exportMetaObjectRevisions: [0]
98+ Method {
99+ name: "rowCount"
100+ type: "int"
101+ Parameter { name: "parent"; type: "QModelIndex" }
102+ }
103+ Method { name: "rowCount"; type: "int" }
104+ Method {
105+ name: "getScope"
106+ type: "unity::shell::scopes::ScopeInterface*"
107+ Parameter { name: "row"; type: "int" }
108+ }
109+ Method {
110+ name: "getScope"
111+ type: "unity::shell::scopes::ScopeInterface*"
112+ Parameter { name: "scope_id"; type: "string" }
113+ }
114+ Method {
115+ name: "addScope"
116+ Parameter { name: "scope"; type: "Scope"; isPointer: true }
117+ }
118+ Method { name: "clear" }
119+ Method { name: "load" }
120+ }
121+ Component {
122+ name: "unity::shell::scopes::CategoriesInterface"
123+ prototype: "QAbstractListModel"
124+ exports: ["Unity/Categories 0.2"]
125+ isCreatable: false
126+ exportMetaObjectRevisions: [0]
127+ Enum {
128+ name: "Roles"
129+ values: {
130+ "RoleCategoryId": 0,
131+ "RoleName": 1,
132+ "RoleIcon": 2,
133+ "RoleRawRendererTemplate": 3,
134+ "RoleRenderer": 4,
135+ "RoleComponents": 5,
136+ "RoleResults": 6,
137+ "RoleCount": 7
138+ }
139+ }
140+ Method {
141+ name: "overrideCategoryJson"
142+ type: "bool"
143+ Parameter { name: "categoryId"; type: "string" }
144+ Parameter { name: "json"; type: "string" }
145+ }
146+ Method {
147+ name: "addSpecialCategory"
148+ Parameter { name: "categoryId"; type: "string" }
149+ Parameter { name: "name"; type: "string" }
150+ Parameter { name: "icon"; type: "string" }
151+ Parameter { name: "rawTemplate"; type: "string" }
152+ Parameter { name: "countObject"; type: "QObject"; isPointer: true }
153+ }
154+ }
155+ Component {
156+ name: "unity::shell::scopes::DepartmentInterface"
157+ prototype: "QAbstractListModel"
158+ exports: ["Unity/Department 0.2"]
159+ isCreatable: false
160+ exportMetaObjectRevisions: [0]
161+ Enum {
162+ name: "Roles"
163+ values: {
164+ "RoleDepartmentId": 0,
165+ "RoleLabel": 1,
166+ "RoleHasChildren": 2,
167+ "RoleIsActive": 3
168+ }
169+ }
170+ Property { name: "departmentId"; type: "string"; isReadonly: true }
171+ Property { name: "label"; type: "string"; isReadonly: true }
172+ Property { name: "allLabel"; type: "string"; isReadonly: true }
173+ Property { name: "parentDepartmentId"; type: "string"; isReadonly: true }
174+ Property { name: "parentLabel"; type: "string"; isReadonly: true }
175+ Property { name: "loaded"; type: "bool"; isReadonly: true }
176+ Property { name: "isRoot"; type: "bool"; isReadonly: true }
177+ Property { name: "count"; type: "int"; isReadonly: true }
178+ }
179+ Component {
180+ name: "unity::shell::scopes::PreviewModelInterface"
181+ prototype: "QAbstractListModel"
182+ Enum {
183+ name: "Roles"
184+ values: {
185+ "RoleColumnModel": 0
186+ }
187+ }
188+ Property { name: "widgetColumnCount"; type: "int" }
189+ Property { name: "loaded"; type: "bool"; isReadonly: true }
190+ Property { name: "processingAction"; type: "bool"; isReadonly: true }
191+ Signal {
192+ name: "triggered"
193+ Parameter { type: "string" }
194+ Parameter { type: "string" }
195+ Parameter { type: "QVariantMap" }
196+ }
197+ }
198+ Component {
199+ name: "unity::shell::scopes::PreviewStackInterface"
200+ prototype: "QAbstractListModel"
201+ Enum {
202+ name: "Roles"
203+ values: {
204+ "RolePreviewModel": 0
205+ }
206+ }
207+ Property { name: "widgetColumnCount"; type: "int" }
208+ Method {
209+ name: "getPreviewModel"
210+ type: "unity::shell::scopes::PreviewModelInterface*"
211+ Parameter { name: "index"; type: "int" }
212+ }
213+ }
214+ Component {
215+ name: "unity::shell::scopes::PreviewWidgetModelInterface"
216+ prototype: "QAbstractListModel"
217+ Enum {
218+ name: "Roles"
219+ values: {
220+ "RoleWidgetId": 0,
221+ "RoleType": 1,
222+ "RoleProperties": 2
223+ }
224+ }
225+ }
226+ Component {
227+ name: "unity::shell::scopes::ResultsModelInterface"
228+ prototype: "QAbstractListModel"
229+ Enum {
230+ name: "Roles"
231+ values: {
232+ "RoleUri": 0,
233+ "RoleCategoryId": 1,
234+ "RoleDndUri": 2,
235+ "RoleResult": 3,
236+ "RoleTitle": 4,
237+ "RoleArt": 5,
238+ "RoleSubtitle": 6,
239+ "RoleMascot": 7,
240+ "RoleEmblem": 8,
241+ "RoleSummary": 9,
242+ "RoleAttributes": 10,
243+ "RoleBackground": 11
244+ }
245+ }
246+ Property { name: "categoryId"; type: "string" }
247+ Property { name: "count"; type: "int"; isReadonly: true }
248+ }
249+ Component {
250+ name: "unity::shell::scopes::ScopeInterface"
251+ prototype: "QObject"
252+ exports: ["Unity/Scope 0.2"]
253+ isCreatable: false
254+ exportMetaObjectRevisions: [0]
255+ Property { name: "id"; type: "string"; isReadonly: true }
256+ Property { name: "name"; type: "string"; isReadonly: true }
257+ Property { name: "iconHint"; type: "string"; isReadonly: true }
258+ Property { name: "description"; type: "string"; isReadonly: true }
259+ Property { name: "searchHint"; type: "string"; isReadonly: true }
260+ Property { name: "searchInProgress"; type: "bool"; isReadonly: true }
261+ Property { name: "visible"; type: "bool"; isReadonly: true }
262+ Property { name: "shortcut"; type: "string"; isReadonly: true }
263+ Property {
264+ name: "categories"
265+ type: "unity::shell::scopes::CategoriesInterface"
266+ isReadonly: true
267+ isPointer: true
268+ }
269+ Property { name: "searchQuery"; type: "string" }
270+ Property { name: "noResultsHint"; type: "string" }
271+ Property { name: "formFactor"; type: "string" }
272+ Property { name: "isActive"; type: "bool" }
273+ Property { name: "currentDepartmentId"; type: "string"; isReadonly: true }
274+ Property { name: "hasDepartments"; type: "bool"; isReadonly: true }
275+ Signal { name: "showDash" }
276+ Signal { name: "hideDash" }
277+ Signal {
278+ name: "gotoUri"
279+ Parameter { name: "uri"; type: "string" }
280+ }
281+ Signal {
282+ name: "previewRequested"
283+ Parameter { name: "result"; type: "QVariant" }
284+ }
285+ Signal {
286+ name: "gotoScope"
287+ Parameter { name: "scopeId"; type: "string" }
288+ }
289+ Signal {
290+ name: "openScope"
291+ Parameter { name: "scope"; type: "unity::shell::scopes::ScopeInterface"; isPointer: true }
292+ }
293+ Signal {
294+ name: "activateApplication"
295+ Parameter { name: "desktop"; type: "string" }
296+ }
297+ Method {
298+ name: "activate"
299+ Parameter { name: "result"; type: "QVariant" }
300+ }
301+ Method {
302+ name: "preview"
303+ type: "unity::shell::scopes::PreviewStackInterface*"
304+ Parameter { name: "result"; type: "QVariant" }
305+ }
306+ Method { name: "cancelActivation" }
307+ Method {
308+ name: "closeScope"
309+ Parameter { name: "scope"; type: "unity::shell::scopes::ScopeInterface"; isPointer: true }
310+ }
311+ Method {
312+ name: "getDepartment"
313+ type: "unity::shell::scopes::DepartmentInterface*"
314+ Parameter { name: "departmentId"; type: "string" }
315+ }
316+ Method {
317+ name: "loadDepartment"
318+ Parameter { name: "departmentId"; type: "string" }
319+ }
320+ }
321+ Component {
322+ name: "unity::shell::scopes::ScopesInterface"
323+ prototype: "QAbstractListModel"
324+ Enum {
325+ name: "Roles"
326+ values: {
327+ "RoleScope": 0,
328+ "RoleId": 1,
329+ "RoleVisible": 2,
330+ "RoleTitle": 3
331+ }
332+ }
333+ Property { name: "loaded"; type: "bool"; isReadonly: true }
334+ Method {
335+ name: "getScope"
336+ type: "unity::shell::scopes::ScopeInterface*"
337+ Parameter { name: "row"; type: "int" }
338+ }
339+ Method {
340+ name: "getScope"
341+ type: "unity::shell::scopes::ScopeInterface*"
342+ Parameter { name: "scopeId"; type: "string" }
343+ }
344+ }
345+}
tests/mocks/Unity/fake_categories.cpp+4
@@ -116,6 +116,8 @@ Categories::data(const QModelIndex& index, int role) const
116 map["title"] = "HOLA";
116 map["title"] = "HOLA";
117 return map;
117 return map;
118 }
118 }
119+ case RoleHeaderLink:
120+ return QString();
119 case RoleResults:
121 case RoleResults:
120 return QVariant();
122 return QVariant();
121 case RoleCount:
123 case RoleCount:
@@ -163,6 +165,8 @@ Categories::data(const QModelIndex& index, int role) const
163 map["subtitle"] = "HOLA";
165 map["subtitle"] = "HOLA";
164 return map;
166 return map;
165 }
167 }
168+ case RoleHeaderLink:
169+ return QString();
166 case RoleResults:
170 case RoleResults:
167 return QVariant::fromValue(resultsModel);
171 return QVariant::fromValue(resultsModel);
168 case RoleCount:
172 case RoleCount:
tests/mocks/Unity/fake_scope.cpp+58−19
@@ -14,6 +14,8 @@
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
15 */
16
16
17+#include <QUrl>
18+
17#include "fake_scope.h"
19#include "fake_scope.h"
18#include "fake_department.h"
20#include "fake_department.h"
19#include "fake_resultsmodel.h"
21#include "fake_resultsmodel.h"
@@ -35,87 +37,110 @@ Scope::Scope(QString const& id, QString const& name, bool visible, QObject* pare
35{
37{
36}
38}
37
39
38−QString Scope::id() const {
40+QString Scope::id() const
41+{
39 return m_id;
42 return m_id;
40}
43}
41
44
42−QString Scope::name() const {
45+QString Scope::name() const
46+{
43 return m_name;
47 return m_name;
44}
48}
45
49
46−QString Scope::searchQuery() const {
50+QString Scope::searchQuery() const
51+{
47 return m_searchQuery;
52 return m_searchQuery;
48}
53}
49
54
50−QString Scope::iconHint() const {
55+QString Scope::iconHint() const
56+{
51 return m_iconHint;
57 return m_iconHint;
52}
58}
53
59
54−QString Scope::description() const {
60+QString Scope::description() const
61+{
55 return m_description;
62 return m_description;
56}
63}
57
64
58−QString Scope::searchHint() const {
65+QString Scope::searchHint() const
66+{
59 return QString("");
67 return QString("");
60}
68}
61
69
62−QString Scope::shortcut() const {
70+QString Scope::shortcut() const
71+{
63 return QString("");
72 return QString("");
64}
73}
65
74
66−bool Scope::searchInProgress() const {
75+bool Scope::searchInProgress() const
76+{
67 return m_searching;
77 return m_searching;
68}
78}
69
79
70−unity::shell::scopes::CategoriesInterface* Scope::categories() const {
80+unity::shell::scopes::CategoriesInterface* Scope::categories() const
81+{
71 return m_categories;
82 return m_categories;
72}
83}
73
84
85+unity::shell::scopes::SettingsModelInterface* Scope::settings() const
86+{
87+ return nullptr;
88+}
89+
74−QString Scope::noResultsHint() const {
90+QString Scope::noResultsHint() const
91+{
75 return m_noResultsHint;
92 return m_noResultsHint;
76}
93}
77
94
78−QString Scope::formFactor() const {
95+QString Scope::formFactor() const
96+{
79 return m_formFactor;
97 return m_formFactor;
80}
98}
81
99
82−bool Scope::visible() const {
100+bool Scope::visible() const
101+{
83 return m_visible;
102 return m_visible;
84}
103}
85
104
86−bool Scope::isActive() const {
105+bool Scope::isActive() const
106+{
87 return m_isActive;
107 return m_isActive;
88}
108}
89
109
90−void Scope::setSearchQuery(const QString &str) {
110+void Scope::setSearchQuery(const QString &str)
111+{
91 if (str != m_searchQuery) {
112 if (str != m_searchQuery) {
92 m_searchQuery = str;
113 m_searchQuery = str;
93 Q_EMIT searchQueryChanged();
114 Q_EMIT searchQueryChanged();
94 }
115 }
95}
116}
96
117
97−void Scope::setFormFactor(const QString &str) {
118+void Scope::setFormFactor(const QString &str)
119+{
98 if (str != m_formFactor) {
120 if (str != m_formFactor) {
99 m_formFactor = str;
121 m_formFactor = str;
100 Q_EMIT formFactorChanged();
122 Q_EMIT formFactorChanged();
101 }
123 }
102}
124}
103
125
104−void Scope::setActive(const bool active) {
126+void Scope::setActive(const bool active)
127+{
105 if (active != m_isActive) {
128 if (active != m_isActive) {
106 m_isActive = active;
129 m_isActive = active;
107 Q_EMIT isActiveChanged();
130 Q_EMIT isActiveChanged();
108 }
131 }
109}
132}
110
133
111−void Scope::setSearchInProgress(const bool inProg) {
134+void Scope::setSearchInProgress(const bool inProg)
135+{
112 if (inProg != m_searching) {
136 if (inProg != m_searching) {
113 m_searching = inProg;
137 m_searching = inProg;
114 Q_EMIT searchInProgressChanged();
138 Q_EMIT searchInProgressChanged();
115 }
139 }
116}
140}
117
141
118−void Scope::setNoResultsHint(const QString& str) {
142+void Scope::setNoResultsHint(const QString& str)
143+{
119 if (str != m_noResultsHint) {
144 if (str != m_noResultsHint) {
120 m_noResultsHint = str;
145 m_noResultsHint = str;
121 Q_EMIT noResultsHintChanged();
146 Q_EMIT noResultsHintChanged();
@@ -157,7 +182,16 @@ bool Scope::hasDepartments() const
157
182
158QVariantMap Scope::customizations() const
183QVariantMap Scope::customizations() const
159{
184{
185+ QVariantMap m;
186+ if (m_id == "clickscope") {
187+ m["background-color"] = "red";
188+ m["foreground-color"] = "blue";
189+ } else if (m_id == "MockScope5") {
190+ QVariantMap pageHeader;
191+ pageHeader["logo"] = QUrl("../../../tests/qmltests/Components/tst_PageHeader/logo-ubuntu-orange.svg");
192+ m["page-header"] = pageHeader;
193+ }
160− return QVariantMap();
194+ return m;
161}
195}
162
196
163unity::shell::scopes::DepartmentInterface* Scope::getDepartment(const QString& id)
197unity::shell::scopes::DepartmentInterface* Scope::getDepartment(const QString& id)
@@ -182,3 +216,8 @@ void Scope::loadDepartment(const QString& id)
182 m_currentDeparment = id;
216 m_currentDeparment = id;
183 Q_EMIT currentDepartmentIdChanged();
217 Q_EMIT currentDepartmentIdChanged();
184}
218}
219+
220+void Scope::performQuery(const QString& query)
221+{
222+ Q_UNUSED(query);
223+}
tests/mocks/Unity/fake_scope.h+2
@@ -46,6 +46,7 @@ public:
46 QString noResultsHint() const override;
46 QString noResultsHint() const override;
47 QString formFactor() const override;
47 QString formFactor() const override;
48 bool isActive() const override;
48 bool isActive() const override;
49+ unity::shell::scopes::SettingsModelInterface* settings() const override;
49
50
50 /* setters */
51 /* setters */
51 void setSearchQuery(const QString& search_query) override;
52 void setSearchQuery(const QString& search_query) override;
@@ -63,6 +64,7 @@ public:
63 bool hasDepartments() const override;
64 bool hasDepartments() const override;
64 Q_INVOKABLE unity::shell::scopes::DepartmentInterface* getDepartment(const QString& id) override;
65 Q_INVOKABLE unity::shell::scopes::DepartmentInterface* getDepartment(const QString& id) override;
65 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;
66
68
67 QVariantMap customizations() const override;
69 QVariantMap customizations() const override;
68
70
tests/mocks/Unity/fake_unity_plugin.cpp+1
@@ -45,6 +45,7 @@ void FakeUnityPlugin::registerTypes(const char *uri)
45 qmlRegisterUncreatableType<unity::shell::scopes::ScopeInterface>(uri, 0, 2, "Scope", "Can't create Scope object in QML.");
45 qmlRegisterUncreatableType<unity::shell::scopes::ScopeInterface>(uri, 0, 2, "Scope", "Can't create Scope object in QML.");
46 qmlRegisterUncreatableType<unity::shell::scopes::DepartmentInterface>(uri, 0, 2, "Department", "Can't create Department object in QML.");
46 qmlRegisterUncreatableType<unity::shell::scopes::DepartmentInterface>(uri, 0, 2, "Department", "Can't create Department object in QML.");
47 qmlRegisterUncreatableType<unity::shell::scopes::CategoriesInterface>(uri, 0, 2, "Categories", "Can't create Categories object in QML.");
47 qmlRegisterUncreatableType<unity::shell::scopes::CategoriesInterface>(uri, 0, 2, "Categories", "Can't create Categories object in QML.");
48+ qmlRegisterUncreatableType<unity::shell::scopes::PreviewModelInterface>(uri, 0, 2, "PreviewModel", "Can't create new PreviewModel in QML. Get them from PreviewStack instance.");
48 qmlRegisterUncreatableType<ResultsModel>(uri, 0, 2, "ResultsModel", "Can't create ResultsModel object in QML.");
49 qmlRegisterUncreatableType<ResultsModel>(uri, 0, 2, "ResultsModel", "Can't create ResultsModel object in QML.");
49 qmlRegisterType<PreviewModel>(uri, 0, 2, "FakePreviewModel");
50 qmlRegisterType<PreviewModel>(uri, 0, 2, "FakePreviewModel");
50 qmlRegisterUncreatableType<PreviewWidgetModel>(uri, 0, 2, "PreviewWidgetModel", "Can't create new PreviewWidgetModel in QML. Get them from PreviewModel instance.");
51 qmlRegisterUncreatableType<PreviewWidgetModel>(uri, 0, 2, "PreviewWidgetModel", "Can't create new PreviewWidgetModel in QML. Get them from PreviewModel instance.");
tests/plugins/Dash/CMakeLists.txt+2
@@ -76,4 +76,6 @@ add_binary_qml_test(CardCreator "" "Dash-qml")
76# plain qml test
76# plain qml test
77set(qmltest_DEFAULT_TARGETS qmluitests)
77set(qmltest_DEFAULT_TARGETS qmluitests)
78set(qmltest_DEFAULT_NO_ADD_TEST TRUE)
78set(qmltest_DEFAULT_NO_ADD_TEST TRUE)
79+set(qmltest_DEFAULT_PROPERTIES ENVIRONMENT "LC_ALL=C")
80+add_qml_test(. ScopeStyle IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins)
79add_qml_test(. ListViewWithPageHeaderQML IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins)
81add_qml_test(. ListViewWithPageHeaderQML IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins)
tests/plugins/Dash/cardcreator/1.res+3−2
@@ -5,7 +5,8 @@ AbstractButton {
5 property var cardData;
5 property var cardData;
6 property var artShapeBorderSource: undefined;
6 property var artShapeBorderSource: undefined;
7 property real fontScale: 1.0;
7 property real fontScale: 1.0;
8+ property var scopeStyle: null;
8− property int headerAlignment: Text.AlignLeft;
9+ property int headerAlignment: Text.AlignLeft;
9 property int fixedHeaderHeight: -1;
10 property int fixedHeaderHeight: -1;
10 property size fixedArtShapeSize: Qt.size(-1, -1);
11 property size fixedArtShapeSize: Qt.size(-1, -1);
11 readonly property string title: cardData && cardData["title"] || "";
12 readonly property string title: cardData && cardData["title"] || "";
@@ -75,7 +76,7 @@ leftMargin: units.gu(1);
75 wrapMode: Text.Wrap;
76 wrapMode: Text.Wrap;
76 maximumLineCount: 2;
77 maximumLineCount: 2;
77 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
78 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
78− color: "grey";
79+ color: root.scopeStyle ? root.scopeStyle.foreground : "grey";
79 visible: showHeader ;
80 visible: showHeader ;
80 text: root.title;
81 text: root.title;
81 font.weight: components && components["subtitle"] ? Font.DemiBold : Font.Normal;
82 font.weight: components && components["subtitle"] ? Font.DemiBold : Font.Normal;
tests/plugins/Dash/cardcreator/2.res+5−5
@@ -5,7 +5,8 @@ AbstractButton {
5 property var cardData;
5 property var cardData;
6 property var artShapeBorderSource: undefined;
6 property var artShapeBorderSource: undefined;
7 property real fontScale: 1.0;
7 property real fontScale: 1.0;
8+ property var scopeStyle: null;
8− property int headerAlignment: Text.AlignLeft;
9+ property int headerAlignment: Text.AlignLeft;
9 property int fixedHeaderHeight: -1;
10 property int fixedHeaderHeight: -1;
10 property size fixedArtShapeSize: Qt.size(-1, -1);
11 property size fixedArtShapeSize: Qt.size(-1, -1);
11 readonly property string title: cardData && cardData["title"] || "";
12 readonly property string title: cardData && cardData["title"] || "";
@@ -78,8 +79,7 @@ Column {
78 anchors.verticalCenter: parent.verticalCenter;
79 anchors.verticalCenter: parent.verticalCenter;
79 spacing: units.dp(2);
80 spacing: units.dp(2);
80 width: parent.width - x;
81 width: parent.width - x;
81− data: [
82−Label {
82+ data: [ Label {
83 id: titleLabel;
83 id: titleLabel;
84 objectName: "titleLabel";
84 objectName: "titleLabel";
85 anchors { left: parent.left; right: parent.right }
85 anchors { left: parent.left; right: parent.right }
@@ -88,7 +88,7 @@ Label {
88 wrapMode: Text.Wrap;
88 wrapMode: Text.Wrap;
89 maximumLineCount: 2;
89 maximumLineCount: 2;
90 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
90 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
91− color: backgroundLoader.active && backgroundLoader.item && backgroundLoader.item.luminance < 0.7 ? "white" : "grey";
91+ color: backgroundLoader.active && backgroundLoader.item && backgroundLoader.item.luminance < 0.7 ? "white" : (root.scopeStyle ? root.scopeStyle.foreground : "grey");
92 visible: showHeader ;
92 visible: showHeader ;
93 text: root.title;
93 text: root.title;
94 font.weight: components && components["subtitle"] ? Font.DemiBold : Font.Normal;
94 font.weight: components && components["subtitle"] ? Font.DemiBold : Font.Normal;
@@ -103,7 +103,7 @@ Label {
103 elide: Text.ElideRight;
103 elide: Text.ElideRight;
104 fontSize: "small";
104 fontSize: "small";
105 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
105 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
106− color: backgroundLoader.active && backgroundLoader.item && backgroundLoader.item.luminance < 0.7 ? "white" : "grey";
106+ color: backgroundLoader.active && backgroundLoader.item && backgroundLoader.item.luminance < 0.7 ? "white" : (root.scopeStyle ? root.scopeStyle.foreground : "grey");
107 visible: titleLabel.visible && titleLabel.text;
107 visible: titleLabel.visible && titleLabel.text;
108 text: cardData && cardData["subtitle"] || "";
108 text: cardData && cardData["subtitle"] || "";
109 font.weight: Font.Light;
109 font.weight: Font.Light;
tests/plugins/Dash/cardcreator/3.res+6−4
@@ -5,7 +5,8 @@ AbstractButton {
5 property var cardData;
5 property var cardData;
6 property var artShapeBorderSource: undefined;
6 property var artShapeBorderSource: undefined;
7 property real fontScale: 1.0;
7 property real fontScale: 1.0;
8+ property var scopeStyle: null;
8− property int headerAlignment: Text.AlignLeft;
9+ property int headerAlignment: Text.AlignLeft;
9 property int fixedHeaderHeight: -1;
10 property int fixedHeaderHeight: -1;
10 property size fixedArtShapeSize: Qt.size(-1, -1);
11 property size fixedArtShapeSize: Qt.size(-1, -1);
11 readonly property string title: cardData && cardData["title"] || "";
12 readonly property string title: cardData && cardData["title"] || "";
@@ -75,7 +76,7 @@ leftMargin: units.gu(1);
75 wrapMode: Text.Wrap;
76 wrapMode: Text.Wrap;
76 maximumLineCount: 2;
77 maximumLineCount: 2;
77 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
78 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
78− color: "grey";
79+ color: root.scopeStyle ? root.scopeStyle.foreground : "grey";
79 visible: showHeader ;
80 visible: showHeader ;
80 text: root.title;
81 text: root.title;
81 font.weight: components && components["subtitle"] ? Font.DemiBold : Font.Normal;
82 font.weight: components && components["subtitle"] ? Font.DemiBold : Font.Normal;
@@ -88,11 +89,12 @@ Label {
88 leftMargin: titleLabel.leftMargin;
89 leftMargin: titleLabel.leftMargin;
89 right: titleLabel.right;
90 right: titleLabel.right;
90 top: titleLabel.bottom;
91 top: titleLabel.bottom;
91− topMargin: units.dp(2); }
92+ topMargin: units.dp(2);
93+ }
92 elide: Text.ElideRight;
94 elide: Text.ElideRight;
93 fontSize: "small";
95 fontSize: "small";
94 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
96 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
95− color: "grey";
97+ color: root.scopeStyle ? root.scopeStyle.foreground : "grey";
96 visible: titleLabel.visible && titleLabel.text;
98 visible: titleLabel.visible && titleLabel.text;
97 text: cardData && cardData["subtitle"] || "";
99 text: cardData && cardData["subtitle"] || "";
98 font.weight: Font.Light;
100 font.weight: Font.Light;
tests/plugins/Dash/cardcreator/4.res+4−3
@@ -5,7 +5,8 @@ AbstractButton {
5 property var cardData;
5 property var cardData;
6 property var artShapeBorderSource: undefined;
6 property var artShapeBorderSource: undefined;
7 property real fontScale: 1.0;
7 property real fontScale: 1.0;
8+ property var scopeStyle: null;
8− property int headerAlignment: Text.AlignLeft;
9+ property int headerAlignment: Text.AlignLeft;
9 property int fixedHeaderHeight: -1;
10 property int fixedHeaderHeight: -1;
10 property size fixedArtShapeSize: Qt.size(-1, -1);
11 property size fixedArtShapeSize: Qt.size(-1, -1);
11 readonly property string title: cardData && cardData["title"] || "";
12 readonly property string title: cardData && cardData["title"] || "";
@@ -68,7 +69,7 @@ data: [ Label {
68 wrapMode: Text.Wrap;
69 wrapMode: Text.Wrap;
69 maximumLineCount: 2;
70 maximumLineCount: 2;
70 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
71 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
71− color: "grey";
72+ color: root.scopeStyle ? root.scopeStyle.foreground : "grey";
72 visible: showHeader ;
73 visible: showHeader ;
73 text: root.title;
74 text: root.title;
74 font.weight: components && components["subtitle"] ? Font.DemiBold : Font.Normal;
75 font.weight: components && components["subtitle"] ? Font.DemiBold : Font.Normal;
@@ -83,7 +84,7 @@ Label {
83 elide: Text.ElideRight;
84 elide: Text.ElideRight;
84 fontSize: "small";
85 fontSize: "small";
85 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
86 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
86− color: "grey";
87+ color: root.scopeStyle ? root.scopeStyle.foreground : "grey";
87 visible: titleLabel.visible && titleLabel.text;
88 visible: titleLabel.visible && titleLabel.text;
88 text: cardData && cardData["subtitle"] || "";
89 text: cardData && cardData["subtitle"] || "";
89 font.weight: Font.Light;
90 font.weight: Font.Light;
tests/plugins/Dash/cardcreator/5.res+3−2
@@ -4,8 +4,9 @@ AbstractButton {
4 property var components;
4 property var components;
5 property var cardData;
5 property var cardData;
6 property var artShapeBorderSource: undefined;
6 property var artShapeBorderSource: undefined;
7− property real fontScale: 1.0;
7+ property real fontScale: 1.0;
8+ property var scopeStyle: null;
8− property int headerAlignment: Text.AlignLeft;
9+ property int headerAlignment: Text.AlignLeft;
9 property int fixedHeaderHeight: -1;
10 property int fixedHeaderHeight: -1;
10 property size fixedArtShapeSize: Qt.size(-1, -1);
11 property size fixedArtShapeSize: Qt.size(-1, -1);
11 readonly property string title: cardData && cardData["title"] || "";
12 readonly property string title: cardData && cardData["title"] || "";
tests/plugins/Dash/cardcreator/6.resnew file+66
@@ -0,0 +1,66 @@
1+AbstractButton {
2+ id: root;
3+ property var template;
4+ property var components;
5+ property var cardData;
6+ property var artShapeBorderSource: undefined;
7+ property real fontScale: 1.0;
8+ property int headerAlignment: Text.AlignLeft;
9+ property int fixedHeaderHeight: -1;
10+ property size fixedArtShapeSize: Qt.size(-1, -1);
11+ readonly property string title: cardData && cardData["title"] || "";
12+ property bool asynchronous: true;
13+ property bool showHeader: true;
14+ implicitWidth: childrenRect.width;
15+onArtShapeBorderSourceChanged: { if (artShapeBorderSource !== undefined && artShapeLoader.item) artShapeLoader.item.borderSource = artShapeBorderSource; }
16+readonly property size artShapeSize: artShapeLoader.item ? Qt.size(artShapeLoader.item.width, artShapeLoader.item.height) : Qt.size(-1, -1);
17+Item {
18+ id: artShapeHolder;
19+ height: root.fixedArtShapeSize.height > 0 ? root.fixedArtShapeSize.height : artShapeLoader.height;
20+ width: root.fixedArtShapeSize.width > 0 ? root.fixedArtShapeSize.width : artShapeLoader.width;
21+ anchors { horizontalCenter: parent.horizontalCenter; }
22+ Loader {
23+ id: artShapeLoader;
24+ objectName: "artShapeLoader";
25+ active: cardData && cardData["art"] || false;
26+ asynchronous: root.asynchronous;
27+ visible: status == Loader.Ready;
28+ sourceComponent: UbuntuShape {
29+ id: artShape;
30+ objectName: "artShape";
31+ radius: "medium";
32+ visible: image.status == Image.Ready;
33+ readonly property real fixedArtShapeSizeAspect: (root.fixedArtShapeSize.height > 0 && root.fixedArtShapeSize.width > 0) ? root.fixedArtShapeSize.width / root.fixedArtShapeSize.height : -1;
34+ readonly property real aspect: fixedArtShapeSizeAspect > 0 ? fixedArtShapeSizeAspect : components !== undefined ? components["art"]["aspect-ratio"] : 1;
35+ readonly property bool aspectSmallerThanImageAspect: aspect < image.aspect;
36+ Component.onCompleted: { updateWidthHeightBindings(); if (artShapeBorderSource !== undefined) borderSource = artShapeBorderSource; }
37+ onAspectSmallerThanImageAspectChanged: updateWidthHeightBindings();
38+ Connections { target: root; onFixedArtShapeSizeChanged: updateWidthHeightBindings(); }
39+ function updateWidthHeightBindings() {
40+ if (root.fixedArtShapeSize.height > 0 && root.fixedArtShapeSize.width > 0) {
41+ width = root.fixedArtShapeSize.width;
42+ height = root.fixedArtShapeSize.height;
43+ } else if (aspectSmallerThanImageAspect) {
44+ width = Qt.binding(function() { return !visible ? 0 : image.width });
45+ height = Qt.binding(function() { return !visible ? 0 : image.fillMode === Image.PreserveAspectCrop ? image.height : width / image.aspect });
46+ } else {
47+ width = Qt.binding(function() { return !visible ? 0 : image.fillMode === Image.PreserveAspectCrop ? image.width : height * image.aspect });
48+ height = Qt.binding(function() { return !visible ? 0 : image.height });
49+ }
50+ }
51+ image: Image {
52+ objectName: "artImage";
53+ source: cardData && cardData["art"] || "";
54+ cache: true;
55+ asynchronous: root.asynchronous;
56+ fillMode: components && components["art"]["fill-mode"] === "fit" ? Image.PreserveAspectFit: Image.PreserveAspectCrop;
57+ readonly property real aspect: implicitWidth / implicitHeight;
58+ width: root.width;
59+ height: width / artShape.aspect;
60+ }
61+ }
62+ }
63+ }
64+readonly property int headerHeight: 0;
65+implicitHeight: artShapeHolder.height;
66+}
tests/plugins/Dash/cardcreator/6.tstnew file+3
@@ -0,0 +1,3 @@
1+template: {"card-layout":"vertical","card-size":"small","category-layout":"grid","collapsed-rows":2}
2+components: {"art":{"aspect-ratio":1.6,"field":"art","fill-mode":"fit"}}
3+result: 6.res
tests/plugins/Dash/tst_ScopeStyle.qmlnew file+151
@@ -0,0 +1,151 @@
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 Dash 0.1
20+import Ubuntu.Components 1.1
21+
22+Rectangle {
23+ width: units.gu(40)
24+ height: units.gu(71)
25+
26+ ScopeStyle {
27+ id: tool
28+ }
29+
30+ TestCase {
31+ id: testCase
32+ name: "ScopeStyle"
33+ when: windowShown
34+
35+ property color color
36+ property var styles: [
37+ {},
38+ { "foreground-color": "red", "background-color": "black", "page-header": { "logo": "/foo/bar" } },
39+ { "foreground-color": "green", "background-color": "white" },
40+ { "foreground-color": "blue", "background-color": "darkgrey" },
41+ ]
42+
43+ function cleanup() {
44+ testCase.color = "transparent";
45+ }
46+
47+ function test_luminance_data() {
48+ return [
49+ { tag: "#F00", luminance: 0.2126 },
50+ { tag: "#0F0", luminance: 0.7152 },
51+ { tag: "#00F", luminance: 0.0722 },
52+ { tag: "white", luminance: 1.0 },
53+ { tag: "black", luminance: 0.0 },
54+ { tag: "lightgrey", luminance: 0.8275 },
55+ { tag: "grey", luminance: 0.5020 },
56+ { tag: "darkgrey", luminance: 0.6627 },
57+ ];
58+ }
59+
60+ function test_luminance(data) {
61+ testCase.color = data.tag;
62+ compare(tool.luminance(testCase.color).toFixed(4), data.luminance.toFixed(4));
63+ }
64+
65+ function test_foreground_data() {
66+ return [
67+ { tag: "default", index: 0, foreground: "grey" },
68+ { tag: "red on black", index: 1, foreground: "red" },
69+ { tag: "green on white", index: 2, foreground: "green" },
70+ { tag: "blue on darkgrey", index: 3, foreground: "blue" },
71+ ];
72+ }
73+
74+ function test_foreground(data) {
75+ tool.style = testCase.styles[data.index];
76+ verify(Qt.colorEqual(tool.foreground, data.foreground),
77+ "Foreground color not equal: %1 != %2".arg(tool.foreground).arg(data.foreground));
78+ }
79+
80+ function test_background_data() {
81+ return [
82+ { tag: "default", index: 0, background: "transparent" },
83+ { tag: "red on black", index: 1, background: "black" },
84+ { tag: "green on white", index: 2, background: "white" },
85+ { tag: "blue on darkgrey", index: 3, background: "darkgrey" },
86+ ];
87+ }
88+
89+ function test_background(data) {
90+ tool.style = testCase.styles[data.index];
91+ verify(Qt.colorEqual(tool.background, data.background),
92+ "Background color not equal: %1 != %2".arg(tool.background).arg(data.background));
93+ }
94+
95+ function test_threshold_data() {
96+ return [
97+ { tag: "default", index: 0, threshold: 0.5020 },
98+ { tag: "red on black", index: 1, threshold: 0.1063 },
99+ { tag: "green on white", index: 2, threshold: 0.6795 },
100+ { tag: "blue on darkgrey", index: 3, threshold: 0.3675 },
101+ ];
102+ }
103+
104+ function test_threshold(data) {
105+ tool.style = testCase.styles[data.index];
106+ compare(tool.threshold.toFixed(4), data.threshold.toFixed(4), "Luminance threshold was incorrect.");
107+ }
108+
109+ function test_light_data() {
110+ return [
111+ { tag: "default", index: 0, light: "white" },
112+ { tag: "red on black", index: 1, light: "red" },
113+ { tag: "green on white", index: 2, light: "white" },
114+ { tag: "blue on darkgrey", index: 3, light: "darkgrey" },
115+ ];
116+ }
117+
118+ function test_light(data) {
119+ tool.style = testCase.styles[data.index];
120+ verify(Qt.colorEqual(tool.light, data.light),
121+ "Light color not equal: %1 != %2".arg(tool.light).arg(data.light));
122+ }
123+
124+ function test_dark_data() {
125+ return [
126+ { tag: "default", index: 0, dark: "grey" },
127+ { tag: "red on black", index: 1, dark: "black" },
128+ { tag: "green on white", index: 2, dark: "green" },
129+ { tag: "blue on darkgrey", index: 3, dark: "blue" },
130+ ];
131+ }
132+
133+ function test_dark(data) {
134+ tool.style = testCase.styles[data.index];
135+ verify(Qt.colorEqual(tool.dark, data.dark),
136+ "Dark color not equal: %1 != %2".arg(tool.dark).arg(data.dark));
137+ }
138+
139+ function test_headerLogo_data() {
140+ return [
141+ { tag: "default", index: 0, headerLogo: "" },
142+ { tag: "with logo", index: 1, headerLogo: "file:///foo/bar" },
143+ ];
144+ }
145+
146+ function test_headerLogo(data) {
147+ tool.style = testCase.styles[data.index];
148+ compare(tool.headerLogo, data.headerLogo, "Header logo was incorrect.");
149+ }
150+ }
151+}
tests/plugins/Unity/Launcher/launchermodeltest.cpp+9
@@ -156,11 +156,20 @@ private Q_SLOTS:
156 }
156 }
157
157
158 void testPinning() {
158 void testPinning() {
159+ QSignalSpy spy(launcherModel, SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector<int>)));
159 QCOMPARE(launcherModel->get(0)->pinned(), false);
160 QCOMPARE(launcherModel->get(0)->pinned(), false);
160 QCOMPARE(launcherModel->get(1)->pinned(), false);
161 QCOMPARE(launcherModel->get(1)->pinned(), false);
161 launcherModel->pin(launcherModel->get(0)->appId());
162 launcherModel->pin(launcherModel->get(0)->appId());
162 QCOMPARE(launcherModel->get(0)->pinned(), true);
163 QCOMPARE(launcherModel->get(0)->pinned(), true);
163 QCOMPARE(launcherModel->get(1)->pinned(), false);
164 QCOMPARE(launcherModel->get(1)->pinned(), false);
165+ QCOMPARE(spy.count(), 1);
166+ QCOMPARE(spy.at(0).at(2).value<QVector<int>>().first(), (int)LauncherModelInterface::RolePinned);
167+
168+ launcherModel->requestRemove(launcherModel->get(0)->appId());
169+ QCOMPARE(launcherModel->get(0)->pinned(), false);
170+ QCOMPARE(launcherModel->get(1)->pinned(), false);
171+ QCOMPARE(spy.count(), 2);
172+ QCOMPARE(spy.at(1).at(2).value<QVector<int>>().first(), (int)LauncherModelInterface::RolePinned);
164 }
173 }
165
174
166 void testRemove_data() {
175 void testRemove_data() {
tests/qmltests/CMakeLists.txt+3−1
@@ -32,7 +32,7 @@ add_qml_test(Components ResponsiveGridView)
32add_qml_test(Components ResponsiveVerticalJournal IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/plugins)
32add_qml_test(Components ResponsiveVerticalJournal IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/plugins)
33add_qml_test(Components SeeMore)
33add_qml_test(Components SeeMore)
34add_qml_test(Components Showable)
34add_qml_test(Components Showable)
35−add_qml_test(Components PageHeaderLabel)
35+add_qml_test(Components PageHeader)
36add_qml_test(Components ZoomableImage)
36add_qml_test(Components ZoomableImage)
37add_qml_test(Dash Dash)
37add_qml_test(Dash Dash)
38add_qml_test(Dash DashContent)
38add_qml_test(Dash DashContent)
@@ -46,6 +46,7 @@ add_qml_test(Dash/Previews PreviewActions)
46add_qml_test(Dash/Previews PreviewAudioPlayback)
46add_qml_test(Dash/Previews PreviewAudioPlayback)
47add_qml_test(Dash/Previews PreviewHeader)
47add_qml_test(Dash/Previews PreviewHeader)
48add_qml_test(Dash/Previews PreviewImageGallery)
48add_qml_test(Dash/Previews PreviewImageGallery)
49+add_qml_test(Dash/Previews PreviewPayments)
49add_qml_test(Dash/Previews PreviewProgress)
50add_qml_test(Dash/Previews PreviewProgress)
50add_qml_test(Dash/Previews PreviewRatingDisplay)
51add_qml_test(Dash/Previews PreviewRatingDisplay)
51add_qml_test(Dash/Previews PreviewRatingInput)
52add_qml_test(Dash/Previews PreviewRatingInput)
@@ -63,6 +64,7 @@ add_qml_test(Hud Result)
63add_qml_test(Launcher Launcher)
64add_qml_test(Launcher Launcher)
64add_qml_test(Notifications Notifications)
65add_qml_test(Notifications Notifications)
65add_qml_test(Notifications VisualSnapDecisionsQueue)
66add_qml_test(Notifications VisualSnapDecisionsQueue)
67+add_qml_test(Panel ActiveCallHint)
66add_qml_test(Panel IndicatorRow)
68add_qml_test(Panel IndicatorRow)
67add_qml_test(Panel Indicators)
69add_qml_test(Panel Indicators)
68add_qml_test(Panel MenuContent)
70add_qml_test(Panel MenuContent)
tests/qmltests/Components/tst_Carousel.qml+48−2
@@ -27,12 +27,13 @@ Item {
27 Carousel {
27 Carousel {
28 anchors.fill: parent
28 anchors.fill: parent
29 id: carousel
29 id: carousel
30− model: 40
31
30
32 property int createdDelegates: 0
31 property int createdDelegates: 0
33 property int destroyedDelegates: 0
32 property int destroyedDelegates: 0
34
33
35 itemComponent: BaseCarouselDelegate {
34 itemComponent: BaseCarouselDelegate {
35+ objectName: "carouselDelegate" + index
36+
36 Rectangle {
37 Rectangle {
37 anchors.fill: parent
38 anchors.fill: parent
38 border.color: "black"
39 border.color: "black"
@@ -42,6 +43,11 @@ Item {
42 }
43 }
43 }
44 }
44 }
45 }
46+
47+ SignalSpy {
48+ id: spy
49+ }
50+
45 UT.UnityTestCase {
51 UT.UnityTestCase {
46 id: root
52 id: root
47 name: "Carousel"
53 name: "Carousel"
@@ -51,6 +57,8 @@ Item {
51 property int itemCount
57 property int itemCount
52 property real tileWidth
58 property real tileWidth
53
59
60+ property Item listView: findChild(carousel, "listView")
61+
54 property real contentWidth: itemCount * tileWidth
62 property real contentWidth: itemCount * tileWidth
55 // following variables are copied from Carousel.qml
63 // following variables are copied from Carousel.qml
56 // I'm not using the variables directly from there, as then tileWidth and others would be affected as well
64 // I'm not using the variables directly from there, as then tileWidth and others would be affected as well
@@ -60,11 +68,25 @@ Item {
60 property real kGapEnd: kMiddleIndex * (1 - gapToEndPhase / gapToMiddlePhase)
68 property real kGapEnd: kMiddleIndex * (1 - gapToEndPhase / gapToMiddlePhase)
61 property real kXBeginningEnd: 1 / tileWidth + kMiddleIndex / gapToMiddlePhase
69 property real kXBeginningEnd: 1 / tileWidth + kMiddleIndex / gapToMiddlePhase
62
70
71+ function init() {
72+ carousel.model = 40;
73+ waitForRendering(carousel)
74+ listView.positionViewAtBeginning();
75+ }
76+
77+ function cleanup() {
78+ carousel.model = 0;
79+ carousel.createdDelegates = 0;
80+ carousel.destroyedDelegates = 0;
81+ spy.target = null;
82+ spy.signalName = "";
83+ }
84+
63 // This test needs to run first since it tests a corner case condition
85 // This test needs to run first since it tests a corner case condition
64 // to where the carousel is just being created
86 // to where the carousel is just being created
65 // That is why it has a 1 in the name
87 // That is why it has a 1 in the name
66 function test_1onlyNeededItemsCreated() {
88 function test_1onlyNeededItemsCreated() {
67− tryCompare(carousel, "createdDelegates", 10);
89+ tryCompare(carousel, "createdDelegates", 9);
68 compare(carousel.destroyedDelegates, 0);
90 compare(carousel.destroyedDelegates, 0);
69 }
91 }
70
92
@@ -243,5 +265,29 @@ Item {
243 var x = carouselList.getXFromContinuousIndex(carousel.model - 1);
265 var x = carouselList.getXFromContinuousIndex(carousel.model - 1);
244 verify(Math.abs(x - carouselList.contentX) < 1);
266 verify(Math.abs(x - carouselList.contentX) < 1);
245 }
267 }
268+
269+ function test_activate() {
270+ var carouselList = findChild(carousel, "listView");
271+ tryCompareFunction(function() { return findChild(carouselList, "carouselDelegate3") ? true : false; }, true);
272+ var carouselItem = findChild(carousel, "carouselDelegate3")
273+ verify(carouselItem, "Could not find delegate");
274+
275+ spy.signalName = "clicked";
276+ spy.target = carouselItem;
277+ mouseClick(carouselItem, carouselItem.width / 2, carouselItem.height / 2);
278+ tryCompare(carouselList, "moving", false);
279+ tryCompare(carouselItem, "explicitlyScaled", true);
280+ mouseClick(carouselItem, carouselItem.width / 2, carouselItem.height / 2);
281+ spy.wait();
282+
283+ spy.signalName = "pressAndHold";
284+ spy.target = carouselItem;
285+ mouseClick(carouselItem, carouselItem.width / 2, carouselItem.height / 2);
286+ tryCompare(carouselList, "moving", false);
287+ tryCompare(carouselItem, "explicitlyScaled", true);
288+ mousePress(carouselItem, carouselItem.width / 2, carouselItem.height / 2);
289+ spy.wait();
290+ mouseRelease(carouselItem, carouselItem.width / 2, carouselItem.height / 2);
291+ }
246 }
292 }
247}
293}
tests/qmltests/Components/tst_PageHeaderLabel.qml → tests/qmltests/Components/tst_PageHeader.qmlrenamed+90−54
@@ -23,13 +23,10 @@ import Unity 0.2
23import Unity.Test 0.1 as UT
23import Unity.Test 0.1 as UT
24
24
25Item {
25Item {
26+ id: root
26 width: units.gu(110)
27 width: units.gu(110)
27 height: units.gu(30)
28 height: units.gu(30)
28
29
29− MockScope {
30− id: scopeMock
31− }
32−
33 UT.UnityTestCase {
30 UT.UnityTestCase {
34 name: "PageHeaderLabelTest"
31 name: "PageHeaderLabelTest"
35 when: windowShown
32 when: windowShown
@@ -82,33 +79,6 @@ Item {
82 compare(searchQuery, "", "Reset search did not reset searchQuery correctly.")
79 compare(searchQuery, "", "Reset search did not reset searchQuery correctly.")
83 }
80 }
84
81
85− function test_move_search_by_width()
86− {
87− searchEnabled = true
88− pageHeader.resetSearch()
89−
90− var searchContainer = findChild(pageHeader, "searchContainer")
91−
92− parent.width = units.gu(40)
93−
94− verify(searchContainer !== undefined)
95− verify(searchContainer.y <= 0)
96−
97− pageHeader.triggerSearch()
98− verify(searchContainer.y >= 0)
99−
100− pageHeader.resetSearch()
101− verify(searchContainer.y <= 0)
102−
103− parent.width = units.gu(110)
104− verify(searchContainer.y >= 0)
105−
106− pageHeader.triggerSearch()
107− tryCompare(searchContainer, "narrowMode", false)
108− tryCompare(searchContainer, "state", "active")
109− tryCompare(searchContainer, "width", units.gu(40))
110− }
111−
112 function test_history() {
82 function test_history() {
113 pageHeader.searchHistory.clear()
83 pageHeader.searchHistory.clear()
114 compare(pageHeader.searchHistory.count, 0)
84 compare(pageHeader.searchHistory.count, 0)
@@ -144,21 +114,41 @@ Item {
144
114
145 function test_search_indicator() {
115 function test_search_indicator() {
146 var searchIndicator = findChild(pageHeader, "searchIndicator")
116 var searchIndicator = findChild(pageHeader, "searchIndicator")
147− var primaryImage = findChild(pageHeader, "primaryImage")
117+ var clearIcon = findChild(pageHeader, "clearIcon")
148
118
149 pageHeader.triggerSearch()
119 pageHeader.triggerSearch()
150
120
151− scopeMock.setSearchInProgress(false);
121+ tryCompare(clearIcon, "visible", false)
122+ pageHeader.searchQuery = "ubuntu"
123+ tryCompare(clearIcon, "visible", true)
124+
125+ pageHeader.searchInProgress = false
152 compare(searchIndicator.running, false, "Search indicator is running.")
126 compare(searchIndicator.running, false, "Search indicator is running.")
153− tryCompare(primaryImage, "visible", true)
127+ tryCompare(clearIcon, "visible", true)
154
128
155− scopeMock.setSearchInProgress(true);
129+ pageHeader.searchInProgress = true
156 compare(searchIndicator.running, true, "Search indicator isn't running.")
130 compare(searchIndicator.running, true, "Search indicator isn't running.")
157− tryCompare(primaryImage, "visible", false)
131+ tryCompare(clearIcon, "visible", false)
132+
133+ pageHeader.searchInProgress = false;
134+ compare(searchIndicator.running, false, "Search indicator is running.")
135+ tryCompare(clearIcon, "visible", true)
136+ }
137+
138+ function test_titleImage() {
139+
140+ var titleImage = findChild(pageHeader, "titleImage");
141+ verify(titleImage == null);
142+
143+ showImageCheckBox.checked = true;
144+
145+ titleImage = findChild(pageHeader, "titleImage");
146+ verify(titleImage !== null);
147+ compare(titleImage.source, pageHeader.titleImageSource);
148+
158 }
149 }
159
150
160 function cleanup() {
151 function cleanup() {
161− scopeMock.setSearchInProgress(false);
162 pageHeader.resetSearch();
152 pageHeader.resetSearch();
163 }
153 }
164
154
@@ -171,14 +161,21 @@ Item {
171
161
172 pageHeader.triggerSearch();
162 pageHeader.triggerSearch();
173
163
174− var searchContainer = findChild(pageHeader, "searchContainer");
164+ var headerContainer = findChild(pageHeader, "headerContainer");
175− verify(searchContainer !== undefined, "searchContainer != undefined");
165+ verify(headerContainer !== null, "headerContainer != null");
176− tryCompareFunction(function() { return searchContainer.popover !== null; }, true);
166+ tryCompareFunction(function() { return headerContainer.popover !== null; }, true);
177
167
178− tryCompare(searchContainer.popover, "visible", true);
168+ tryCompare(headerContainer.popover, "visible", true);
179 }
169 }
180
170
181− function test_resetSearch_onPopupClose() {
171+ function test_tap_outside_closes_popup_data() {
172+ return [
173+ { tag: "with search text", searchText: "foobar", hideSearch: false },
174+ { tag: "without search text", searchText: "", hideSearch: true }
175+ ];
176+ }
177+
178+ function test_tap_outside_closes_popup(data) {
182 searchEnabled = true;
179 searchEnabled = true;
183 pageHeader.searchHistory.clear();
180 pageHeader.searchHistory.clear();
184
181
@@ -187,16 +184,19 @@ Item {
187
184
188 pageHeader.triggerSearch();
185 pageHeader.triggerSearch();
189
186
190− var searchContainer = findChild(pageHeader, "searchContainer");
187+ var headerContainer = findChild(pageHeader, "headerContainer");
191− verify(searchContainer !== undefined, "searchContainer != undefined");
188+ verify(headerContainer !== null, "headerContainer != null");
192− tryCompareFunction(function() { return searchContainer.popover !== null; }, true);
189+ tryCompareFunction(function() { return headerContainer.popover !== null; }, true);
193− compare(searchContainer.popover.visible, true);
190+ compare(headerContainer.popover.visible, true);
191+
192+ pageHeader.searchQuery = data.searchText;
194
193
195− pageHeader.searchQuery = "test";
194+ mouseClick(root, root.width / 2, root.height - 1);
195+
196+ tryCompare(headerContainer, "showSearch", !data.hideSearch);
196− tryCompareFunction( function() { return (searchContainer.popover===null || !searchContainer.popover.visible) }, true);
197+ tryCompareFunction(function() { return headerContainer.popover === null; }, true);
197
198
198 pageHeader.resetSearch();
199 pageHeader.resetSearch();
199− compare((searchContainer.popover===null || !searchContainer.popover.visible), true);
200 }
200 }
201 }
201 }
202
202
@@ -204,18 +204,24 @@ Item {
204 anchors.fill: parent
204 anchors.fill: parent
205 spacing: units.gu(1)
205 spacing: units.gu(1)
206
206
207− PageHeaderLabel {
207+ PageHeader {
208 id: pageHeader
208 id: pageHeader
209 anchors {
209 anchors {
210 left: parent.left
210 left: parent.left
211 right: parent.right
211 right: parent.right
212 }
212 }
213
213
214− scope: scopeMock
215−
216 searchEntryEnabled: true
214 searchEntryEnabled: true
217− searchHistory: SearchHistoryModel {}
218− text: "%^$%^%^&%^&%^$%GHR%"
215+ title: "%^$%^%^&%^&%^$%GHR%"
216+ scopeStyle: QtObject {
217+ readonly property color foreground: "grey"
218+ readonly property url headerLogo: showImageCheckBox.checked ? pageHeader.titleImageSource : ""
219+ }
220+ showBackButton: showBackButtonCheckBox.checked
221+
222+ property string titleImageSource: Qt.resolvedUrl("tst_PageHeader/logo-ubuntu-orange.svg")
223+ property date lastBackClicked
224+ onBackClicked: lastBackClicked = new Date()
219 }
225 }
220
226
221 Row {
227 Row {
@@ -251,5 +257,35 @@ Item {
251 anchors.verticalCenter: parent.verticalCenter
257 anchors.verticalCenter: parent.verticalCenter
252 }
258 }
253 }
259 }
260+
261+ Row {
262+ spacing: units.gu(1)
263+ anchors {
264+ left: parent.left
265+ right: parent.right
266+ }
267+ CheckBox {
268+ id: showBackButtonCheckBox
269+ }
270+ Label {
271+ text: "Back button enabled (Last clicked: " + Qt.formatTime(pageHeader.lastBackClicked, "hh:mm:ss") + ")"
272+ anchors.verticalCenter: parent.verticalCenter
273+ }
274+ }
275+
276+ Row {
277+ spacing: units.gu(1)
278+ anchors {
279+ left: parent.left
280+ right: parent.right
281+ }
282+ CheckBox {
283+ id: showImageCheckBox
284+ }
285+ Label {
286+ text: "Show image instead of title"
287+ anchors.verticalCenter: parent.verticalCenter
288+ }
289+ }
254 }
290 }
255}
291}
tests/qmltests/Components/tst_PageHeader/logo-ubuntu-orange.svgnew file+60
@@ -0,0 +1,60 @@
1+<?xml version="1.0" encoding="utf-8"?>
2+<!-- Generator: Adobe Illustrator 17.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5+ width="107px" height="25px" viewBox="0 0 107 25" enable-background="new 0 0 107 25" xml:space="preserve">
6+<g id="BK">
7+</g>
8+<g id="Comp">
9+ <circle fill="#DD4814" cx="100.596" cy="7.374" r="6.403"/>
10+ <path fill="#FFFFFF" d="M96.6,6.605c-0.424,0-0.768,0.344-0.768,0.77c0,0.423,0.344,0.768,0.768,0.768
11+ c0.425,0,0.772-0.345,0.772-0.768C97.371,6.949,97.025,6.605,96.6,6.605z M102.094,10.103c-0.365,0.211-0.492,0.682-0.282,1.047
12+ c0.214,0.372,0.685,0.497,1.051,0.284c0.369-0.21,0.496-0.682,0.281-1.05C102.932,10.014,102.462,9.889,102.094,10.103z
13+ M98.272,7.375c0-0.76,0.378-1.434,0.956-1.839l-0.562-0.944c-0.675,0.451-1.176,1.138-1.384,1.943
14+ c0.246,0.2,0.398,0.501,0.398,0.84c0,0.337-0.152,0.639-0.398,0.838c0.208,0.805,0.709,1.492,1.384,1.941l0.562-0.941
15+ C98.65,8.807,98.272,8.134,98.272,7.375z M100.518,5.125c1.177,0,2.14,0.902,2.24,2.052l1.098-0.019
16+ c-0.055-0.846-0.425-1.61-0.994-2.166c-0.295,0.108-0.634,0.093-0.925-0.078c-0.292-0.168-0.473-0.452-0.524-0.761
17+ c-0.285-0.077-0.584-0.12-0.895-0.12c-0.53,0-1.032,0.125-1.48,0.345l0.535,0.958C99.86,5.201,100.182,5.125,100.518,5.125z
18+ M100.518,9.622c-0.336,0-0.658-0.076-0.945-0.21l-0.535,0.958c0.447,0.221,0.95,0.344,1.48,0.344c0.312,0,0.61-0.039,0.895-0.119
19+ c0.051-0.311,0.232-0.596,0.524-0.763c0.294-0.168,0.63-0.186,0.925-0.073c0.569-0.562,0.938-1.323,0.994-2.17l-1.098-0.015
20+ C102.658,8.721,101.695,9.622,100.518,9.622z M102.094,4.646c0.368,0.213,0.838,0.088,1.051-0.282
21+ c0.214-0.367,0.087-0.839-0.281-1.052c-0.366-0.211-0.837-0.085-1.051,0.283C101.601,3.962,101.728,4.433,102.094,4.646z"/>
22+ <path fill="#DD4814" d="M12.807,24.177c-0.649,0.162-1.509,0.337-2.577,0.518c-1.068,0.184-2.304,0.276-3.704,0.276
23+ c-1.222,0-2.247-0.179-3.082-0.535c-0.833-0.355-1.503-0.858-2.01-1.509c-0.509-0.65-0.875-1.419-1.098-2.302
24+ C0.11,19.739,0,18.76,0,17.68V8.778h2.835v8.293c0,1.932,0.304,3.315,0.916,4.147c0.61,0.834,1.636,1.249,3.079,1.249
25+ c0.304,0,0.62-0.01,0.945-0.031c0.326-0.02,0.632-0.045,0.914-0.075C8.974,22.33,9.234,22.3,9.468,22.27
26+ c0.234-0.032,0.401-0.065,0.504-0.108V8.778h2.835V24.177L12.807,24.177z"/>
27+ <path fill="#DD4814" d="M19.728,9.478c0.347-0.222,0.871-0.458,1.572-0.7c0.7-0.243,1.507-0.367,2.424-0.367
28+ c1.137,0,2.148,0.205,3.033,0.609c0.886,0.406,1.632,0.977,2.243,1.709c0.607,0.731,1.069,1.605,1.385,2.622
29+ c0.317,1.016,0.474,2.135,0.474,3.355c0,1.279-0.187,2.433-0.565,3.461c-0.377,1.025-0.909,1.894-1.6,2.605
30+ c-0.692,0.714-1.524,1.26-2.502,1.647C25.219,24.807,24.121,25,22.899,25c-1.321,0-2.49-0.093-3.506-0.276
31+ c-1.016-0.183-1.849-0.367-2.501-0.549V1.46l2.837-0.488L19.728,9.478L19.728,9.478z M19.728,22.162
32+ c0.285,0.084,0.686,0.159,1.206,0.23c0.517,0.073,1.161,0.107,1.935,0.107c1.523,0,2.746-0.504,3.659-1.509
33+ c0.915-1.007,1.373-2.435,1.373-4.284c0-0.813-0.081-1.575-0.245-2.288c-0.163-0.712-0.428-1.326-0.793-1.845
34+ c-0.366-0.519-0.839-0.923-1.416-1.219c-0.582-0.297-1.278-0.444-2.09-0.444c-0.774,0-1.484,0.133-2.135,0.395
35+ c-0.651,0.267-1.149,0.541-1.495,0.825v10.032H19.728z"/>
36+ <path fill="#DD4814" d="M46.684,24.177c-0.651,0.162-1.509,0.337-2.576,0.518c-1.067,0.184-2.303,0.276-3.707,0.276
37+ c-1.219,0-2.246-0.179-3.079-0.535c-0.833-0.355-1.504-0.858-2.011-1.509c-0.511-0.65-0.875-1.419-1.098-2.302
38+ c-0.224-0.886-0.335-1.865-0.335-2.944V8.778h2.835v8.293c0,1.932,0.304,3.315,0.914,4.147c0.611,0.834,1.636,1.249,3.08,1.249
39+ c0.305,0,0.622-0.01,0.947-0.031c0.325-0.02,0.629-0.045,0.915-0.075c0.284-0.032,0.544-0.062,0.779-0.092
40+ c0.232-0.032,0.4-0.065,0.503-0.108V8.778h2.835v15.399H46.684z"/>
41+ <path fill="#DD4814" d="M50.769,9.236c0.651-0.164,1.514-0.335,2.593-0.521c1.077-0.18,2.316-0.272,3.719-0.272
42+ c1.263,0,2.308,0.178,3.142,0.533c0.834,0.356,1.499,0.853,1.997,1.494c0.498,0.64,0.849,1.408,1.053,2.3
43+ c0.202,0.898,0.304,1.882,0.304,2.959v8.905h-2.836V16.34c0-0.977-0.067-1.809-0.198-2.501c-0.132-0.693-0.351-1.249-0.656-1.676
44+ c-0.303-0.429-0.712-0.738-1.221-0.93c-0.506-0.197-1.139-0.292-1.888-0.292c-0.306,0-0.622,0.012-0.944,0.032
45+ c-0.326,0.021-0.637,0.046-0.931,0.076c-0.298,0.03-0.56,0.067-0.794,0.107c-0.235,0.041-0.402,0.072-0.503,0.091v13.386h-2.837
46+ L50.769,9.236L50.769,9.236z"/>
47+ <path fill="#DD4814" d="M70.132,8.778h6.008v2.378h-6.008v7.319c0,0.792,0.062,1.45,0.185,1.966
48+ c0.121,0.52,0.304,0.927,0.548,1.221c0.244,0.292,0.549,0.501,0.914,0.625c0.367,0.122,0.794,0.182,1.28,0.182
49+ c0.874,0,1.565-0.096,2.076-0.29c0.507-0.193,0.853-0.329,1.035-0.412l0.609,2.32c-0.283,0.142-0.787,0.324-1.508,0.547
50+ c-0.722,0.225-1.539,0.338-2.454,0.338c-1.078,0-1.968-0.137-2.669-0.413c-0.701-0.275-1.265-0.685-1.692-1.234
51+ c-0.427-0.548-0.727-1.224-0.898-2.027c-0.175-0.805-0.26-1.734-0.26-2.79V4.356l2.833-0.489v4.911H70.132z"/>
52+ <path fill="#DD4814" d="M91.57,24.177c-0.653,0.162-1.51,0.337-2.579,0.518c-1.067,0.184-2.3,0.276-3.701,0.276
53+ c-1.222,0-2.247-0.179-3.081-0.535c-0.836-0.355-1.506-0.858-2.013-1.509c-0.509-0.65-0.873-1.419-1.1-2.302
54+ c-0.221-0.886-0.335-1.865-0.335-2.944V8.778h2.838v8.293c0,1.932,0.305,3.315,0.914,4.147c0.609,0.834,1.637,1.249,3.081,1.249
55+ c0.304,0,0.618-0.01,0.945-0.031c0.323-0.02,0.629-0.045,0.914-0.075c0.284-0.032,0.546-0.062,0.777-0.092
56+ c0.234-0.032,0.403-0.065,0.505-0.108V8.778h2.837v15.399H91.57z"/>
57+</g>
58+<g id="Grid" display="none">
59+</g>
60+</svg>
tests/qmltests/Dash/Previews/tst_Preview.qml+2−2
@@ -73,8 +73,8 @@ Rectangle {
73
73
74 function test_containOnFocus() {
74 function test_containOnFocus() {
75 waitForRendering(preview);
75 waitForRendering(preview);
76− tryCompareFunction(function () { return findChild(preview, "widget-9") != null }, true);
76+ tryCompareFunction(function () { return findChild(preview, "widget-10") != null }, true);
77− var widget = findChild(preview, "widget-9");
77+ var widget = findChild(preview, "widget-10");
78
78
79 var bottomLeft = preview.mapFromItem(widget, 0, widget.height);
79 var bottomLeft = preview.mapFromItem(widget, 0, widget.height);
80 verify(bottomLeft.y > preview.height);
80 verify(bottomLeft.y > preview.height);
tests/qmltests/Dash/Previews/tst_PreviewPayments.qmlnew file+100
@@ -0,0 +1,100 @@
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 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/Dash/Previews"
20+import Unity.Test 0.1 as UT
21+import Ubuntu.Components 0.1
22+
23+Rectangle {
24+ id: root
25+ width: units.gu(60)
26+ height: units.gu(80)
27+
28+ property var jsonPurchase: {
29+ "source": { "price" : 0.99, "currency": "USD", "store_item_id": "com.example.package" }
30+ }
31+
32+ property var jsonPurchaseError: {
33+ "source": { "price" : 0.99, "currency": "USD", "store_item_id": "com.example.invalid" }
34+ }
35+
36+ SignalSpy {
37+ id: spy
38+ target: previewPayments
39+ signalName: "triggered"
40+ }
41+
42+ PreviewPayments {
43+ id: previewPayments
44+ widgetId: "previewPayments"
45+ width: units.gu(30)
46+ }
47+
48+ UT.UnityTestCase {
49+ name: "PreviewPaymentsTest"
50+ when: windowShown
51+
52+ function cleanup()
53+ {
54+ spy.clear();
55+ }
56+
57+ function test_purchase_text_display() {
58+ previewPayments.widgetData = jsonPurchase;
59+
60+ var button = findChild(root, "paymentButton");
61+ verify(button != null, "Button not found.");
62+ compare(button.text, "0.99USD");
63+ }
64+
65+ function test_purchase_completed() {
66+ // Exercise the purchaseCompleted signal here.
67+ previewPayments.widgetData = jsonPurchase;
68+
69+ var button = findChild(root, "paymentButton");
70+ verify(button != null, "Button not found.");
71+
72+ mouseClick(button, button.width / 2, button.height / 2);
73+
74+ spy.wait();
75+
76+ var args = spy.signalArguments[0];
77+ compare(args[0], "previewPayments");
78+ compare(args[1], "purchaseCompleted");
79+ compare(args[2], jsonPurchase["source"]);
80+ }
81+
82+ function test_purchase_error() {
83+ // The mock Payments triggers an error when com.example.invalid is
84+ // passed to it as store_item_id. Exercise it here
85+ previewPayments.widgetData = jsonPurchaseError;
86+
87+ var button = findChild(root, "paymentButton");
88+ verify(button != null, "Button not found.");
89+
90+ mouseClick(button, button.width / 2, button.height / 2);
91+
92+ spy.wait();
93+
94+ var args = spy.signalArguments[0];
95+ compare(args[0], "previewPayments");
96+ compare(args[1], "purchaseError");
97+ compare(args[2], jsonPurchaseError["source"]);
98+ }
99+ }
100+}
tests/qmltests/Dash/Previews/tst_PreviewRatingDisplay.qml+13
@@ -108,5 +108,18 @@ Rectangle {
108 }
108 }
109 }
109 }
110 }
110 }
111+
112+ function test_non_interactive() {
113+ previewRatingDisplay.widgetData = reviewsModel1;
114+
115+ var reviewItem = findChild(previewRatingDisplay, "reviewItem1");
116+ var rating = findChild(reviewItem, "rating");
117+
118+ compare(rating.value, reviewsModel1["reviews"][1]["rating"]);
119+
120+ // Tap on first star
121+ mouseClick(rating, 0, 0);
122+ compare(rating.value, reviewsModel1["reviews"][1]["rating"]);
123+ }
111 }
124 }
112}
125}
tests/qmltests/Dash/tst_Dash.qml−39
@@ -70,24 +70,6 @@ Item {
70 ]
70 ]
71 }
71 }
72
72
73− function test_set_current_scope_data() {
74− return get_scope_data()
75− }
76−
77− function test_set_current_scope(data) {
78− // wait for scopes to load
79− tryCompare(scopes, "loaded", true);
80−
81− var tabbar = findChild(dash, "tabbar");
82− verify(tabbar != undefined)
83− var dashContent = findChild(dash, "dashContent");
84− var current_index = dashContent.currentIndex;
85−
86− dash.setCurrentScope(data.tag, true /* animate */, false /* reset */);
87− compare(dashContent.currentIndex, data.shouldBeVisible ? data.visualIndex : current_index);
88− compare(tabbar.selectedIndex, data.shouldBeVisible ? data.visualIndex : current_index);
89− }
90−
91 function test_show_scope_on_load_data() {
73 function test_show_scope_on_load_data() {
92 return get_scope_data()
74 return get_scope_data()
93 }
75 }
@@ -109,26 +91,5 @@ Item {
109 verify(dashContentList != undefined);
91 verify(dashContentList != undefined);
110 tryCompare(dashContentList, "currentIndex", data.visualIndex);
92 tryCompare(dashContentList, "currentIndex", data.visualIndex);
111 }
93 }
112−
113− function test_dash_bar_set_index_connection_data() {
114− return get_scope_data()
115− }
116−
117− function test_dash_bar_set_index_connection(data) {
118− if (data.shouldBeVisible == false) {
119− console.log("Not testing " + data.tag + ": not visible");
120− return;
121− }
122− // wait for scopes to load
123− tryCompare(scopes, "loaded", true);
124−
125− var tabbar = findChild(dash, "tabbar");
126− verify(tabbar != undefined)
127− var dashContent = findChild(dash, "dashContent");
128− var current_index = dashContent.currentIndex;
129−
130− tabbar.model.selectedIndex = data.visualIndex;
131− compare(dashContent.currentIndex, data.shouldBeVisible ? data.visualIndex : current_index);
132− }
133 }
94 }
134}
95}
tests/qmltests/Dash/tst_DashContent.qml+4−152
@@ -47,8 +47,6 @@ Item {
47 model: scopesModel
47 model: scopesModel
48 }
48 }
49 scopes : scopesModel
49 scopes : scopesModel
50−
51− searchHistory: SearchHistoryModel {}
52 }
50 }
53
51
54 SignalSpy {
52 SignalSpy {
@@ -194,8 +192,9 @@ Item {
194 function test_scope_mapping(data) {
192 function test_scope_mapping(data) {
195 dashContent.setCurrentScopeAtIndex(data.index, true, false);
193 dashContent.setCurrentScopeAtIndex(data.index, true, false);
196 tryCompareFunction(get_current_item_object_name, data.objectName)
194 tryCompareFunction(get_current_item_object_name, data.objectName)
197− var pageHeader = findChild(dashContent, "pageHeader");
195+ var scopeView = findChild(dashContent, data.objectName);
196+ var pageHeader = findChild(scopeView, "innerPageHeader");
198− compare(pageHeader.scope, scopesModel.getScope(data.index));
197+ compare(pageHeader.title, scopesModel.getScope(data.index).name);
199 }
198 }
200
199
201 function test_is_active_data() {
200 function test_is_active_data() {
@@ -217,67 +216,6 @@ Item {
217 tryCompare(scopesModel.getScope(2), "isActive", data.active2);
216 tryCompare(scopesModel.getScope(2), "isActive", data.active2);
218 }
217 }
219
218
220− function doFindMusicButton(parent) {
221− for (var i = 0; i < parent.children.length; i++) {
222− var c = parent.children[i];
223− if (UT.Util.isInstanceOf(c, "AbstractButton") && parent.x >= 0) {
224− for (var ii = 0; ii < c.children.length; ii++) {
225− var cc = c.children[ii];
226− if (UT.Util.isInstanceOf(cc, "Label") && cc.text == "Music") {
227− return c;
228− }
229− }
230− }
231− var r = doFindMusicButton(c);
232− if (r !== undefined) {
233− return r;
234− }
235− }
236− return undefined;
237− }
238−
239− function findMusicButton() {
240− // We need to find a AbstractButton that has a Label child
241− // with text Music and it's parent x is >= 0
242− var tabbar = findChild(dashContent, "tabbar");
243− return doFindMusicButton(tabbar);
244− }
245−
246− function test_tabBar_index_change() {
247− tryCompare(scopesModel, "loaded", true);
248− var tabbar = findChild(dashContent, "tabbar");
249−
250− tryCompare(dashContent, "currentIndex", 0);
251− tryCompare(tabbar, "selectedIndex", 0);
252− tryCompare(tabbar, "selectionMode", false);
253−
254− mouseClick(tabbar, units.gu(5), units.gu(5))
255−
256− tryCompare(tabbar, "selectionMode", true);
257− tryCompare(tabbar, "selectedIndex", 0);
258− tryCompare(dashContent, "currentIndex", 0);
259−
260− var button;
261− tryCompareFunction(function() { button = findMusicButton(); return button != undefined; }, true);
262− waitForRendering(button);
263−
264− tryCompareFunction(function() { return button.opacity > 0; }, true);
265− mouseClick(button, button.width / 2, button.height / 2)
266−
267− tryCompare(tabbar, "selectionMode", false);
268− tryCompare(tabbar, "selectedIndex", 1);
269− tryCompare(dashContent, "currentIndex", 1);
270− }
271−
272− function test_tabBar_listens_to_index_change() {
273− var tabbar = findChild(dashContent, "tabbar");
274− tryCompare(dashContent, "currentIndex", 0);
275− compare(tabbar.selectedIndex, 0);
276− var dashContentList = findChild(dashContent, "dashContentList");
277− dashContentList.currentIndex = 1;
278− compare(tabbar.selectedIndex, 1);
279− }
280−
281 function checkFlickMovingAndNotInteractive()
219 function checkFlickMovingAndNotInteractive()
282 {
220 {
283 var dashContentList = findChild(dashContent, "dashContentList");
221 var dashContentList = findChild(dashContent, "dashContentList");
@@ -300,93 +238,6 @@ Item {
300 tryCompareFunction(checkFlickMovingAndNotInteractive, true);
238 tryCompareFunction(checkFlickMovingAndNotInteractive, true);
301 }
239 }
302
240
303− function openPreview() {
304− tryCompareFunction(function() {
305− var filterGrid = findChild(dashContent, "0");
306− if (filterGrid != null) {
307− var tile = findChild(filterGrid, "delegate0");
308− return tile != null;
309− }
310− return false;
311− },
312− true);
313− var tile = findChild(findChild(dashContent, "0"), "delegate0");
314− mouseClick(tile, tile.width / 2, tile.height / 2);
315− var previewListView = findChild(dashContent, "dashContentPreviewList");
316− tryCompare(previewListView, "open", true);
317− tryCompare(previewListView, "x", 0);
318− }
319−
320− function closePreview() {
321− var closePreviewMouseArea = findChild(dashContent, "dashContentPreviewList_pageHeader_backButton");
322− mouseClick(closePreviewMouseArea, closePreviewMouseArea.width / 2, closePreviewMouseArea.height / 2);
323−
324− var previewListView = findChild(dashContent, "dashContentPreviewList");
325− tryCompare(previewListView, "open", false);
326− }
327−
328− function test_previewOpenClose() {
329− var previewListView = findChild(dashContent, "dashContentPreviewList");
330− tryCompare(previewListView, "open", false);
331−
332− var categoryListView = findChild(dashContent, "categoryListView");
333− categoryListView.positionAtBeginning();
334−
335− openPreview();
336− closePreview();
337− }
338−
339− function test_showPreviewCarousel() {
340− tryCompareFunction(function() {
341− var scope = findChild(dashContent, "MockScope1 loader");
342− if (scope != null) {
343− var dashCategory1 = findChild(scope, "dashCategory1");
344− if (dashCategory1 != null) {
345− var tile = findChild(dashCategory1, "carouselDelegate1");
346− return tile != null;
347− }
348− }
349− return false;
350− },
351− true);
352−
353− var previewListView = findChild(dashContent, "dashContentPreviewList");
354− tryCompare(previewListView, "open", false);
355−
356− var scope = findChild(dashContent, "MockScope1 loader");
357− var dashCategory1 = findChild(scope, "dashCategory1");
358− var tile = findChild(dashCategory1, "carouselDelegate1");
359− mouseClick(tile, tile.width / 2, tile.height / 2);
360− tryCompare(previewListView, "open", true);
361− tryCompare(previewListView, "x", 0);
362−
363− closePreview();
364− }
365−
366− function test_previewCycle() {
367− var categoryListView = findChild(dashContent, "categoryListView");
368− categoryListView.positionAtBeginning();
369−
370− var previewListView = findChild(dashContent, "dashContentPreviewList");
371− tryCompare(previewListView, "open", false);
372− var previewListViewList = findChild(dashContent, "dashContentPreviewList_listView");
373−
374− openPreview();
375−
376− // flick to the next previews
377− tryCompare(previewListView, "count", 15);
378− for (var i = 1; i < previewListView.count; ++i) {
379− mouseFlick(previewListView, previewListView.width - units.gu(1),
380− previewListView.height / 2,
381− units.gu(2),
382− previewListView.height / 2);
383− tryCompare(previewListViewList, "moving", false);
384− tryCompare(previewListView.currentItem, "objectName", "previewItem" + i);
385−
386− }
387− closePreview();
388− }
389−
390 function test_carouselAspectRatio() {
241 function test_carouselAspectRatio() {
391 tryCompareFunction(function() {
242 tryCompareFunction(function() {
392 var scope = findChild(dashContent, "MockScope1 loader");
243 var scope = findChild(dashContent, "MockScope1 loader");
@@ -461,6 +312,7 @@ Item {
461 compare(allButton.visible, true);
312 compare(allButton.visible, true);
462 compare(backButton.visible, true);
313 compare(backButton.visible, true);
463
314
315+ waitForRendering(departmentListView);
464 mouseClick(allButton, 0, 0);
316 mouseClick(allButton, 0, 0);
465 compare(dashDepartments.showList, false);
317 compare(dashDepartments.showList, false);
466 tryCompare(dashDepartments.currentDepartment, "departmentId", "middle2");
318 tryCompare(dashDepartments.currentDepartment, "departmentId", "middle2");
tests/qmltests/Dash/tst_GenericScopeView.qml+98−45
@@ -37,10 +37,6 @@ Item {
37
37
38 Scopes {
38 Scopes {
39 id: scopes
39 id: scopes
40−
41− onLoadedChanged: {
42− genericScopeView.scope = scopes.getScope(2)
43− }
44 }
40 }
45
41
46 property Item applicationManager: Item {
42 property Item applicationManager: Item {
@@ -48,24 +44,17 @@ Item {
48 signal mainStageFocusedApplicationChanged()
44 signal mainStageFocusedApplicationChanged()
49 }
45 }
50
46
51− PageHeaderLabel {
52− id: testPageHeader
53− searchHistory: SearchHistoryModel {}
54− text: genericScopeView.scope ? genericScopeView.scope.name : ""
55− width: parent.width
56− }
57−
58 GenericScopeView {
47 GenericScopeView {
59 id: genericScopeView
48 id: genericScopeView
60 anchors.fill: parent
49 anchors.fill: parent
61− previewListView: previewListView
62− pageHeader: testPageHeader
63− tabBarHeight: testPageHeader.implicitHeight
64
50
65 UT.UnityTestCase {
51 UT.UnityTestCase {
52+ id: testCase
66 name: "GenericScopeView"
53 name: "GenericScopeView"
67 when: scopes.loaded && windowShown
54 when: scopes.loaded && windowShown
68
55
56+ property Item previewListView: findChild(genericScopeView, "previewListView")
57+
69 function init() {
58 function init() {
70 genericScopeView.scope = scopes.getScope(2)
59 genericScopeView.scope = scopes.getScope(2)
71 shell.width = units.gu(120)
60 shell.width = units.gu(120)
@@ -73,37 +62,28 @@ Item {
73 tryCompare(genericScopeView.categoryView, "contentY", 0)
62 tryCompare(genericScopeView.categoryView, "contentY", 0)
74 }
63 }
75
64
76− function test_isCurrent() {
77− genericScopeView.isCurrent = true
78− testPageHeader.searchQuery = "test"
79− previewListView.open = true
80− genericScopeView.isCurrent = false
81− tryCompare(testPageHeader, "searchQuery", "")
82− tryCompare(previewListView, "open", false);
83− }
84−
85 function test_isActive() {
65 function test_isActive() {
86 tryCompare(genericScopeView.scope, "isActive", false)
66 tryCompare(genericScopeView.scope, "isActive", false)
87 genericScopeView.isCurrent = true
67 genericScopeView.isCurrent = true
88 tryCompare(genericScopeView.scope, "isActive", true)
68 tryCompare(genericScopeView.scope, "isActive", true)
89− previewListView.open = true
69+ testCase.previewListView.open = true
90 tryCompare(genericScopeView.scope, "isActive", false)
70 tryCompare(genericScopeView.scope, "isActive", false)
91− previewListView.open = false
71+ testCase.previewListView.open = false
92 tryCompare(genericScopeView.scope, "isActive", true)
72 tryCompare(genericScopeView.scope, "isActive", true)
93 genericScopeView.isCurrent = false
73 genericScopeView.isCurrent = false
94 tryCompare(genericScopeView.scope, "isActive", false)
74 tryCompare(genericScopeView.scope, "isActive", false)
95 }
75 }
96
76
97 function test_showDash() {
77 function test_showDash() {
98− previewListView.open = true;
78+ testCase.previewListView.open = true;
99 scopes.getScope(2).showDash();
79 scopes.getScope(2).showDash();
100− tryCompare(previewListView, "open", false);
80+ tryCompare(testCase.previewListView, "open", false);
101 }
81 }
102
82
103 function test_hideDash() {
83 function test_hideDash() {
104− previewListView.open = true;
84+ testCase.previewListView.open = true;
105 scopes.getScope(2).hideDash();
85 scopes.getScope(2).hideDash();
106− tryCompare(previewListView, "open", false);
86+ tryCompare(testCase.previewListView, "open", false);
107 }
87 }
108
88
109 function test_searchQuery() {
89 function test_searchQuery() {
@@ -170,14 +150,6 @@ Item {
170
150
171 categoryListView.positionAtBeginning();
151 categoryListView.positionAtBeginning();
172
152
173− // wait for the header0 to be on its position
174− tryCompareFunction(
175− function() {
176− var header0 = findChild(genericScopeView, "dashSectionHeader0")
177− return header0.y == testPageHeader.height;
178− },
179− true);
180−
181 var header0 = findChild(genericScopeView, "dashSectionHeader0")
153 var header0 = findChild(genericScopeView, "dashSectionHeader0")
182 var category0 = findChild(genericScopeView, "dashCategory0")
154 var category0 = findChild(genericScopeView, "dashCategory0")
183 mouseClick(header0, header0.width / 2, header0.height / 2);
155 mouseClick(header0, header0.width / 2, header0.height / 2);
@@ -204,14 +176,95 @@ Item {
204 mouseClick(header0, header0.width / 2, header0.height / 2);
176 mouseClick(header0, header0.width / 2, header0.height / 2);
205 tryCompare(category, "filtered", true);
177 tryCompare(category, "filtered", true);
206 }
178 }
207− }
208− }
209
179
210− PreviewListView {
180+ function openPreview() {
181+ tryCompareFunction(function() {
182+ var filterGrid = findChild(genericScopeView, "0");
183+ if (filterGrid != null) {
184+ var tile = findChild(filterGrid, "delegate0");
185+ return tile != null;
186+ }
187+ return false;
188+ },
189+ true);
190+ var tile = findChild(findChild(genericScopeView, "0"), "delegate0");
191+ mouseClick(tile, tile.width / 2, tile.height / 2);
211− id: previewListView
192+ tryCompare(testCase.previewListView, "open", true);
212− anchors.fill: parent
193+ tryCompare(testCase.previewListView, "x", 0);
213− visible: false
194+ }
214− pageHeader: testPageHeader
195+
196+ function closePreview() {
197+ var closePreviewMouseArea = findChild(genericScopeView, "innerPageHeader");
198+ mouseClick(closePreviewMouseArea, units.gu(2), units.gu(2));
199+
200+ tryCompare(testCase.previewListView, "open", false);
201+ }
202+
203+ function test_previewOpenClose() {
204+ tryCompare(testCase.previewListView, "open", false);
205+
206+ var categoryListView = findChild(genericScopeView, "categoryListView");
207+ categoryListView.positionAtBeginning();
208+
209+ openPreview();
210+ closePreview();
211+ }
212+
213+ function test_showPreviewCarousel() {
214+ tryCompareFunction(function() {
215+ var dashCategory1 = findChild(genericScopeView, "dashCategory1");
216+ if (dashCategory1 != null) {
217+ var tile = findChild(dashCategory1, "carouselDelegate1");
218+ return tile != null;
219+ }
220+ return false;
221+ },
222+ true);
223+
224+ tryCompare(testCase.previewListView, "open", false);
225+
226+ var dashCategory1 = findChild(genericScopeView, "dashCategory1");
227+ var tile = findChild(dashCategory1, "carouselDelegate1");
228+ mouseClick(tile, tile.width / 2, tile.height / 2);
229+ tryCompare(tile, "explicitlyScaled", true);
230+ mouseClick(tile, tile.width / 2, tile.height / 2);
231+ tryCompare(testCase.previewListView, "open", true);
232+ tryCompare(testCase.previewListView, "x", 0);
233+
234+ closePreview();
235+ }
236+
237+ function test_previewCycle() {
238+ var categoryListView = findChild(genericScopeView, "categoryListView");
239+ categoryListView.positionAtBeginning();
240+
241+ tryCompare(testCase.previewListView, "open", false);
242+ var previewListViewList = findChild(previewListView, "listView");
243+
244+ openPreview();
245+
246+ // flick to the next previews
247+ tryCompare(testCase.previewListView, "count", 15);
248+ for (var i = 1; i < testCase.previewListView.count; ++i) {
249+ mouseFlick(testCase.previewListView, testCase.previewListView.width - units.gu(1),
250+ testCase.previewListView.height / 2,
251+ units.gu(2),
252+ testCase.previewListView.height / 2);
253+ tryCompare(previewListViewList, "moving", false);
254+ tryCompare(testCase.previewListView.currentItem, "objectName", "previewItem" + i);
255+
256+ }
257+ closePreview();
258+ }
259+
260+ function test_haeder_logo() {
215− scope: genericScopeView.scope
261+ genericScopeView.scope = scopes.getScope(3);
262+
263+ var image = findChild(genericScopeView, "titleImage");
264+ verify(image, "Could not find the title image");
265+ compare(image.source, Qt.resolvedUrl("../Components/tst_PageHeader/logo-ubuntu-orange.svg"), "Title image has the wrong source");
266+
267+ }
268+ }
216 }
269 }
217}
270}
tests/qmltests/Panel/Indicators/tst_DefaultIndicatorPage.qml+1
@@ -31,6 +31,7 @@ Item {
31 anchors.fill: parent
31 anchors.fill: parent
32 contentActive: true
32 contentActive: true
33
33
34+ menuModel: UnityMenuModel {}
34 busName: "test"
35 busName: "test"
35 actionsObjectPath: "test"
36 actionsObjectPath: "test"
36 menuObjectPath: "test"
37 menuObjectPath: "test"
tests/qmltests/Panel/Indicators/tst_DefaultIndicatorWidget.qml+3−40
@@ -33,6 +33,7 @@ Item {
33 top: parent.top
33 top: parent.top
34 }
34 }
35
35
36+ menuModel: UnityMenuModel {}
36 busName: "test"
37 busName: "test"
37 actionsObjectPath: "test"
38 actionsObjectPath: "test"
38 deviceMenuObjectPath: "test"
39 deviceMenuObjectPath: "test"
@@ -41,12 +42,6 @@ Item {
41
42
42 iconSize: units.gu(3.2)
43 iconSize: units.gu(3.2)
43 height: units.gu(3)
44 height: units.gu(3)
44−
45− rootActionState {
46− icons: [ "image://theme/audio-volume-high", "image://theme/audio-volume-low" ]
47− leftLabel: "left"
48− rightLabel: "right"
49− }
50 }
45 }
51
46
52 UT.UnityTestCase {
47 UT.UnityTestCase {
@@ -57,41 +52,9 @@ Item {
57 widget.rootActionState.icons = [];
52 widget.rootActionState.icons = [];
58 widget.rootActionState.leftLabel = "";
53 widget.rootActionState.leftLabel = "";
59 widget.rootActionState.rightLabel = "";
54 widget.rootActionState.rightLabel = "";
60− wait(50);
55+ waitForRendering(widget)
61− }
62−
63− function test_guRoundedWidth_data() {
64− return [
65− { tag: "empty", icons: [], leftLabel: "", rightLabel: "" },
66− { tag: "1-icon-no-label", icons: [ "image://theme/audio-volume-high" ], leftLabel: "", rightLabel: "" },
67− { tag: "2-icon-no-label", icons: [ "image://theme/audio-volume-high", "image://theme/audio-volume-low" ], leftLabel: "", rightLabel: "" },
68− { tag: "no-icon-l-label", icons: [], leftLabel: "left", rightLabel: "" },
69− { tag: "no-icon-lr-label", icons: [], leftLabel: "left", rightLabel: "right" },
70− { tag: "1-icon-l-label", icons: [ "image://theme/audio-volume-high" ], leftLabel: "left", rightLabel: "" },
71− { tag: "1-icon-lr-label", icons: [ "image://theme/audio-volume-high" ], leftLabel: "left", rightLabel: "right" },
72− { tag: "2-icon-l-label", icons: [ "image://theme/audio-volume-high", "image://theme/audio-volume-low" ], leftLabel: "left", rightLabel: "" },
73− { tag: "2-icon-lr-label", icons: [ "image://theme/audio-volume-high", "image://theme/audio-volume-low" ], leftLabel: "left", rightLabel: "right" }
74− ];
75− }
76−
77− function test_guRoundedWidth(data) {
78− widget.rootActionState.icons = data.icons
79− widget.rootActionState.leftLabel = data.leftLabel;
80− widget.rootActionState.rightLabel = data.rightLabel;
81− wait(50);
82−
83− compare(widget.width, guRoundUp(widget.width));
84− }
85− }
86−
87− // TODO: Use toolkit function https://bugs.launchpad.net/ubuntu-ui-toolkit/+bug/1242575
88− function guRoundUp(width) {
89− if (width == 0) {
90− return 0;
91 }
56 }
92− var gu1 = units.gu(1.0);
93− var mod = (width % gu1);
94
57
95− return mod == 0 ? width : width + (gu1 - mod);
58+ // FIXME: add tests
96 }
59 }
97}
60}
tests/qmltests/Panel/Indicators/tst_MenuItemFactory.qml+65−2
@@ -18,15 +18,16 @@ import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import Unity.Test 0.1 as UT
19import Unity.Test 0.1 as UT
20import QMenuModel 0.1
20import QMenuModel 0.1
21−import Unity.Indicators 0.1 as Indicators
22import Utils 0.1 as Utils
21import Utils 0.1 as Utils
22+import "../../../../qml/Panel/Indicators"
23+
23
24
24Item {
25Item {
25 id: testView
26 id: testView
26 width: units.gu(40)
27 width: units.gu(40)
27 height: units.gu(70)
28 height: units.gu(70)
28
29
29− Indicators.MenuItemFactory {
30+ MenuItemFactory {
30 id: factory
31 id: factory
31 menuModel: UnityMenuModel {}
32 menuModel: UnityMenuModel {}
32 }
33 }
@@ -97,6 +98,8 @@ Item {
97 { tag: 'switch2', type: "com.canonical.indicator.switch", objectName: "switchMenu" },
98 { tag: 'switch2', type: "com.canonical.indicator.switch", objectName: "switchMenu" },
98 { tag: 'alarm', type: "com.canonical.indicator.alarm", objectName: "alarmMenu" },
99 { tag: 'alarm', type: "com.canonical.indicator.alarm", objectName: "alarmMenu" },
99 { tag: 'appointment', type: "com.canonical.indicator.appointment", objectName: "appointmentMenu" },
100 { tag: 'appointment', type: "com.canonical.indicator.appointment", objectName: "appointmentMenu" },
101+ { tag: 'transfer', type: "com.canonical.indicator.transfer", objectName: "transferMenu" },
102+ { tag: 'buttonSection', type: "com.canonical.indicator.button-section", objectName: "buttonSectionMenu" },
100
103
101 { tag: 'messageItem', type: "com.canonical.indicator.messages.messageitem", objectName: "messageItem" },
104 { tag: 'messageItem', type: "com.canonical.indicator.messages.messageitem", objectName: "messageItem" },
102 { tag: 'sourceItem', type: "com.canonical.indicator.messages.sourceitem", objectName: "groupedMessage" },
105 { tag: 'sourceItem', type: "com.canonical.indicator.messages.sourceitem", objectName: "groupedMessage" },
@@ -427,6 +430,66 @@ Item {
427 compare(loader.item.enabled, data.enabled, "Enabled does not match data");
430 compare(loader.item.enabled, data.enabled, "Enabled does not match data");
428 }
431 }
429
432
433+ function test_create_transferMenu_data() {
434+ return [
435+ {tag: "queued", label: "testLabel1", enabled: true, active: true, icon: "file:///testIcon1", progress: 0, stateText: "In queue…" },
436+ {tag: "running", label: "testLabel2", enabled: true, active: true, icon: "file:///testIcon2", progress: 0.1, stateText: "1 minute, 40 seconds remaining" },
437+ {tag: "paused", label: "testLabel3", enabled: true, active: true, icon: "file:///testIcon3", progress: 0.5, stateText: "Paused, tap to resume" },
438+ {tag: "cancelled", label: "testLabel4", enabled: true, active: true, icon: "file:///testIcon4", progress: 0.4, stateText: "Canceled" },
439+ {tag: "finished", label: "testLabel5", enabled: false, active: false, icon: "file:///testIcon5", progress: 1.0, stateText: "Finished" },
440+ {tag: "error", label: "testLabel6", enabled: false, active: true, icon: "file:///testIcon6", progress: 0, stateText: "Failed, tap to retry" },
441+ ];
442+ }
443+
444+ function test_create_transferMenu(data) {
445+ menuData.type = "com.canonical.indicator.transfer";
446+ menuData.label = data.label;
447+ menuData.sensitive = data.enabled;
448+ menuData.icon = data.icon;
449+ menuData.ext = {
450+ 'xCanonicalUid': data.tag
451+ };
452+
453+ loader.data = menuData;
454+ loader.sourceComponent = factory.load(menuData);
455+ tryCompareFunction(function() { return loader.item != undefined; }, true);
456+ compare(loader.item.objectName, "transferMenu", "Should have created a transfer menu");
457+
458+ compare(loader.item.text, data.label, "Label does not match data");
459+ compare(loader.item.iconSource, data.icon, "Icon does not match data");
460+ compare(loader.item.enabled, data.enabled, "Enabled does not match data");
461+ compare(loader.item.progress, data.progress, "Icon does not match data");
462+ compare(loader.item.active, data.active, "Active does not match data");
463+ compare(loader.item.stateText, data.stateText, "State text does not match data");
464+ }
465+
466+ function test_create_buttonSectionMenu_data() {
467+ return [
468+ {label: "testLabel1", enabled: true, buttonText: "buttonLabel1", icon: "file:///testIcon1" },
469+ {label: "testLabel2", enabled: false, buttonText: "buttonLabel1", icon: "file:///testIcon2" },
470+ ];
471+ }
472+
473+ function test_create_buttonSectionMenu(data) {
474+ menuData.type = "com.canonical.indicator.button-section";
475+ menuData.label = data.label;
476+ menuData.sensitive = data.enabled;
477+ menuData.icon = data.icon;
478+ menuData.ext = {
479+ 'xCanonicalExtraLabel': data.buttonText
480+ };
481+
482+ loader.data = menuData;
483+ loader.sourceComponent = factory.load(menuData);
484+ tryCompareFunction(function() { return loader.item != undefined; }, true);
485+ compare(loader.item.objectName, "buttonSectionMenu", "Should have created a transfer menu");
486+
487+ compare(loader.item.text, data.label, "Label does not match data");
488+ compare(loader.item.iconSource, data.icon, "Icon does not match data");
489+ compare(loader.item.enabled, data.enabled, "Enabled does not match data");
490+ compare(loader.item.control.text, data.buttonText, "Button text does not match data");
491+ }
492+
430 function test_create_wifiSection_data() {
493 function test_create_wifiSection_data() {
431 return [
494 return [
432 {label: "testLabel1", busy: false },
495 {label: "testLabel1", busy: false },
tests/qmltests/Panel/Indicators/tst_MessageMenuItemFactory.qml+2−2
@@ -18,15 +18,15 @@ import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import Unity.Test 0.1 as UT
19import Unity.Test 0.1 as UT
20import QMenuModel 0.1
20import QMenuModel 0.1
21−import Unity.Indicators 0.1 as Indicators
22import Utils 0.1 as Utils
21import Utils 0.1 as Utils
22+import "../../../../qml/Panel/Indicators"
23
23
24Item {
24Item {
25 id: testView
25 id: testView
26 width: units.gu(40)
26 width: units.gu(40)
27 height: units.gu(70)
27 height: units.gu(70)
28
28
29− Indicators.MessageMenuItemFactory {
29+ MessageMenuItemFactory {
30 id: factory
30 id: factory
31 menuModel: UnityMenuModel {}
31 menuModel: UnityMenuModel {}
32 menuIndex: 0
32 menuIndex: 0
tests/qmltests/Panel/tst_ActiveCallHint.qmlnew file+165
@@ -0,0 +1,165 @@
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 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 Unity.Test 0.1 as UT
20+import Ubuntu.Telephony 0.1 as Telephony
21+import Unity.Application 0.1
22+import ".."
23+import "../../../qml/Panel"
24+
25+Item {
26+ width: units.gu(40)
27+ height: units.gu(20)
28+
29+ Telephony.CallEntry {
30+ id: call1
31+ phoneNumber: "+447812221111"
32+ }
33+
34+ Telephony.CallEntry {
35+ id: call2
36+ phoneNumber: "+447812221112"
37+ }
38+
39+ Telephony.CallEntry {
40+ id: call3
41+ phoneNumber: "+447812221113"
42+ }
43+
44+ ActiveCallHint {
45+ id: callHint
46+ anchors {
47+ top: parent.top
48+ left:parent.left
49+ right:parent.right
50+ }
51+ height: units.gu(3)
52+ labelSwitchInterval: 2000
53+ }
54+
55+ Component.onCompleted: {
56+ contactWactherData.contactData = {
57+ "+447812221113": {
58+ "alias": "Bob's Uncle"
59+ }
60+ };
61+ callManager.foregroundCall = call3;
62+ }
63+
64+ UT.UnityTestCase {
65+ name: "ActiveCallHint"
66+ when: windowShown
67+
68+ function init() {
69+ callManager.foregroundCall = null;
70+ callManager.backgroundCall = null;
71+ callHint.labelSwitchInterval = 300;
72+
73+ ApplicationManager.stopApplication("dialer-app");
74+ }
75+
76+ function test_activeHint_data() {
77+ return [
78+ { tag: "noCall-callNotVisible", dialer: false, call: null, visible: false, expected: false },
79+ { tag: "noCall-callVisible", dialer: false, call: null, visible: true, expected: false },
80+ { tag: "hasCall-callNotVisible", dialer: false, call: call1, visible: false, expected: true },
81+ { tag: "hasCall-callVisible", dialer: false, call: call1, visible: true, expected: true },
82+
83+ { tag: "dialerNotFocused-noCall-callNotVisible", dialer: true, focused: false, call: null, visible: false, expected: false },
84+ { tag: "dialerNotFocused-noCall-callVisible", dialer: true, focused: false, call: null, visible: true, expected: false },
85+ { tag: "dialerNotFocused-hasCall-callNotVisible", dialer: true, focused: false, call: call1, visible: false, expected: true },
86+ { tag: "dialerNotFocused-hasCall-callVisible", dialer: true, focused: false, call: call1, visible: true, expected: true },
87+
88+ { tag: "dialerFocused-noCall-callNotVisible", dialer: true, focused: true, call: null, visible: false, expected: false },
89+ { tag: "dialerFocused-noCall-callVisible", dialer: true, focused: true, call: null, visible: true, expected: true },
90+ { tag: "dialerFocused-hasCall-callNotVisible", dialer: true, focused: true, call: call1, visible: false, expected: false },
91+ { tag: "dialerFocused-hasCall-callVisible", dialer: true, focused: true, call: call1, visible: true, expected: true },
92+ ];
93+ }
94+
95+ function test_activeHint(data) {
96+ if (data.dialer) {
97+ var application = ApplicationManager.startApplication("dialer-app");
98+ tryCompare(ApplicationManager, "focusedApplicationId", "dialer-app");
99+ tryCompare(application, "state", ApplicationInfo.Running);
100+
101+ if (!data.focused) { ApplicationManager.unfocusCurrentApplication(); }
102+ }
103+ callManager.foregroundCall = data.call;
104+ callManager.callIndicatorVisible = data.visible;
105+
106+ compare(callHint.active, data.expected, "Call hint should be active when callIndicatorVisible=true");
107+ }
108+
109+ function test_currentCall_data() {
110+ return [
111+ { tag: "empty", foreground: null, background: null, active: false, label: "" },
112+ { tag: "foreground", foreground: call1, background: null, active: true, label: "+447812221111" },
113+ { tag: "background", foreground: null, background: call2, active: true, label: "+447812221112" },
114+ { tag: "multiple", foreground: call1, background: call2, active: true, label: "+447812221111" },
115+ ];
116+ }
117+
118+ function test_currentCall(data) {
119+ callManager.foregroundCall = data.foreground;
120+ callManager.backgroundCall = data.background;
121+
122+ var contactLabel = findChild(callHint, "contactLabel");
123+ verify(contactLabel !== null);
124+
125+ compare(contactLabel.text, data.label, "Contact label does not match call");
126+ }
127+
128+ function test_changeContactData() {
129+ callManager.backgroundCall = call3;
130+
131+ var contactLabel = findChild(callHint, "contactLabel");
132+ verify(contactLabel !== null);
133+
134+ contactWactherData.contactData = { "+447812221113": { "alias": "Bob's Uncle" } };
135+ compare(contactLabel.text, "Bob's Uncle", "Contact label does not match call");
136+
137+ contactWactherData.contactData = { "+447812221113": { "alias": "Freddy" } };
138+ compare(contactLabel.text, "Freddy", "Contact label does not match call");
139+ }
140+
141+ function test_timeLapse() {
142+ callManager.backgroundCall = call3;
143+
144+ var timeLabel = findChild(callHint, "timeLabel");
145+ verify(timeLabel !== null);
146+
147+ var currentLabel = timeLabel.text;
148+ tryCompareFunction(function() { return timeLabel.text !== currentLabel }, true);
149+ currentLabel = timeLabel.text;
150+ tryCompareFunction(function() { return timeLabel.text !== currentLabel }, true);
151+ }
152+
153+ function test_displayedLabelChangesOverTime() {
154+ callManager.backgroundCall = call3;
155+
156+ var labelPathView = findChild(callHint, "labelPathView");
157+ verify(labelPathView !== null);
158+
159+ var currentOffset = labelPathView.offset
160+ tryCompareFunction(function() { return labelPathView.offset !== currentOffset }, true);
161+ currentOffset = labelPathView.offset
162+ tryCompareFunction(function() { return labelPathView.offset !== currentOffset }, true);
163+ }
164+ }
165+}
tests/qmltests/Panel/tst_Indicators.qml+10−21
@@ -17,6 +17,7 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import Unity.Test 0.1 as UT
19import Unity.Test 0.1 as UT
20+import Ubuntu.Components 0.1 as UC
20import ".."
21import ".."
21import "../../../qml/Panel"
22import "../../../qml/Panel"
22import "../../../qml/Components"
23import "../../../qml/Components"
@@ -45,13 +46,12 @@ Item {
45 shown: false
46 shown: false
46 profile: "test1"
47 profile: "test1"
47
48
48− openedHeight: parent.height - click_me.height
49+ openedHeight: parent.height - button.height
49 }
50 }
50
51
51− // Just a rect for clicking to open the indicators.
52+ UC.Button {
52− Rectangle {
53+ id: button
53− id: click_me
54+ text: indicators.shown ? "Hide" : "Show"
54− color: "red"
55 anchors {
55 anchors {
56 bottom: shell.bottom
56 bottom: shell.bottom
57 left: parent.left
57 left: parent.left
@@ -59,22 +59,11 @@ Item {
59 }
59 }
60 height: 50
60 height: 50
61
61
62− Text {
63− text: "Click Me"
64− horizontalAlignment: Text.AlignHCenter
65− verticalAlignment: Text.AlignVCenter
66− anchors.fill: parent
67−
68− MouseArea {
69− anchors.fill: parent
70−
71− onClicked: {
62+ onClicked: {
72− if (!indicators.shown) {
63+ if (!indicators.shown) {
73− indicators.show();
64+ indicators.show();
74− } else {
65+ } else {
75− indicators.hide();
66+ indicators.hide();
76− }
77− }
78 }
67 }
79 }
68 }
80 }
69 }
tests/qmltests/Panel/tst_Panel.qml+147−82
@@ -17,6 +17,8 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import Unity.Test 0.1 as UT
19import Unity.Test 0.1 as UT
20+import Ubuntu.Components 0.1 as UC
21+import Ubuntu.Telephony 0.1 as Telephony
20import ".."
22import ".."
21import "../../../qml/Panel"
23import "../../../qml/Panel"
22
24
@@ -30,42 +32,104 @@ Item {
30 width: units.gu(40)
32 width: units.gu(40)
31 height: units.gu(80)
33 height: units.gu(80)
32
34
33− property bool searchClicked: false
34−
35− Connections {
36− target: panel
37− onSearchClicked: searchClicked = true
38− }
39−
40 Panel {
35 Panel {
41 id: panel
36 id: panel
42− anchors.fill: parent
37+ anchors {
38+ left: parent.left
39+ right: parent.right
40+ }
41+ height: parent.height - row.height
42+ fullscreenMode: false
43
43
44 indicators {
44 indicators {
45 profile: "test1"
45 profile: "test1"
46+ panelHeight: units.gu(5)
47+ }
48+ callHint {
49+ height: units.gu(4)
46 }
50 }
51+
52+ property real panelAndSeparatorHeight: panel.indicators.panelHeight + units.dp(2)
53+ }
54+
55+
56+ Row {
57+ id: row
58+ anchors {
59+ bottom: shell.bottom
60+ left: parent.left
61+ right: parent.right
62+ }
63+ height: 50
64+
65+ UC.Button {
66+ text: panel.indicators.shown ? "Hide" : "Show"
67+ anchors {
68+ top: parent.top
69+ bottom: parent.bottom
70+ }
71+ width: parent.width/3
72+
73+ onClicked: {
74+ if (panel.indicators.shown) {
75+ panel.indicators.hide();
76+ } else {
77+ panel.indicators.show();
78+ }
79+ }
80+ }
81+
82+ UC.Button {
83+ text: panel.fullscreenMode ? "Maximize" : "FullScreen"
84+ anchors {
85+ top: parent.top
86+ bottom: parent.bottom
87+ }
88+ width: parent.width/3
89+
90+ onClicked: panel.fullscreenMode = !panel.fullscreenMode
91+ }
92+
93+ UC.Button {
94+ text: callManager.hasCalls ? "Called" : "No Calls"
95+ anchors {
96+ top: parent.top
97+ bottom: parent.bottom
98+ }
99+ width: parent.width/3
100+
101+ onClicked: {
102+ if (callManager.foregroundCall) {
103+ callManager.foregroundCall = null;
104+ } else {
105+ callManager.foregroundCall = phoneCall;
106+ }
107+ }
108+ }
109+ }
110+
111+ Telephony.CallEntry {
112+ id: phoneCall
113+ phoneNumber: "+447812221111"
47 }
114 }
48
115
49 UT.UnityTestCase {
116 UT.UnityTestCase {
50 name: "Panel"
117 name: "Panel"
51 when: windowShown
118 when: windowShown
52
119
53− function get_window_data() {
54− return [
55− {tag: "pinned", fullscreenFlag: false, alreadyOpen: false },
56− {tag: "fullscreen", fullscreenFlag: true, alreadyOpen: false },
57− {tag: "pinned-alreadyOpen", fullscreenFlag: false, alreadyOpen: true },
58− {tag: "fullscreen-alreadyOpen", fullscreenFlag: true, alreadyOpen: true }
59− ];
60− }
61−
62 function init() {
120 function init() {
63 panel.indicators.initialise();
121 panel.indicators.initialise();
122+ panel.fullscreenMode = false;
64
123
65− searchClicked = false;
66 panel.indicators.hide();
124 panel.indicators.hide();
125+ // Wait for animation to complete
67 tryCompare(panel.indicators.hideAnimation, "running", false);
126 tryCompare(panel.indicators.hideAnimation, "running", false);
68− tryCompare(panel.indicators, "state", "initial");
127+ callManager.foregroundCall = null;
128+
129+ // Wait for the indicators to get into position.
130+ // (switches between normal and fullscreen modes are animated)
131+ var indicatorArea = findChild(panel, "indicatorArea");
132+ tryCompare(indicatorArea, "y", 0);
69 }
133 }
70
134
71 function get_indicator_item(index) {
135 function get_indicator_item(index) {
@@ -88,46 +152,59 @@ Item {
88 // Pressing on the indicator panel should activate the indicator hints
152 // Pressing on the indicator panel should activate the indicator hints
89 // and expose a portion of the conent.
153 // and expose a portion of the conent.
90 function test_hint() {
154 function test_hint() {
91− panel.fullscreenMode = false;
92− // Wait for the indicators to get into position.
93− // (switches between normal and fullscreen modes are animated)
94− tryCompare(panel.indicators, "y", 0);
95−
96 var indicatorItemCoord = get_indicator_item_position(0);
155 var indicatorItemCoord = get_indicator_item_position(0);
97
156
98− touchPress(panel, indicatorItemCoord.x, panel.panelHeight / 2);
157+ touchPress(panel, indicatorItemCoord.x, panel.indicators.panelHeight / 2);
99
158
100 // hint animation should be run, meaning that indicators will move downwards
159 // hint animation should be run, meaning that indicators will move downwards
101 // by hintValue pixels without any drag taking place
160 // by hintValue pixels without any drag taking place
102− tryCompare(panel.indicators, "height",
161+ tryCompareFunction(function() { return panel.indicators.height },
103− panel.indicators.panelHeight + panel.indicators.hintValue);
162+ panel.indicators.panelHeight + panel.indicators.hintValue);
104 tryCompare(panel.indicators, "partiallyOpened", true);
163 tryCompare(panel.indicators, "partiallyOpened", true);
105 tryCompare(panel.indicators, "fullyOpened", false);
164 tryCompare(panel.indicators, "fullyOpened", false);
106
165
107− touchRelease(panel, indicatorItemCoord.x, panel.panelHeight/2);
166+ touchRelease(panel, indicatorItemCoord.x, panel.indicators.panelHeight/2);
108 }
167 }
109
168
110 // Pressing on the top edge of the screen should have no effect if the panel
169 // Pressing on the top edge of the screen should have no effect if the panel
111− // is hidden (!pinned), which is the case when a fullscreen app is being shown
170+ // is hidden (fullscreen), which is the case when a fullscreen app is being shown
112 function test_noHintOnFullscreenMode() {
171 function test_noHintOnFullscreenMode() {
113 panel.fullscreenMode = true;
172 panel.fullscreenMode = true;
114 // Wait for the indicators to get into position.
173 // Wait for the indicators to get into position.
115 // (switches between normal and fullscreen modes are animated)
174 // (switches between normal and fullscreen modes are animated)
175+ var indicatorArea = findChild(panel, "indicatorArea");
116− tryCompare(panel.indicators, "y", -panel.panelHeight);
176+ tryCompare(indicatorArea, "y", -panel.panelHeight);
117
177
118 var indicatorItemCoord = get_indicator_item_position(0);
178 var indicatorItemCoord = get_indicator_item_position(0);
119
179
120− touchPress(panel, indicatorItemCoord.x, panel.panelHeight / 2);
180+ touchPress(panel, indicatorItemCoord.x, panel.indicators.panelHeight / 2);
181+
182+ // Give some time for a hint animation to change things, if any
183+ wait(500);
184+
185+ // no hint animation when fullscreen
186+ compare(panel.indicators.partiallyOpened, false,
187+ "Indicator should not be partially opened when panel is pressed in" +
188+ " fullscreenmode");
189+ compare(panel.indicators.fullyOpened, false, "Indicator should not be partially" +
190+ " opened when panel is pressed in fullscreenmode");
191+
192+ touchRelease(panel, indicatorItemCoord.x, panel.panelHeight/2);
193+ }
194+
195+ // Pressing on the top edge of the indicator should have no effect if the panel
196+ // has an active call
197+ function test_noHintOnActiveCall() {
198+ callManager.foregroundCall = phoneCall;
199+
200+ var indicatorItemCoord = get_indicator_item_position(0);
201+
202+ touchPress(panel, indicatorItemCoord.x, panel.callHint.height + panel.indicators.panelHeight / 2);
121
203
122 // Give some time for a hint animation to change things, if any
204 // Give some time for a hint animation to change things, if any
123 wait(500);
205 wait(500);
124
206
125 // no hint animation when fullscreen
207 // no hint animation when fullscreen
126− compare(panel.indicators.y, -panel.panelHeight);
127− var indicatorRow = findChild(panel.indicators, "indicatorRow");
128− verify(indicatorRow !== null);
129− compare(indicatorRow.y, 0);
130− compare(panel.indicators.height, panel.indicators.panelHeight);
131 compare(panel.indicators.partiallyOpened, false,
208 compare(panel.indicators.partiallyOpened, false,
132 "Indicator should not be partially opened when panel is pressed in" +
209 "Indicator should not be partially opened when panel is pressed in" +
133 " fullscreenmode");
210 " fullscreenmode");
@@ -137,34 +214,47 @@ Item {
137 touchRelease(panel, indicatorItemCoord.x, panel.panelHeight/2);
214 touchRelease(panel, indicatorItemCoord.x, panel.panelHeight/2);
138 }
215 }
139
216
140− function test_drag_show_data() { return get_window_data(); }
217+ function test_drag_show_data() {
218+ return [
219+ { tag: "pinned", fullscreenFlag: false, alreadyOpen: false, call: null,
220+ indicatorY: 0 },
221+ { tag: "fullscreen", fullscreenFlag: true, alreadyOpen: false, call: null,
222+ indicatorY: -panel.panelAndSeparatorHeight },
223+ { tag: "pinned-alreadyOpen", fullscreenFlag: false, alreadyOpen: true, call: null,
224+ indicatorY: 0 },
225+ { tag: "fullscreen-alreadyOpen", fullscreenFlag: true, alreadyOpen: true, call: null,
226+ indicatorY: 0 },
227+ { tag: "pinned-callActive", fullscreenFlag: false, alreadyOpen: false, call: phoneCall,
228+ indicatorY: 0},
229+ { tag: "fullscreen-callActive", fullscreenFlag: true, alreadyOpen: false, call: phoneCall,
230+ indicatorY: -panel.panelAndSeparatorHeight }
231+ ];
232+ }
141
233
142 // Dragging from a indicator item in the panel will gradually expose the
234 // Dragging from a indicator item in the panel will gradually expose the
143 // indicators, first by running the hint animation, then after dragging down will
235 // indicators, first by running the hint animation, then after dragging down will
144 // expose more of the panel, binding it to the selected indicator and opening it's menu.
236 // expose more of the panel, binding it to the selected indicator and opening it's menu.
145 function test_drag_show(data) {
237 function test_drag_show(data) {
146 panel.fullscreenMode = data.fullscreenFlag;
238 panel.fullscreenMode = data.fullscreenFlag;
239+ callManager.foregroundCall = data.call;
240+
147 if (data.alreadyOpen) {
241 if (data.alreadyOpen) {
148 panel.indicators.show();
242 panel.indicators.show();
149 tryCompare(panel.indicators, "fullyOpened", true);
243 tryCompare(panel.indicators, "fullyOpened", true);
150 }
244 }
151
245
152− var indicatorRow = findChild(panel.indicators, "indicatorRow");
246+ var indicatorRow = findChild(panel.indicators, "indicatorRow");
153 verify(indicatorRow !== null);
247 verify(indicatorRow !== null);
154
248
155 var menuContent = findChild(panel.indicators, "menuContent");
249 var menuContent = findChild(panel.indicators, "menuContent");
156− verify(indicatorRow !== null);
250+ verify(menuContent !== null);
157
251
158− var menuContent = findChild(panel.indicators, "menuContent");
252+ var indicatorArea = findChild(panel, "indicatorArea");
159− verify(indicatorRow !== null);
253+ verify(indicatorArea !== null);
160
254
161 // Wait for the indicators to get into position.
255 // Wait for the indicators to get into position.
162 // (switches between normal and fullscreen modes are animated)
256 // (switches between normal and fullscreen modes are animated)
163− if (data.fullscreenFlag) {
257+ tryCompareFunction(function() { return indicatorArea.y }, data.indicatorY);
164− tryCompare(panel.indicators, "y", -panel.panelHeight);
165− } else {
166− tryCompare(panel.indicators, "y", 0);
167− }
168
258
169 // do this for each indicator item
259 // do this for each indicator item
170 for (var i = 0; i < indicatorRow.row.count; i++) {
260 for (var i = 0; i < indicatorRow.row.count; i++) {
@@ -178,12 +268,12 @@ Item {
178 var indicatorItemCoord = get_indicator_item_position(i);
268 var indicatorItemCoord = get_indicator_item_position(i);
179
269
180 touchPress(panel,
270 touchPress(panel,
181− indicatorItemCoord.x, panel.panelHeight / 2);
271+ indicatorItemCoord.x, panel.indicators.panelHeight / 2);
182
272
183 // 1) Drag the mouse down
273 // 1) Drag the mouse down
184 touchFlick(panel,
274 touchFlick(panel,
185− indicatorItemCoord.x, panel.panelHeight / 2,
275+ indicatorItemCoord.x, panel.indicators.panelHeight / 2,
186− indicatorItemCoord.x, panel.height * 0.8,
276+ indicatorItemCoord.x, panel.height,
187 false /* beginTouch */, false /* endTouch */);
277 false /* beginTouch */, false /* endTouch */);
188
278
189 // Indicators height should follow the drag, and therefore increase accordingly.
279 // Indicators height should follow the drag, and therefore increase accordingly.
@@ -192,7 +282,7 @@ Item {
192 function() {return panel.indicators.height >= panel.height * 0.5},
282 function() {return panel.indicators.height >= panel.height * 0.5},
193 true);
283 true);
194
284
195− touchRelease(panel, indicatorItemCoord.x, panel.height * 0.8);
285+ touchRelease(panel, indicatorItemCoord.x, panel.height);
196
286
197 compare(indicatorRow.currentItem, indicatorItem,
287 compare(indicatorRow.currentItem, indicatorItem,
198 "Incorrect item activated at position " + i);
288 "Incorrect item activated at position " + i);
@@ -200,43 +290,18 @@ Item {
200
290
201 // init for next indicatorItem
291 // init for next indicatorItem
202 if (!data.alreadyOpen) {
292 if (!data.alreadyOpen) {
203− init();
293+ panel.indicators.hide();
294+ tryCompare(panel.indicators.hideAnimation, "running", false);
295+ tryCompare(panel.indicators, "state", "initial");
204 }
296 }
205 }
297 }
206 }
298 }
207
299
208− function test_search_click_when_visible() {
209− panel.fullscreenMode = false;
210− panel.searchVisible = true;
211−
212− var searchIndicator = findChild(panel, "search");
213− verify(searchIndicator !== null);
214−
215− tap(searchIndicator, 1, 1);
216−
217− compare(searchClicked, true,
218− "Tapping search indicator while it was enabled did not emit searchClicked signal");
219− }
220−
221− function test_search_click_when_not_visible() {
222− panel.fullscreenMode = false;
223− panel.searchVisible = false;
224−
225− var searchIndicator = findChild(panel, "search");
226− verify(searchIndicator !== null);
227−
228− tap(searchIndicator, 1, 1);
229−
230− compare(searchClicked, false,
231− "Tapping search indicator while it was not visible emitted searchClicked signal");
232− }
233−
234 // Test the vertical velocity check when flicking the indicators open at an angle.
300 // Test the vertical velocity check when flicking the indicators open at an angle.
235 // If the vertical velocity is above a specific point, we shouldnt change active indicators
301 // If the vertical velocity is above a specific point, we shouldnt change active indicators
236 // if the x position changes
302 // if the x position changes
237 function test_vertical_velocity_detector() {
303 function test_vertical_velocity_detector() {
238 panel.fullscreenMode = false;
304 panel.fullscreenMode = false;
239− panel.searchVisible = false;
240
305
241 var indicatorRow = findChild(panel.indicators, "indicatorRow");
306 var indicatorRow = findChild(panel.indicators, "indicatorRow");
242 verify(indicatorRow !== null);
307 verify(indicatorRow !== null);
@@ -249,19 +314,19 @@ Item {
249 var indicatorItemCoordNext = get_indicator_item_position(indicatorRow.row.count - 1);
314 var indicatorItemCoordNext = get_indicator_item_position(indicatorRow.row.count - 1);
250
315
251 touchPress(panel,
316 touchPress(panel,
252− indicatorItemCoordFirst.x, panel.panelHeight / 2);
317+ indicatorItemCoordFirst.x, panel.indicators.panelHeight / 2);
253
318
254 // 1) Drag the mouse down to hint a bit
319 // 1) Drag the mouse down to hint a bit
255 touchFlick(panel,
320 touchFlick(panel,
256− indicatorItemCoordFirst.x, panel.panelHeight / 2,
321+ indicatorItemCoordFirst.x, panel.indicators.panelHeight / 2,
257− indicatorItemCoordFirst.x, panel.panelHeight * 2,
322+ indicatorItemCoordFirst.x, panel.indicators.panelHeight * 2,
258 false /* beginTouch */, false /* endTouch */);
323 false /* beginTouch */, false /* endTouch */);
259
324
260 tryCompare(indicatorRow, "currentItem", indicatorItemFirst)
325 tryCompare(indicatorRow, "currentItem", indicatorItemFirst)
261
326
262 // 1) Flick mouse down to bottom
327 // 1) Flick mouse down to bottom
263 touchFlick(panel,
328 touchFlick(panel,
264− indicatorItemCoordFirst.x, panel.panelHeight * 2,
329+ indicatorItemCoordFirst.x, panel.indicators.panelHeight * 2,
265 indicatorItemCoordNext.x, panel.height,
330 indicatorItemCoordNext.x, panel.height,
266 false /* beginTouch */, true /* endTouch */,
331 false /* beginTouch */, true /* endTouch */,
267 units.gu(10) /* speed */, 30 /* iterations */); // more samples needed for accurate velocity
332 units.gu(10) /* speed */, 30 /* iterations */); // more samples needed for accurate velocity
tests/qmltests/tst_Shell.qml+1−37
@@ -112,7 +112,7 @@ Item {
112 killApps(ApplicationManager);
112 killApps(ApplicationManager);
113
113
114 var dashContent = findChild(shell, "dashContent");
114 var dashContent = findChild(shell, "dashContent");
115− dashContent.previewOpen = false;
115+ dashContent.closePreview();
116
116
117 var dashHome = findChild(shell, "clickscope loader");
117 var dashHome = findChild(shell, "clickscope loader");
118 swipeUntilScopeViewIsReached(dashHome);
118 swipeUntilScopeViewIsReached(dashHome);
@@ -518,42 +518,6 @@ Item {
518 tryCompare(dash, "shown", data.expectedShown);
518 tryCompare(dash, "shown", data.expectedShown);
519 }
519 }
520
520
521− function test_searchIndicatorHidesOnAppFocus() {
522− var searchIndicator = findChild(shell, "container")
523− tryCompare(searchIndicator, "opacity", 1)
524− dragLauncherIntoView();
525−
526− // Launch an app from the launcher
527− tapOnAppIconInLauncher();
528− waitUntilApplicationWindowIsFullyVisible();
529−
530− tryCompare(searchIndicator, "opacity", 0);
531− }
532−
533− function test_searchIndicatorHidesOnGreeterShown() {
534− var searchIndicator = findChild(shell, "container")
535− var greeter = findChild(shell, "greeter");
536−
537− tryCompare(searchIndicator, "opacity", 1)
538−
539− greeter.show()
540− tryCompare(greeter, "shown", true)
541− tryCompare(searchIndicator, "opacity", 0)
542− }
543−
544− function test_searchIndicatorHideOnPreviewShown() {
545− var searchIndicator = findChild(shell, "container");
546− var dashContent = findChild(shell, "dashContent");
547−
548− verify(dashContent != null);
549−
550− tryCompare(searchIndicator, "opacity", 1);
551−
552− dashContent.previewOpen = true;
553−
554− tryCompare(searchIndicator, "opacity", 0);
555− }
556−
557 function test_focusRequestedHidesGreeter() {
521 function test_focusRequestedHidesGreeter() {
558 var greeter = findChild(shell, "greeter")
522 var greeter = findChild(shell, "greeter")
559
523
tests/utils/modules/Unity/Test/Test.qmltypesnew file+59
@@ -0,0 +1,59 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable Unity.Test 0.1 tests/utils/modules'
8+
9+Module {
10+ Component {
11+ name: "TestUtil"
12+ prototype: "QObject"
13+ exports: ["Unity.Test/Util 0.1"]
14+ isCreatable: false
15+ isSingleton: true
16+ exportMetaObjectRevisions: [0]
17+ Method {
18+ name: "isInstanceOf"
19+ type: "bool"
20+ Parameter { type: "QObject"; isPointer: true }
21+ Parameter { type: "string" }
22+ }
23+ Method { name: "touchEvent"; type: "TouchEventSequenceWrapper*" }
24+ }
25+ Component {
26+ name: "TouchEventSequenceWrapper"
27+ prototype: "QObject"
28+ exports: ["Unity.Test/TouchEventSequence 0.1"]
29+ isCreatable: false
30+ exportMetaObjectRevisions: [0]
31+ Method {
32+ name: "commit"
33+ Parameter { name: "processEvents"; type: "bool" }
34+ }
35+ Method { name: "commit" }
36+ Method {
37+ name: "move"
38+ Parameter { name: "touchId"; type: "int" }
39+ Parameter { name: "x"; type: "int" }
40+ Parameter { name: "y"; type: "int" }
41+ }
42+ Method {
43+ name: "press"
44+ Parameter { name: "touchId"; type: "int" }
45+ Parameter { name: "x"; type: "int" }
46+ Parameter { name: "y"; type: "int" }
47+ }
48+ Method {
49+ name: "release"
50+ Parameter { name: "touchId"; type: "int" }
51+ Parameter { name: "x"; type: "int" }
52+ Parameter { name: "y"; type: "int" }
53+ }
54+ Method {
55+ name: "stationary"
56+ Parameter { name: "touchId"; type: "int" }
57+ }
58+ }
59+}
tests/whitespace/check_whitespace.py+22−12
@@ -1,7 +1,7 @@
1#! /usr/bin/env python3
1#! /usr/bin/env python3
2
2
3#
3#
4−# Copyright (C) 2013 Canonical Ltd
4+# Copyright (C) 2013, 2014 Canonical Ltd
5#
5#
6# This program is free software: you can redistribute it and/or modify
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU General Public License version 3 as
7# it under the terms of the GNU General Public License version 3 as
@@ -19,8 +19,8 @@
19#
19#
20
20
21#
21#
22−# Little helper program to test that source files do not contain trailing whitespace
22+# Little helper program to test that source files do not contain trailing
23−# or tab indentation.
23+# whitespace or tab indentation.
24#
24#
25# Usage: check_whitespace.py directory [ignore_prefix]
25# Usage: check_whitespace.py directory [ignore_prefix]
26#
26#
@@ -31,18 +31,20 @@
31# See the file_pat definition below for a list of files that are checked.
31# See the file_pat definition below for a list of files that are checked.
32#
32#
33
33
34+from __future__ import print_function
35+
34import argparse
36import argparse
35import os
37import os
36import re
38import re
37import sys
39import sys
38
40
39−# Print msg on stderr, preceded by program name and followed by newline
40
41
42+# Print msg on stderr, preceded by program name and followed by newline
41def error(msg):
43def error(msg):
42 print(os.path.basename(sys.argv[0]) + ": " + msg, file=sys.stderr)
44 print(os.path.basename(sys.argv[0]) + ": " + msg, file=sys.stderr)
43
45
44−# Function to raise errors encountered by os.walk
45
46
47+# Function to raise errors encountered by os.walk
46def raise_error(e):
48def raise_error(e):
47 raise e
49 raise e
48
50
@@ -52,6 +54,7 @@ def raise_error(e):
52whitespace_pat = re.compile(r'.*[ \t]$')
54whitespace_pat = re.compile(r'.*[ \t]$')
53tab_indent_pat = re.compile(r'^ *\t')
55tab_indent_pat = re.compile(r'^ *\t')
54
56
57+
55def scan_for_bad_whitespace(file_path):
58def scan_for_bad_whitespace(file_path):
56 global tab_indent_pat, whitespace_pat
59 global tab_indent_pat, whitespace_pat
57 errors = []
60 errors = []
@@ -69,7 +72,9 @@ def scan_for_bad_whitespace(file_path):
69 plural = 's'
72 plural = 's'
70 else:
73 else:
71 plural = ''
74 plural = ''
75+ print(
76+ "%s: bad whitespace in line%s %s" % (
72− print("%s: bad whitespace in line%s %s" % (file_path, plural, ", ".join((str(i) for i in errors))))
77+ file_path, plural, ", ".join((str(i) for i in errors))))
73 elif errors:
78 elif errors:
74 print("%s: bad whitespace in multiple lines" % file_path)
79 print("%s: bad whitespace in multiple lines" % file_path)
75 if newlines_at_end:
80 if newlines_at_end:
@@ -78,15 +83,20 @@ def scan_for_bad_whitespace(file_path):
78
83
79# Parse args
84# Parse args
80
85
86+parser = argparse.ArgumentParser(
81−parser = argparse.ArgumentParser(description = 'Test that source files do not contain trailing whitespace.')
87+ description='Test that source files do not contain trailing whitespace.')
88+parser.add_argument(
89+ 'dir', nargs=1,
82−parser.add_argument('dir', nargs = 1, help = 'The directory to (recursively) search for source files')
90+ help='The directory to (recursively) search for source files')
91+parser.add_argument(
83−parser.add_argument('ignore_prefix', nargs = '?', default=None,
92+ 'ignore_prefix', nargs='?', default=None,
84− help = 'Ignore source files with a path that starts with the given prefix.')
93+ help='Ignore source files with a path that starts with the given prefix.')
85args = parser.parse_args()
94args = parser.parse_args()
86
95
87# Files we want to check for trailing whitespace.
96# Files we want to check for trailing whitespace.
88
97
98+file_pat = (
89−file_pat = r'(.*\.(c|cpp|h|hpp|hh|in|install|js|py|qml|sh)$)|(.*CMakeLists\.txt$)'
99+ r'(.*\.(c|cpp|h|hpp|hh|in|install|js|py|qml|sh)$)|(.*CMakeLists\.txt$)')
90pat = re.compile(file_pat)
100pat = re.compile(file_pat)
91
101
92# Find all the files with matching file extension in the specified
102# Find all the files with matching file extension in the specified
@@ -97,7 +107,7 @@ ignore = args.ignore_prefix and os.path.abspath(args.ignore_prefix) or None
97
107
98found_whitespace = False
108found_whitespace = False
99try:
109try:
100− for root, dirs, files in os.walk(directory, onerror = raise_error):
110+ for root, dirs, files in os.walk(directory, onerror=raise_error):
101 for file in files:
111 for file in files:
102 path = os.path.join(root, file)
112 path = os.path.join(root, file)
103 if not (ignore and path.startswith(ignore)) and pat.match(file):
113 if not (ignore and path.startswith(ignore)) and pat.match(file):
tools/scopetool.cpp−2
@@ -77,8 +77,6 @@ int main(int argc, char *argv[])
77 tracker.reset(new RegistryTracker(extraScopes, systemScopes, serverScopes));
77 tracker.reset(new RegistryTracker(extraScopes, systemScopes, serverScopes));
78 }
78 }
79
79
80− resolveIconTheme();
81−
82 bindtextdomain("unity8", translationDirectory().toUtf8().data());
80 bindtextdomain("unity8", translationDirectory().toUtf8().data());
83
81
84 QQuickView* view = new QQuickView();
82 QQuickView* view = new QQuickView();