Merge lp:~bzoltan/ubuntu-ui-toolkit/OTA10-landing-2016-03-10 into lp:ubuntu-ui-toolkit

Proposed by Zoltan Balogh on 2016-03-10
Status: Merged
Approved by: Zoltan Balogh on 2016-04-05
Approved revision: 1896
Merged at revision: 1289
Proposed branch: lp:~bzoltan/ubuntu-ui-toolkit/OTA10-landing-2016-03-10
Merge into: lp:ubuntu-ui-toolkit
Diff against target: 11557 lines (+6261/-1446) (has conflicts)
185 files modified
README (+1/-1)
apicheck/apicheck.cpp (+16/-0)
components.api (+26/-0)
debian/changelog (+97/-0)
debian/control (+178/-97)
debian/copyright (+209/-209)
debian/libubuntugestures5-dev.install (+23/-23)
debian/libubuntugestures5-private-dev.install (+1/-1)
debian/libubuntutoolkit5-dev.install (+5/-3)
debian/libubuntutoolkit5-private-dev.install (+1/-0)
debian/qml-module-ubuntu-components.install (+11/-19)
debian/qml-module-ubuntu-components.lintian-overrides (+1/-1)
debian/qml-module-ubuntu-layouts.install (+3/-0)
debian/qml-module-ubuntu-performancemetrics.install (+4/-0)
debian/qml-module-ubuntu-test.install (+1/-0)
debian/ubuntu-app-launch-profiler.install (+1/-1)
debian/ubuntu-ui-toolkit-autopilot.install (+1/-1)
debian/ubuntu-ui-toolkit-doc.install (+1/-1)
debian/ubuntu-ui-toolkit-theme.install (+9/-9)
documentation/css/qtquick.css (+13/-2)
documentation/ubuntu-theming.qdoc (+1/-0)
examples/calculator/calculator.apparmor (+8/-0)
examples/calculator/calculator.desktop (+5/-3)
examples/calculator/calculator.pro (+41/-14)
examples/calculator/calculator.qmlproject (+0/-31)
examples/calculator/manifest.json.in (+15/-0)
examples/customtheme/customtheme.desktop (+2/-2)
examples/customtheme/customtheme.pro (+42/-16)
examples/customtheme/customtheme.qmlproject (+0/-59)
examples/customtheme/manifest.json.in (+15/-0)
examples/examples.pro (+0/-9)
examples/jokes/jokes.apparmor (+7/-0)
examples/jokes/jokes.desktop (+6/-3)
examples/jokes/jokes.pro (+39/-14)
examples/jokes/jokes.qml (+1/-1)
examples/jokes/jokes.qmlproject (+0/-31)
examples/jokes/manifest.json.in (+15/-0)
examples/locale/locale.apparmor (+8/-0)
examples/locale/locale.desktop (+2/-1)
examples/locale/locale.pro (+40/-17)
examples/locale/locale.qmlproject (+0/-31)
examples/locale/manifest.json.in (+15/-0)
examples/ubuntu-ui-toolkit-gallery/BottomEdgePage.qml (+37/-3)
examples/ubuntu-ui-toolkit-gallery/MainPage.qml (+3/-0)
examples/ubuntu-ui-toolkit-gallery/Template.qml (+1/-4)
examples/ubuntu-ui-toolkit-gallery/ubuntu-ui-toolkit-gallery.pro (+1/-1)
examples/ubuntu-ui-toolkit-gallery/ubuntu-ui-toolkit-gallery.qmlproject (+0/-31)
examples/unit-converter/manifest.json.in (+15/-0)
examples/unit-converter/unit-converter.apparmor (+8/-0)
examples/unit-converter/unit-converter.desktop (+3/-2)
examples/unit-converter/unit-converter.pro (+40/-17)
examples/unit-converter/unit-converter.qml (+55/-53)
examples/unit-converter/unit-converter.qmlproject (+0/-31)
export_qml_dir.sh (+10/-4)
run_tests.sh (+1/-1)
src/Ubuntu/Components/1.3/AdaptivePageLayout.qml (+20/-6)
src/Ubuntu/Components/1.3/ScrollView.qml (+175/-88)
src/Ubuntu/Components/1.3/Scrollbar.qml (+62/-16)
src/Ubuntu/Components/Pickers/1.2/DatePicker.qml (+7/-7)
src/Ubuntu/Components/Pickers/1.3/DatePicker.qml (+7/-7)
src/Ubuntu/Components/Popups/1.3/Dialog.qml (+62/-0)
src/Ubuntu/Components/Popups/1.3/Popover.qml (+24/-0)
src/Ubuntu/Components/Themes/Ambiance/1.3/BottomEdgeHintStyle.qml (+16/-2)
src/Ubuntu/Components/Themes/Ambiance/1.3/BottomEdgeStyle.qml (+4/-23)
src/Ubuntu/Components/Themes/Ambiance/1.3/DatePickerStyle.qml (+1/-1)
src/Ubuntu/Components/Themes/Ambiance/1.3/ListItemStyle.qml (+1/-0)
src/Ubuntu/Components/Themes/Ambiance/1.3/PageHeadStyle.qml (+2/-1)
src/Ubuntu/Components/Themes/Ambiance/1.3/ScrollbarStyle.qml (+16/-8)
src/Ubuntu/Components/Themes/Ambiance/1.3/SectionsStyle.qml (+39/-32)
src/Ubuntu/Components/plugin/label_p.h (+60/-0)
src/Ubuntu/Components/plugin/plugin.pri (+5/-1)
src/Ubuntu/Components/plugin/privates/listviewextensions.cpp (+153/-0)
src/Ubuntu/Components/plugin/privates/listviewextensions.h (+60/-0)
src/Ubuntu/Components/plugin/privates/threelabelsslot_p.cpp (+5/-5)
src/Ubuntu/Components/plugin/propertychange_p.cpp (+23/-0)
src/Ubuntu/Components/plugin/propertychange_p.h (+9/-0)
src/Ubuntu/Components/plugin/quickutils.cpp (+53/-0)
src/Ubuntu/Components/plugin/quickutils.h (+3/-0)
src/Ubuntu/Components/plugin/ucbottomedge.cpp (+160/-58)
src/Ubuntu/Components/plugin/ucbottomedge.h (+7/-0)
src/Ubuntu/Components/plugin/ucbottomedge_p.h (+9/-3)
src/Ubuntu/Components/plugin/ucbottomedgehint.cpp (+10/-2)
src/Ubuntu/Components/plugin/ucbottomedgeregion.cpp (+275/-61)
src/Ubuntu/Components/plugin/ucbottomedgeregion.h (+25/-20)
src/Ubuntu/Components/plugin/ucbottomedgeregion_p.h (+84/-0)
src/Ubuntu/Components/plugin/uclabel.cpp (+109/-61)
src/Ubuntu/Components/plugin/uclabel.h (+23/-31)
src/Ubuntu/Components/plugin/uclistitem.cpp (+115/-13)
src/Ubuntu/Components/plugin/uclistitem.h (+7/-0)
src/Ubuntu/Components/plugin/uclistitem_p.h (+5/-1)
src/Ubuntu/Components/plugin/uclistitemstyle.cpp (+4/-4)
src/Ubuntu/Components/plugin/ucperformancemonitor.cpp (+1/-1)
src/Ubuntu/Components/plugin/ucqquickimageextension.cpp (+2/-2)
src/Ubuntu/Components/plugin/ucslotslayout.cpp (+11/-11)
src/Ubuntu/Components/plugin/ucstyleditembase.cpp (+16/-1)
src/Ubuntu/Components/plugin/ucstyleditembase.h (+2/-1)
src/Ubuntu/Components/plugin/ucstyleditembase_p.h (+1/-0)
src/Ubuntu/Components/plugin/ucstylehints.cpp (+4/-0)
src/Ubuntu/Components/plugin/uctheme.cpp (+60/-26)
src/Ubuntu/Components/plugin/ucunits.cpp (+1/-1)
src/Ubuntu/Components/plugin/ucviewitemsattached.cpp (+28/-10)
src/Ubuntu/Components/plugin/unitythemeiconprovider.cpp (+31/-12)
src/Ubuntu/Components/plugin/unitythemeiconprovider.h (+1/-1)
src/Ubuntu/Layouts/plugin/propertychanges.cpp (+44/-2)
src/Ubuntu/Layouts/plugin/propertychanges_p.h (+7/-0)
src/Ubuntu/Test/Test.pro (+3/-1)
src/Ubuntu/Test/UbuntuTestCase.qml (+265/-0)
src/Ubuntu/Test/UbuntuTestCase13.qml (+2/-2)
src/Ubuntu/Test/plugin/uctestcase.cpp (+13/-0)
src/Ubuntu/Test/plugin/uctestcase.h (+1/-0)
src/Ubuntu/Test/qmldir (+3/-0)
src/Ubuntu/UbuntuGestures/ucswipearea.cpp (+52/-5)
src/Ubuntu/UbuntuGestures/ucswipearea_p.h (+5/-0)
src/Ubuntu/UbuntuGestures/ucswipearea_p_p.h (+1/-0)
src/Ubuntu/UbuntuToolkit/UbuntuToolkit.pro (+5/-2)
src/Ubuntu/UbuntuToolkit/asyncloader.cpp (+221/-0)
src/Ubuntu/UbuntuToolkit/asyncloader.h (+63/-0)
src/Ubuntu/UbuntuToolkit/asyncloader_p.h (+54/-0)
tests/Gallery/gallery (+1/-1)
tests/packaging-sorting.sh (+42/-0)
tests/resources/listitems/ListItemTest.qml (+10/-5)
tests/tests.pro (+1/-0)
tests/uitk_test_plan.sh (+77/-35)
tests/unit/runtest.sh (+1/-1)
tests/unit/test-include.pri (+1/-1)
tests/unit/tst_components/tst_inputhandler_v13.qml (+1/-1)
tests/unit/tst_components/tst_label13.qml (+5/-2)
tests/unit/tst_components/tst_ubuntu_namespace_v13.qml (+1/-1)
tests/unit/tst_tree/tst_tree.cpp (+465/-0)
tests/unit/tst_tree/tst_tree.pro (+6/-0)
tests/unit/unit.pro (+2/-1)
tests/unit_x11/tst_animator/tst_animator.cpp (+10/-6)
tests/unit_x11/tst_animator/tst_animator.pro (+1/-0)
tests/unit_x11/tst_asyncloader/Document.qml (+31/-0)
tests/unit_x11/tst_asyncloader/FaultyDocument.qml (+20/-0)
tests/unit_x11/tst_asyncloader/HeavyDocument.qml (+31/-0)
tests/unit_x11/tst_asyncloader/TestApp.qml (+22/-0)
tests/unit_x11/tst_asyncloader/tst_asyncloader.cpp (+288/-0)
tests/unit_x11/tst_asyncloader/tst_asyncloader.pro (+11/-0)
tests/unit_x11/tst_bottomedge/AutoCollapseInPageHeader.qml (+3/-1)
tests/unit_x11/tst_bottomedge/AutoCollapseInPageWithPageHeader.qml (+3/-1)
tests/unit_x11/tst_bottomedge/BottomEdgeWithAction.qml (+42/-0)
tests/unit_x11/tst_bottomedge/PreloadedContent.qml (+60/-0)
tests/unit_x11/tst_bottomedge/tst_bottomedge.cpp (+145/-42)
tests/unit_x11/tst_bottomedge/tst_bottomedge.pro (+4/-2)
tests/unit_x11/tst_components/ListItemTestCase13.qml (+1/-1)
tests/unit_x11/tst_components/MyExternalPageWithNewHeader.qml (+26/-0)
tests/unit_x11/tst_components/ScrollbarTestCase.qml (+0/-1)
tests/unit_x11/tst_components/tst_abstractbutton13.qml (+1/-1)
tests/unit_x11/tst_components/tst_adaptivepagelayout.qml (+76/-25)
tests/unit_x11/tst_components/tst_bottomedgehint.qml (+10/-5)
tests/unit_x11/tst_components/tst_datepicker13.qml (+1/-1)
tests/unit_x11/tst_components/tst_focus.qml (+16/-4)
tests/unit_x11/tst_components/tst_icon13.qml (+1/-1)
tests/unit_x11/tst_components/tst_label_extras.qml (+56/-3)
tests/unit_x11/tst_components/tst_listitem13.qml (+1/-1)
tests/unit_x11/tst_components/tst_listitem_extras.qml (+1/-1)
tests/unit_x11/tst_components/tst_listitem_focus.qml (+453/-0)
tests/unit_x11/tst_components/tst_listitem_selectmode13.qml (+1/-1)
tests/unit_x11/tst_components/tst_page13.qml (+1/-1)
tests/unit_x11/tst_components/tst_picker13.qml (+1/-1)
tests/unit_x11/tst_components/tst_popover13.qml (+1/-1)
tests/unit_x11/tst_components/tst_popups_dialog13.qml (+1/-1)
tests/unit_x11/tst_components/tst_quickutils.qml (+31/-4)
tests/unit_x11/tst_components/tst_scrollbar.qml (+41/-1)
tests/unit_x11/tst_components/tst_scrollbar_header.qml (+310/-0)
tests/unit_x11/tst_components/tst_scrollview.qml (+67/-2)
tests/unit_x11/tst_components/tst_sections.qml (+56/-1)
tests/unit_x11/tst_components/tst_slider13.qml (+1/-1)
tests/unit_x11/tst_components/tst_textinput_common13.qml (+1/-1)
tests/unit_x11/tst_components/tst_ubuntulistview13.qml (+1/-1)
tests/unit_x11/tst_iconprovider/icons/hicolor/index.theme (+10/-0)
tests/unit_x11/tst_iconprovider/icons/mockTheme/index.theme (+1/-0)
tests/unit_x11/tst_iconprovider/icons/mockTheme2/index.theme (+3/-0)
tests/unit_x11/tst_iconprovider/icons/mockTheme3/index.theme (+10/-0)
tests/unit_x11/tst_iconprovider/tst_iconprovider.cpp (+25/-3)
tests/unit_x11/tst_subtheming/themes/DerivedTheme/1.2/TestStyle.qml (+21/-0)
tests/unit_x11/tst_subtheming/themes/DerivedTheme/1.3/Palette.qml (+29/-0)
tests/unit_x11/tst_subtheming/themes/DerivedTheme/parent_theme (+1/-0)
tests/unit_x11/tst_subtheming/tst_subtheming.cpp (+19/-0)
tests/unit_x11/tst_subtheming/tst_subtheming.pro (+5/-4)
tests/unit_x11/tst_swipearea/DownwardsLauncher.qml (+14/-0)
tests/unit_x11/tst_swipearea/tst_swipearea.cpp (+105/-1)
tests/unit_x11/tst_touchregistry/tst_TouchRegistry.cpp (+1/-1)
tests/unit_x11/unit_x11.pro (+2/-1)
Text conflict in debian/changelog
To merge this branch: bzr merge lp:~bzoltan/ubuntu-ui-toolkit/OTA10-landing-2016-03-10
Reviewer Review Type Date Requested Status
PS Jenkins bot continuous-integration Needs Fixing on 2016-03-16
Ubuntu SDK team 2016-03-10 Pending
Review via email: mp+288606@code.launchpad.net

Commit Message

OTA10 landing 2016-03-10

Description of the Change

OTA10 landing 2016-03-10

To post a comment you must log in.
1890. By Zoltan Balogh on 2016-03-15

Sync with staging

1891. By Zoltan Balogh on 2016-03-15

Sync with staging

1892. By Zoltan Balogh on 2016-03-16

Sync with staging

1893. By Zoltan Balogh on 2016-03-23

Sync with staging

1894. By Zoltan Balogh on 2016-03-24

No gdb when running unit tests on armv7l

1895. By Zoltan Balogh on 2016-03-24

Fix the arm check in the runtest.sh

1896. By Zoltan Balogh on 2016-04-04

Update from staging

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'README'
2--- README 2015-01-14 15:18:05 +0000
3+++ README 2016-04-04 04:42:19 +0000
4@@ -39,7 +39,7 @@
5
6 To use these components in QML without installing them, you need to set the
7 QML2_IMPORT_PATH environment variable. This is done by running
8-$ source export_modules_dir.sh
9+$ source export_qml_dir.sh
10 from the root directory of this repository, but is lost when you close your
11 shell.
12
13
14=== modified file 'apicheck/apicheck.cpp'
15--- apicheck/apicheck.cpp 2015-12-18 15:26:04 +0000
16+++ apicheck/apicheck.cpp 2016-04-04 04:42:19 +0000
17@@ -39,6 +39,10 @@
18 #include <QJsonArray>
19 #include <QLoggingCategory>
20
21+#define foreach Q_FOREACH
22+#include <QtQml/private/qqmlengine_p.h>
23+#undef foreach
24+
25 #include <iostream>
26 #include <algorithm>
27
28@@ -50,6 +54,7 @@
29
30 QString currentProperty;
31 QString inObjectInstantiation;
32+QQmlEngine *currentEngine=0;
33
34 void collectReachableMetaObjects(const QMetaObject *meta, QSet<const QMetaObject *> *metas, bool extended = false)
35 {
36@@ -91,8 +96,14 @@
37 void collectReachableMetaObjects(const QQmlType *ty, QSet<const QMetaObject *> *metas)
38 {
39 collectReachableMetaObjects(ty->metaObject(), metas, ty->isExtendedType());
40+
41+#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
42+ if (ty->attachedPropertiesType(QQmlEnginePrivate::get(currentEngine)))
43+ collectReachableMetaObjects(ty->attachedPropertiesType(QQmlEnginePrivate::get(currentEngine)), metas);
44+#else
45 if (ty->attachedPropertiesType())
46 collectReachableMetaObjects(ty->attachedPropertiesType(), metas);
47+#endif
48 }
49
50 /* We want to add the MetaObject for 'Qt' to the list, this is a
51@@ -536,7 +547,11 @@
52 if (isSingleton)
53 object.insert("isSingleton", true);
54
55+#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
56+ if (const QMetaObject *attachedType = (*qmlTypes.begin())->attachedPropertiesType(QQmlEnginePrivate::get(currentEngine))) {
57+#else
58 if (const QMetaObject *attachedType = (*qmlTypes.begin())->attachedPropertiesType()) {
59+#endif
60 // Can happen when a type is registered that returns itself as attachedPropertiesType()
61 // because there is no creatable type to attach to.
62 if (attachedType != meta) {
63@@ -794,6 +809,7 @@
64 qmlRegisterSingletonType<QObject>("Qt.test.qtestroot", 1, 0, "QTestRootObject", testRootObject);
65
66 QQmlEngine engine;
67+ currentEngine = &engine;
68 QObject::connect(&engine, SIGNAL(quit()), QCoreApplication::instance(), SLOT(quit()));
69
70 // load the QtQuick 2 plugin
71
72=== modified file 'components.api'
73--- components.api 2016-02-24 13:18:49 +0000
74+++ components.api 2016-04-04 04:42:19 +0000
75@@ -197,6 +197,7 @@
76 signal collapseCompleted()
77 function commit()
78 function collapse()
79+ property bool preloadContent
80 property list<BottomEdgeRegion> regions
81 readonly property Status status
82 Ubuntu.Components.BottomEdge.DragDirection: Enum
83@@ -223,6 +224,8 @@
84 property url contentUrl
85 property bool enabled
86 property double from
87+ signal contentChanged(url url)
88+ signal contentComponentChanged(Component component)
89 signal entered()
90 signal exited()
91 signal dragEnded()
92@@ -422,7 +425,10 @@
93 default property list<QtObject> contents
94 property double edgeMargins
95 property bool modal
96+ property Component style
97+ property string styleName
98 property string text
99+ property ThemeSettings theme
100 property string title
101 Ubuntu.Components.ListItems.Divider 1.0 0.1: QQuickImageBase
102 Ubuntu.Components.ListItems.Divider 1.3: QQuickImageBase
103@@ -984,6 +990,9 @@
104 function var show()
105 function var hide()
106 property Item pointerTarget
107+ property Component style
108+ property string styleName
109+ property ThemeSettings theme
110 Ubuntu.Components.Popups.PopupBase 1.0 0.1: OrientationHelper
111 property Item dismissArea
112 property PropertyAnimation fadingAnimation
113@@ -1047,6 +1056,8 @@
114 Ubuntu.Components.ScrollView 1.3: StyledItem
115 default property Item contentItem
116 readonly property Flickable flickableItem
117+ property Scrollbar horizontalScrollbar
118+ property Scrollbar verticalScrollbar
119 readonly property Item viewport
120 Ubuntu.Components.Scrollbar 1.0 0.1: StyledItem
121 property int align
122@@ -1174,6 +1185,7 @@
123 property Direction direction
124 readonly property double distance
125 readonly property bool dragging
126+ property bool grabGesture
127 property bool immediateRecognition
128 signal directionChanged(Direction direction)
129 signal draggingChanged(bool dragging)
130@@ -1181,6 +1193,7 @@
131 signal distanceChanged(double distance)
132 signal touchPositionChanged(QPointF position)
133 signal immediateRecognitionChanged(bool immediateRecognition)
134+ signal grabGestureChanged(bool grabGesture)
135 readonly property bool pressed
136 readonly property QPointF touchPosition
137 Ubuntu.Components.SwipeArea.Direction: Enum
138@@ -1713,6 +1726,19 @@
139 function var warningFormat(var line, var column, var message)
140 function var waitForHeaderAnimation(var mainView)
141 readonly property QuickTestUtil testUtil
142+Ubuntu.Test.UbuntuTestCase 1.3 UbuntuTestCase13: TestCase
143+ function var findChild(var obj, var objectName)
144+ function var findInvisibleChild(var obj, var objectName)
145+ function var findChildWithProperty(var item, var property, var value)
146+ function var centerOf(var item)
147+ function var mouseMoveSlowly(var item, var x, var y, var dx, var dy, var steps, var stepdelay, var buttons)
148+ function var flick(var item, var x, var y, var dx, var dy, var pressTimeout, var steps, var button, var modifiers, var delay)
149+ function var mouseLongPress(var item, var x, var y, var button, var modifiers, var delay)
150+ function var tryCompareFunction(var func, var expectedResult, var timeout)
151+ function var typeString(var string)
152+ function var warningFormat(var line, var column, var message)
153+ function var waitForHeaderAnimation(var mainView)
154+ readonly property QuickTestUtil testUtil
155 Ubuntu.Components.UriHandler 1.0 0.1: QtObject singleton
156 signal opened(QStringList uris)
157 Ubuntu.Components.ListItems.ValueSelector 1.0 0.1: Empty
158
159=== modified file 'debian/changelog'
160--- debian/changelog 2016-03-30 23:08:38 +0000
161+++ debian/changelog 2016-04-04 04:42:19 +0000
162@@ -1,3 +1,4 @@
163+<<<<<<< TREE
164 ubuntu-ui-toolkit (1.3.1872+16.04.20160330.2-0ubuntu1) xenial; urgency=medium
165
166 [ Tim Peeters ]
167@@ -7,6 +8,102 @@
168
169 -- Zoltan Balogh <zoltan.balogh@canonical.com> Wed, 30 Mar 2016 23:08:38 +0000
170
171+=======
172+ubuntu-ui-toolkit (1.3.1918+16.04-0ubuntu1) UNRELEASED; urgency=medium
173+
174+ [ Benjamin Zeller ]
175+ * Register expected warning messages in the tree testcase.
176+ * Add testsuite for Tree. Fixes LP: #1549171.
177+ * Compile with Qt 5.6. Fixes LP: #1540356
178+ * More Qt 5.6 fixes.
179+
180+ [ Michael Terry ]
181+ * Add grabGesture field to SwipeArea.
182+ * This field controls whether the SwipeArea takes ownership of the gestures it
183+ observes. Fixes LP: #1527387.
184+
185+ [ Timo Jyrinki ]
186+ * Add a test for blocking if packaging not sorted and clean.
187+ * More package name transitioning, wrap and sort, fix debian/copyright syntax,
188+ update standards-version, fix devel package sections and add/fix
189+ lintian-overrides.
190+
191+ [ Olivier Tilloy ]
192+ * Fix dependencies of the transitional dummy package
193+ qtdeclarative5-ubuntu-ui-toolkit-plugin. Fixes LP: #1553551.
194+
195+ [ Christian Dywan ]
196+ * Rename qtdeclarative5-*-plugin to qml-module-*. Fixes LP: #1342031.
197+ * Require a qtdeclarative5 known to have the tab fence patch.
198+ * Reset previous theme version and use UbuntuTestCase in tst_animator.
199+ * BottomEdge(Hint) focus and close via keyboard. Fixes LP: #1523825
200+ * Add 1.3 version of UbuntuTestCase.
201+ * No gdb when running unit tests on armv7l.
202+ * Build-depend on python3-debian for wrap-and-sort.
203+
204+ [ XiaoGuo Liu ]
205+ * Fix AdaptivePageLayout documentation.
206+
207+ [ Tim Peeters ]
208+ * Properly disable left/right arrows on sections when at the beginning/end of
209+ the list. Fixes LP: #1551356.
210+ * Sections and old AppHeader landscape mode. Fixes LP: #1551341.
211+ * Set the window color as soon as the window is available, to avoid a
212+ flickering background when it is updated later.
213+ Fixes LP: #1439133, LP: #1554897
214+ * Add theme, style and styleName properties to Dialog and Popover.
215+ Fixes LP: #1555548
216+ * Update the gallery script to use the new name of the export script.
217+ * Export the full list of library paths.
218+ * Prevent Page geometry changes in APL when changing Pages in a column.
219+ * Fix typo in DatePickerStyle. Fixes: LP #1561440.
220+
221+ [ Zsombor Egri ]
222+ * ListItem focus navigation in ListView and other views.
223+ Fixes LP: #1523815, LP: #1536679, LP: #1549733, LP: #1549743
224+ * BorromEdge.preloadContent. Fixes LP: #1540454.
225+ * Asynchronous loader (AsyncLoader) using incubator, prerequisite for
226+ BottomEdge preloading its content. Fixes LP: #1540454.
227+ * ListView proxy should not consume up/down key events. Fixes LP: #1554447
228+ * Pick up the right style. Fixes LP: #1555797
229+ * Label makes sure the color alteration is known by the theming.
230+ Fixes LP: #1555784
231+ * Fix AsyncLoader tests so they create slightly less amount of elements.
232+ * AdaptivePageLayout removes all pages pushed to next columns when
233+ addPageToNextColumn() is called. Fixes LP: #1544745
234+ * Fix BottomEdge content discarding.
235+ * Disconnect enabled signal in Label in destructor, so functor call will not
236+ be handled when QQuickItem triggers enabled change. Fixes LP: #1560044.
237+
238+
239+ [ Andrea Bernabei ]
240+ * UI Gallery: fix vertical alignment of labels in left panel list items.
241+ * ScrollView: add horizontalScrollbar and verticalScrollbar properties to
242+ allow custom properties and styling of scrollbars.
243+ * Change Scrollbar default top and bottom anchor margins. Tests included.
244+
245+ [ Albert Astals Cid ]
246+ * Use "/" instead of QDir::separator for building paths that will be passed
247+ to Qt.
248+ * Some string optimizations in the icon searching code
249+ * Improve icon file searching. Leave searching in hicolor to the end. Do not
250+ search on icon themes we've already searched.
251+
252+ [ Zoltán Balogh ]
253+ * Clean up examples.
254+ * Improve unit test plan tool
255+
256+ [ Florian Boucault ]
257+ * Properly disable PerformanceMonitor for toolkit tests only. Re-enable it for
258+ everything else.
259+
260+ [ Pierre Bertet ]
261+ * Fix the lists style in the offline documentation. Fixes LP: #1557472.
262+ * Make export_qml_dir.sh compatible with ZSH.
263+
264+ -- Zoltán Balogh <zoltanibalogh@canonical.com> Thu, 10 Mar 2016 07:40:40 +0200
265+
266+>>>>>>> MERGE-SOURCE
267 ubuntu-ui-toolkit (1.3.1872+16.04.20160314-0ubuntu1) xenial; urgency=medium
268
269 [ Zoltán Balogh ]
270
271=== modified file 'debian/control'
272--- debian/control 2016-02-11 16:17:46 +0000
273+++ debian/control 2016-04-04 04:42:19 +0000
274@@ -2,97 +2,153 @@
275 Priority: optional
276 Section: libs
277 Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
278-Build-Depends: debhelper (>= 9.0.0),
279+Build-Depends: accountsservice,
280+ dbus,
281+ dbus-test-runner,
282+ debhelper (>= 9.0.0),
283 devscripts,
284+ gdb,
285+ language-pack-en-base,
286+ libdbus-1-dev,
287+ libfontconfig1-dev,
288+ libfreetype6-dev,
289+ libgl1-mesa-dri,
290 libgles2-mesa-dev,
291 libglib2.0-dev,
292- python3:any,
293- qml-module-qtgraphicaleffects | libqt5qml-graphicaleffects,
294 libinput-dev,
295+ liblttng-ust-dev,
296+ libmtdev-dev,
297+ libnih-dbus-dev,
298+ libqt5sql5-sqlite,
299+ libqt5svg5-dev,
300+ libudev-dev,
301 libxkbcommon-dev,
302+ libxrender-dev,
303+ locales,
304+ python3-debian,
305+ python3-sphinx,
306+ python3:any,
307+ qml-module-qt-labs-settings,
308+ qml-module-qtfeedback,
309+ qml-module-qtgraphicaleffects,
310+ qml-module-qtqml-models2,
311+ qml-module-qtquick-layouts,
312+ qml-module-qtquick-localstorage,
313+ qml-module-qtquick-window2,
314+ qml-module-qtquick2,
315+ qml-module-qttest,
316 qtbase5-dev,
317 qtbase5-private-dev,
318- qttools5-dev-tools,
319- libqt5sql5-sqlite,
320+ qtdeclarative5-dev (>= 5.4.1-1ubuntu11~overlay3),
321 qtdeclarative5-dev-tools,
322+ qtdeclarative5-doc-html,
323 qtdeclarative5-private-dev,
324- qml-module-qtquick2,
325- qml-module-qttest,
326- qml-module-qtquick-window2,
327- qml-module-qtquick-layouts,
328- qml-module-qtfeedback,
329 qtdeclarative5-unity-action-plugin (>= 1.1.0),
330- qtdeclarative5-private-dev,
331- qml-module-qtquick-localstorage,
332- qml-module-qt-labs-settings,
333- qml-module-qtqml-models2,
334- qtdeclarative5-doc-html,
335- qtwebkit5-doc-html,
336- qtsvg5-doc-html,
337- libqt5svg5-dev,
338- qtscript5-doc-html,
339 qtmultimedia5-doc-html,
340- unity-action-doc,
341- devscripts,
342 qtpim5-dev,
343- language-pack-en-base,
344- libdbus-1-dev,
345- libnih-dbus-dev,
346- dbus,
347- dbus-test-runner,
348- accountsservice,
349- xvfb,
350- gdb,
351- libgl1-mesa-dri,
352- locales,
353+ qtscript5-doc-html,
354+ qtsvg5-doc-html,
355+ qttools5-dev-tools,
356+ qtwebkit5-doc-html,
357 suru-icon-theme,
358+ unity-action-doc,
359 uuid-runtime,
360- python3-sphinx,
361- libfontconfig1-dev,
362- libfreetype6-dev,
363- libmtdev-dev,
364- libudev-dev,
365- libxrender-dev,
366- liblttng-ust-dev
367-Standards-Version: 3.9.4
368+ xvfb,
369+Standards-Version: 3.9.7
370 Homepage: https://launchpad.net/ubuntu-ui-toolkit
371-# If you aren't a member of ~ubuntu-sdk-team but need to upload packaging
372-# changes, just go ahead. ~ubuntu-sdk-team will notice and sync up the code
373-# again.
374 Vcs-Bzr: https://code.launchpad.net/~ubuntu-sdk-team/ubuntu-ui-toolkit/trunk
375
376-Package: qtdeclarative5-ubuntu-ui-toolkit-plugin
377+Package: qml-module-ubuntu-components
378 Architecture: any
379 Multi-Arch: same
380-Pre-Depends: dpkg (>= 1.15.6~), ${misc:Pre-Depends}
381-Depends: qml-module-qtgraphicaleffects | libqt5qml-graphicaleffects,
382- libqt5svg5,
383+Pre-Depends: dpkg (>= 1.15.6~),
384+ ${misc:Pre-Depends},
385+Depends: libqt5svg5,
386+ libubuntugestures5 (= ${binary:Version}),
387+ libubuntutoolkit5 (= ${binary:Version}),
388+ qml-module-qtfeedback,
389+ qml-module-qtgraphicaleffects,
390+ qml-module-qtquick-layouts,
391+ qml-module-qtquick-window2,
392 qml-module-qtquick2,
393- qml-module-qtquick-window2,
394- qml-module-qtquick-layouts,
395- qml-module-qtfeedback,
396+ qml-module-ubuntu-performancemetrics,
397 qtdeclarative5-unity-action-plugin (>= 1.1.0),
398 suru-icon-theme,
399 ttf-ubuntu-font-family,
400 ubuntu-ui-toolkit-theme (= ${binary:Version}),
401- libubuntugestures5 (= ${binary:Version}),
402- libubuntutoolkit5 (= ${binary:Version}),
403- ${misc:Depends},
404- ${shlibs:Depends},
405-Conflicts: qt-components-ubuntu
406-Replaces: qt-components-ubuntu
407-Provides: qt-components-ubuntu
408-Description: Qt Components for Ubuntu - QML plugin
409- Qt Components for Ubuntu offers a set of reusable user interface
410- components for Qt Quick 2 / QML.
411- .
412- This package contains the Ubuntu Components QML plugin.
413-
414+ ${misc:Depends},
415+ ${shlibs:Depends},
416+Conflicts: qt-components-ubuntu,
417+Breaks: qtdeclarative5-ubuntu-ui-toolkit-plugin (<< ${source:Version}),
418+Replaces: qt-components-ubuntu,
419+ qtdeclarative5-ubuntu-ui-toolkit-plugin (<< ${source:Version}),
420+Provides: qt-components-ubuntu,
421+Description: Qt Components for Ubuntu - Components QML plugin
422+ Qt Components for Ubuntu offers a set of reusable user interface
423+ components for Qt Quick 2 / QML.
424+ .
425+ This package contains the Ubuntu Components QML plugin.
426+
427+Package: qml-module-ubuntu-layouts
428+Architecture: any
429+Multi-Arch: same
430+Pre-Depends: dpkg (>= 1.15.6~),
431+ ${misc:Pre-Depends},
432+Depends: ${misc:Depends},
433+ ${shlibs:Depends},
434+Replaces: qtdeclarative5-ubuntu-ui-toolkit-plugin (<< ${source:Version}),
435+Description: Qt Components for Ubuntu - Layouts QML plugin
436+ Qt Components for Ubuntu offers a set of reusable user interface
437+ components for Qt Quick 2 / QML.
438+ .
439+ This package contains the Ubuntu Layouts QML plugin.
440+
441+Package: qml-module-ubuntu-test
442+Architecture: any
443+Multi-Arch: same
444+Pre-Depends: dpkg (>= 1.15.6~),
445+ ${misc:Pre-Depends},
446+Depends: qml-module-qttest | qtdeclarative5-test-plugin,
447+ qml-module-ubuntu-components,
448+ ${misc:Depends},
449+ ${shlibs:Depends},
450+Replaces: qtdeclarative5-ubuntu-ui-toolkit-plugin (<< ${source:Version}),
451+Description: Qt Components for Ubuntu - Test QML plugin
452+ Qt Components for Ubuntu offers a set of reusable user interface
453+ components for Qt Quick 2 / QML.
454+ .
455+ This package contains the Ubuntu Test QML plugin.
456+
457+Package: qml-module-ubuntu-performancemetrics
458+Architecture: any
459+Multi-Arch: same
460+Pre-Depends: dpkg (>= 1.15.6~),
461+ ${misc:Pre-Depends},
462+Depends: ${misc:Depends},
463+ ${shlibs:Depends},
464+Replaces: qtdeclarative5-ubuntu-ui-toolkit-plugin (<< ${source:Version}),
465+Description: Qt Components for Ubuntu - PerformanceMetrics QML plugin
466+ Qt Components for Ubuntu offers a set of reusable user interface
467+ components for Qt Quick 2 / QML.
468+ .
469+ This package contains the Ubuntu PerformanceMetrics QML plugin.
470+
471+Package: qtdeclarative5-ubuntu-ui-toolkit-plugin
472+Architecture: any
473+Section: oldlibs
474+Depends: qml-module-ubuntu-components,
475+ qml-module-ubuntu-layouts,
476+ qml-module-ubuntu-performancemetrics,
477+ qml-module-ubuntu-test,
478+ ${misc:Depends},
479+Description: Transitional dummy package for Ubuntu UI Toolkit QML plugin
480+ This package contains the Ubuntu Components QML plugin.
481
482 Package: libubuntugestures5
483 Architecture: any
484 Multi-Arch: same
485-Pre-Depends: dpkg (>= 1.15.6~), ${misc:Pre-Depends}
486+Pre-Depends: dpkg (>= 1.15.6~),
487+ ${misc:Pre-Depends},
488 Depends: ${misc:Depends},
489 ${shlibs:Depends},
490 Description: Ubuntu gestures library for Ubuntu UI Toolkit
491@@ -102,7 +158,9 @@
492 Package: libubuntugestures5-dev
493 Architecture: any
494 Multi-Arch: same
495-Pre-Depends: dpkg (>= 1.15.6~), ${misc:Pre-Depends}
496+Section: libdevel
497+Pre-Depends: dpkg (>= 1.15.6~),
498+ ${misc:Pre-Depends},
499 Depends: ${misc:Depends},
500 ${shlibs:Depends},
501 Description: Ubuntu gestures library development files
502@@ -112,7 +170,9 @@
503 Package: libubuntugestures5-private-dev
504 Architecture: any
505 Multi-Arch: same
506-Pre-Depends: dpkg (>= 1.15.6~), ${misc:Pre-Depends}
507+Section: libdevel
508+Pre-Depends: dpkg (>= 1.15.6~),
509+ ${misc:Pre-Depends},
510 Depends: ${misc:Depends},
511 ${shlibs:Depends},
512 Description: Ubuntu gestures library private development files
513@@ -122,7 +182,8 @@
514 Package: libubuntutoolkit5
515 Architecture: any
516 Multi-Arch: same
517-Pre-Depends: dpkg (>= 1.15.6~), ${misc:Pre-Depends}
518+Pre-Depends: dpkg (>= 1.15.6~),
519+ ${misc:Pre-Depends},
520 Depends: ${misc:Depends},
521 ${shlibs:Depends},
522 Description: Ubuntu toolkit common library for Ubuntu UI Toolkit
523@@ -132,20 +193,35 @@
524 Package: libubuntutoolkit5-dev
525 Architecture: any
526 Multi-Arch: same
527-Pre-Depends: dpkg (>= 1.15.6~), ${misc:Pre-Depends}
528+Section: libdevel
529+Pre-Depends: dpkg (>= 1.15.6~),
530+ ${misc:Pre-Depends},
531 Depends: ${misc:Depends},
532 ${shlibs:Depends},
533 Description: Ubuntu toolkit common library development files
534 This package contains the development files for
535 Ubuntu toolkit common library
536
537+Package: libubuntutoolkit5-private-dev
538+Architecture: any
539+Multi-Arch: same
540+Section: libdevel
541+Pre-Depends: dpkg (>= 1.15.6~),
542+ ${misc:Pre-Depends},
543+Depends: ${misc:Depends},
544+ ${shlibs:Depends},
545+Description: Ubuntu toolkit common library private development files
546+ This package contains the private development files for
547+ Ubuntu toolkit common library
548+
549 Package: ubuntu-ui-toolkit-theme
550 Architecture: any
551 Multi-Arch: foreign
552-Pre-Depends: dpkg (>= 1.15.6~), ${misc:Pre-Depends}
553+Pre-Depends: dpkg (>= 1.15.6~),
554+ ${misc:Pre-Depends},
555 Depends: ${misc:Depends},
556 ${shlibs:Depends},
557-Replaces: qt-components-ubuntu
558+Replaces: qt-components-ubuntu,
559 Description: Qt Components for Ubuntu - Ubuntu Theme
560 Qt Components for Ubuntu offers a set of reusable user interface
561 components for Qt Quick 2 / QML.
562@@ -156,18 +232,19 @@
563 Section: doc
564 Architecture: all
565 Multi-Arch: foreign
566-Pre-Depends: dpkg (>= 1.15.6~), ${misc:Pre-Depends}
567+Pre-Depends: dpkg (>= 1.15.6~),
568+ ${misc:Pre-Depends},
569 Depends: ${misc:Depends},
570 ${shlibs:Depends},
571 Suggests: qtdeclarative5-doc-html,
572+ qtmultimedia5-doc-html,
573+ qtscript5-doc-html,
574+ qtsvg5-doc-html,
575 qtwebkit5-doc-html,
576- qtsvg5-doc-html,
577- qtscript5-doc-html,
578- qtmultimedia5-doc-html,
579 unity-action-doc,
580-Conflicts: qt-components-ubuntu-doc
581-Replaces: qt-components-ubuntu-doc
582-Provides: qt-components-ubuntu-doc
583+Conflicts: qt-components-ubuntu-doc,
584+Replaces: qt-components-ubuntu-doc,
585+Provides: qt-components-ubuntu-doc,
586 Description: Qt Components for Ubuntu - documentation
587 Qt Components for Ubuntu offers a set of reusable user interface
588 components for Qt Quick 2 / QML.
589@@ -177,17 +254,21 @@
590 Package: ubuntu-ui-toolkit-examples
591 Section: devel
592 Architecture: any
593-Depends: ubuntu-ui-toolkit-tools (>= ${source:Version}),
594- qtdeclarative5-ubuntu-ui-toolkit-plugin (= ${binary:Version}) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles,
595- ubuntu-ui-toolkit-theme (= ${binary:Version}),
596+Depends: qml-module-qt-labs-folderlistmodel,
597 qml-module-qtquick-xmllistmodel,
598- qml-module-qt-labs-folderlistmodel,
599+ qml-module-ubuntu-components (= ${binary:Version}) | qml-module-ubuntu-components-gles,
600+ ubuntu-ui-toolkit-theme (= ${binary:Version}),
601+ ubuntu-ui-toolkit-tools (>= ${source:Version}),
602 ${misc:Depends},
603- ${shlibs:Depends}
604-Recommends: libqt5multimedia5-plugins, ubuntu-ui-toolkit-doc
605-Conflicts: qt-components-ubuntu-examples, qt-components-ubuntu-demos
606-Replaces: qt-components-ubuntu-examples, qt-components-ubuntu-demos
607-Provides: qt-components-ubuntu-examples, qt-components-ubuntu-demos
608+ ${shlibs:Depends},
609+Recommends: libqt5multimedia5-plugins,
610+ ubuntu-ui-toolkit-doc,
611+Conflicts: qt-components-ubuntu-demos,
612+ qt-components-ubuntu-examples,
613+Replaces: qt-components-ubuntu-demos,
614+ qt-components-ubuntu-examples,
615+Provides: qt-components-ubuntu-demos,
616+ qt-components-ubuntu-examples,
617 Description: Qt Components for Ubuntu - demos and examples
618 Qt Components for Ubuntu offers a set of reusable user interface
619 components for Qt Quick 2 / QML.
620@@ -196,35 +277,35 @@
621
622 Package: ubuntu-ui-toolkit-autopilot
623 Architecture: any
624-Depends: ${misc:Depends},
625- ${shlibs:Depends},
626- autopilot-qt5,
627+Depends: autopilot-qt5,
628 dpkg-dev,
629 libqt5test5,
630 libqt5widgets5,
631+ python3-autopilot (>= 1.4),
632+ python3-autopilot-trace,
633 python3-fixtures,
634 python3-gi,
635 python3-testscenarios,
636 python3-testtools,
637- python3-autopilot (>= 1.4),
638- python3-autopilot-trace,
639+ qml-module-qttest,
640+ qml-module-ubuntu-components (>= ${source:Version}) | qml-module-ubuntu-components-gles,
641 qttestability-autopilot,
642+ ubuntu-app-launch-profiler (>= ${source:Version}),
643 ubuntu-keyboard-autopilot [amd64 armhf i386],
644 ubuntu-ui-toolkit-examples (>= ${source:Version}),
645 upstart,
646 url-dispatcher-tools,
647- qtdeclarative5-ubuntu-ui-toolkit-plugin (>= ${source:Version}) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles,
648- ubuntu-app-launch-profiler (>= ${source:Version}),
649- qml-module-qttest | qtdeclarative5-test-plugin,
650+ ${misc:Depends},
651+ ${shlibs:Depends},
652 Description: Test package for Ubuntu UI Toolkit
653 Autopilot tests for the ubuntu-ui-toolkit package
654
655 Package: ubuntu-app-launch-profiler
656 Architecture: any
657-Depends: ${misc:Depends},
658+Depends: lttng-tools,
659+ python3-babeltrace,
660+ ${misc:Depends},
661 ${shlibs:Depends},
662- lttng-tools,
663- python3-babeltrace
664 Description: Qt Components for Ubuntu - startup time profiling tool
665 Qt Components for Ubuntu offers a set of reusable user interface
666 components for Qt Quick 2 / QML.
667@@ -234,7 +315,7 @@
668 Package: ubuntu-ui-toolkit-tools
669 Architecture: any
670 Depends: ${misc:Depends},
671- ${shlibs:Depends}
672+ ${shlibs:Depends},
673 Description: Qt Components for Ubuntu - productive tools
674 Qt Components for Ubuntu offers a set of reusable user interface
675 components for Qt Quick 2 / QML.
676
677=== modified file 'debian/copyright'
678--- debian/copyright 2015-04-08 10:46:56 +0000
679+++ debian/copyright 2016-04-04 04:42:19 +0000
680@@ -2,13 +2,13 @@
681 Upstream-Name: ubuntu-ui-toolkit
682 Source: https://bazaar.launchpad.net/~ubuntu-sdk-team/ubuntu-ui-toolkit/trunk
683
684-Files: *
685+Files: *
686 Copyright: 2012-2013 Canonical Ltd.
687 License: LGPL-3.0
688
689 Files: modules/Ubuntu/Components/Themes/Ambiance/artwork/*
690-Files: modules/Ubuntu/Components/artwork/*
691-Files: modules/Ubuntu/Components/ListItems/artwork/*
692+ modules/Ubuntu/Components/artwork/*
693+ modules/Ubuntu/Components/ListItems/artwork/*
694 Copyright: 2004-2013, Canonical Ltd.
695 License: CC-BY-SA-3.0
696 Unless otherwise indicated, artwork is available under the Creative
697@@ -17,273 +17,273 @@
698 http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to
699 Creative Commons, 171 Second Street, Suite 300, San Francisco,
700 California, 94105, USA. See below for the full text of the license.
701- .
702- Some Rights Reserved:
703- .
704+ .
705+ Some Rights Reserved:
706+ .
707 The rights in the trademarks, logos, service marks of Canonical Ltd,
708 as well as the look and feel of Ubuntu, are not licensed under the
709 Creative Commons license and are subject to the Canonical Trademark
710 Policy at http://www.ubuntu.com/ubuntu/TrademarkPolicy
711- .
712- License:
713- .
714- CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
715- LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN
716- ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
717- INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
718- REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR
719+ .
720+ License:
721+ .
722+ CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
723+ LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN
724+ ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
725+ INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
726+ REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR
727 DAMAGES RESULTING FROM ITS USE.
728- .
729+ .
730 License
731- .
732- THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS
733- CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS
734- PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE
735- WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW
736+ .
737+ THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS
738+ CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS
739+ PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE
740+ WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW
741 IS PROHIBITED.
742- .
743- BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND
744+ .
745+ BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND
746 AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS YOU
747- THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH
748+ THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH
749 TERMS AND CONDITIONS.
750- .
751+ .
752 1. Definitions
753- .
754- 1. "Collective Work" means a work, such as a periodical issue,
755- anthology or encyclopedia, in which the Work in its entirety in
756- unmodified form, along with a number of other contributions,
757- constituting separate and independent works in themselves, are
758- assembled into a collective whole. A work that constitutes a
759- Collective Work will not be considered a Derivative Work
760+ .
761+ 1. "Collective Work" means a work, such as a periodical issue,
762+ anthology or encyclopedia, in which the Work in its entirety in
763+ unmodified form, along with a number of other contributions,
764+ constituting separate and independent works in themselves, are
765+ assembled into a collective whole. A work that constitutes a
766+ Collective Work will not be considered a Derivative Work
767 (as defined below) for the purposes of this License.
768- 2. "Derivative Work" means a work based upon the Work or upon the
769- Work and other pre-existing works, such as a translation, musical
770- arrangement, dramatization, fictionalization, motion picture
771- version, sound recording, art reproduction, abridgment,
772- condensation, or any other form in which the Work may be recast,
773- transformed, or adapted, except that a work that constitutes a
774- Collective Work will not be considered a Derivative Work for the
775- purpose of this License. For the avoidance of doubt, where the Work
776- is a musical composition or sound recording, the synchronization of
777- the Work in timed-relation with a moving image ("synching") will be
778+ 2. "Derivative Work" means a work based upon the Work or upon the
779+ Work and other pre-existing works, such as a translation, musical
780+ arrangement, dramatization, fictionalization, motion picture
781+ version, sound recording, art reproduction, abridgment,
782+ condensation, or any other form in which the Work may be recast,
783+ transformed, or adapted, except that a work that constitutes a
784+ Collective Work will not be considered a Derivative Work for the
785+ purpose of this License. For the avoidance of doubt, where the Work
786+ is a musical composition or sound recording, the synchronization of
787+ the Work in timed-relation with a moving image ("synching") will be
788 considered a Derivative Work for the purpose of this License.
789- 3. "Licensor" means the individual or entity that offers the Work
790+ 3. "Licensor" means the individual or entity that offers the Work
791 under the terms of this License.
792- 4. "Original Author" means the individual or entity who created the
793+ 4. "Original Author" means the individual or entity who created the
794 Work.
795- 5. "Work" means the copyrightable work of authorship offered under
796+ 5. "Work" means the copyrightable work of authorship offered under
797 the terms of this License.
798- 6. "You" means an individual or entity exercising rights under this
799- License who has not previously violated the terms of this License
800- with respect to the Work, or who has received express permission
801- from the Licensor to exercise rights under this License despite a
802+ 6. "You" means an individual or entity exercising rights under this
803+ License who has not previously violated the terms of this License
804+ with respect to the Work, or who has received express permission
805+ from the Licensor to exercise rights under this License despite a
806 previous violation.
807- 7. "License Elements" means the following high-level license
808- attributes as selected by Licensor and indicated in the title of
809+ 7. "License Elements" means the following high-level license
810+ attributes as selected by Licensor and indicated in the title of
811 this License: Attribution, ShareAlike.
812- .
813- 2. Fair Use Rights. Nothing in this license is intended to reduce,
814- limit, or restrict any rights arising from fair use, first sale or
815- other limitations on the exclusive rights of the copyright owner under
816+ .
817+ 2. Fair Use Rights. Nothing in this license is intended to reduce,
818+ limit, or restrict any rights arising from fair use, first sale or
819+ other limitations on the exclusive rights of the copyright owner under
820 copyright law or other applicable laws.
821- .
822- 3. License Grant. Subject to the terms and conditions of this License,
823- Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
824- perpetual (for the duration of the applicable copyright) license to
825+ .
826+ 3. License Grant. Subject to the terms and conditions of this License,
827+ Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
828+ perpetual (for the duration of the applicable copyright) license to
829 exercise the rights in the Work as stated below:
830- .
831- 1. to reproduce the Work, to incorporate the Work into one or more
832- Collective Works, and to reproduce the Work as incorporated in the
833+ .
834+ 1. to reproduce the Work, to incorporate the Work into one or more
835+ Collective Works, and to reproduce the Work as incorporated in the
836 Collective Works;
837 2. to create and reproduce Derivative Works;
838- 3. to distribute copies or phonorecords of, display publicly,
839- perform publicly, and perform publicly by means of a digital audio
840+ 3. to distribute copies or phonorecords of, display publicly,
841+ perform publicly, and perform publicly by means of a digital audio
842 transmission the Work including as incorporated in Collective Works;
843- 4. to distribute copies or phonorecords of, display publicly,
844- perform publicly, and perform publicly by means of a digital audio
845+ 4. to distribute copies or phonorecords of, display publicly,
846+ perform publicly, and perform publicly by means of a digital audio
847 transmission Derivative Works.
848 5.
849- .
850- For the avoidance of doubt, where the work is a musical
851+ .
852+ For the avoidance of doubt, where the work is a musical
853 composition:
854- 1. Performance Royalties Under Blanket Licenses. Licensor
855- waives the exclusive right to collect, whether individually
856- or via a performance rights society (e.g. ASCAP, BMI, SESAC),
857- royalties for the public performance or public digital
858+ 1. Performance Royalties Under Blanket Licenses. Licensor
859+ waives the exclusive right to collect, whether individually
860+ or via a performance rights society (e.g. ASCAP, BMI, SESAC),
861+ royalties for the public performance or public digital
862 performance (e.g. webcast) of the Work.
863- 2. Mechanical Rights and Statutory Royalties. Licensor waives
864- the exclusive right to collect, whether individually or via a
865- music rights society or designated agent (e.g. Harry Fox
866- Agency), royalties for any phonorecord You create from the
867- Work ("cover version") and distribute, subject to the
868- compulsory license created by 17 USC Section 115 of the US
869+ 2. Mechanical Rights and Statutory Royalties. Licensor waives
870+ the exclusive right to collect, whether individually or via a
871+ music rights society or designated agent (e.g. Harry Fox
872+ Agency), royalties for any phonorecord You create from the
873+ Work ("cover version") and distribute, subject to the
874+ compulsory license created by 17 USC Section 115 of the US
875 Copyright Act (or the equivalent in other jurisdictions).
876- 6. Webcasting Rights and Statutory Royalties. For the avoidance of
877- doubt, where the Work is a sound recording, Licensor waives the
878- exclusive right to collect, whether individually or via a
879- performance-rights society (e.g. SoundExchange), royalties for the
880- public digital performance (e.g. webcast) of the Work, subject to
881- the compulsory license created by 17 USC Section 114 of the US
882+ 6. Webcasting Rights and Statutory Royalties. For the avoidance of
883+ doubt, where the Work is a sound recording, Licensor waives the
884+ exclusive right to collect, whether individually or via a
885+ performance-rights society (e.g. SoundExchange), royalties for the
886+ public digital performance (e.g. webcast) of the Work, subject to
887+ the compulsory license created by 17 USC Section 114 of the US
888 Copyright Act (or the equivalent in other jurisdictions).
889- .
890- The above rights may be exercised in all media and formats whether now
891- known or hereafter devised. The above rights include the right to make
892- such modifications as are technically necessary to exercise the rights
893- in other media and formats. All rights not expressly granted by
894+ .
895+ The above rights may be exercised in all media and formats whether now
896+ known or hereafter devised. The above rights include the right to make
897+ such modifications as are technically necessary to exercise the rights
898+ in other media and formats. All rights not expressly granted by
899 Licensor are hereby reserved.
900- .
901- 4. Restrictions.The license granted in Section 3 above is expressly
902+ .
903+ 4. Restrictions.The license granted in Section 3 above is expressly
904 made subject to and limited by the following restrictions:
905- .
906- 1. You may distribute, publicly display, publicly perform, or
907- publicly digitally perform the Work only under the terms of this
908- License, and You must include a copy of, or the Uniform Resource
909- Identifier for, this License with every copy or phonorecord of the
910+ .
911+ 1. You may distribute, publicly display, publicly perform, or
912+ publicly digitally perform the Work only under the terms of this
913+ License, and You must include a copy of, or the Uniform Resource
914+ Identifier for, this License with every copy or phonorecord of the
915 Work You distribute, publicly display, publicly perform, or publicly
916 digitally perform. You may not offer or impose any terms on the Work
917- that alter or restrict the terms of this License or the recipients'
918+ that alter or restrict the terms of this License or the recipients'
919 exercise of the rights granted hereunder. You may not sublicense the
920- Work. You must keep intact all notices that refer to this License
921- and to the disclaimer of warranties. You may not distribute,
922- publicly display, publicly perform, or publicly digitally perform
923+ Work. You must keep intact all notices that refer to this License
924+ and to the disclaimer of warranties. You may not distribute,
925+ publicly display, publicly perform, or publicly digitally perform
926 the Work with any technological measures that control access or use
927- of the Work in a manner inconsistent with the terms of this License
928- Agreement. The above applies to the Work as incorporated in a
929+ of the Work in a manner inconsistent with the terms of this License
930+ Agreement. The above applies to the Work as incorporated in a
931 Collective Work, but this does not require the Collective Work apart
932- from the Work itself to be made subject to the terms of this
933- License. If You create a Collective Work, upon notice from any
934- Licensor You must, to the extent practicable, remove from the
935+ from the Work itself to be made subject to the terms of this
936+ License. If You create a Collective Work, upon notice from any
937+ Licensor You must, to the extent practicable, remove from the
938 Collective Work any credit as required by clause 4(c), as requested.
939- If You create a Derivative Work, upon notice from any Licensor You
940- must, to the extent practicable, remove from the Derivative Work
941+ If You create a Derivative Work, upon notice from any Licensor You
942+ must, to the extent practicable, remove from the Derivative Work
943 any credit as required by clause 4(c), as requested.
944- 2. You may distribute, publicly display, publicly perform, or
945- publicly digitally perform a Derivative Work only under the terms
946- of this License, a later version of this License with the same
947- License Elements as this License, or a Creative Commons iCommons
948- license that contains the same License Elements as this License
949+ 2. You may distribute, publicly display, publicly perform, or
950+ publicly digitally perform a Derivative Work only under the terms
951+ of this License, a later version of this License with the same
952+ License Elements as this License, or a Creative Commons iCommons
953+ license that contains the same License Elements as this License
954 (e.g. Attribution-ShareAlike 2.5 Japan). You must include a copy of,
955- or the Uniform Resource Identifier for, this License or other
956- license specified in the previous sentence with every copy or
957- phonorecord of each Derivative Work You distribute, publicly
958- display, publicly perform, or publicly digitally perform. You may
959- not offer or impose any terms on the Derivative Works that alter or
960- restrict the terms of this License or the recipients' exercise of
961- the rights granted hereunder, and You must keep intact all notices
962- that refer to this License and to the disclaimer of warranties.
963- You may not distribute, publicly display, publicly perform, or
964- publicly digitally perform the Derivative Work with any
965- technological measures that control access or use of the Work in a
966- manner inconsistent with the terms of this License Agreement.
967- The above applies to the Derivative Work as incorporated in a
968- Collective Work, but this does not require the Collective Work
969- apart from the Derivative Work itself to be made subject to the
970+ or the Uniform Resource Identifier for, this License or other
971+ license specified in the previous sentence with every copy or
972+ phonorecord of each Derivative Work You distribute, publicly
973+ display, publicly perform, or publicly digitally perform. You may
974+ not offer or impose any terms on the Derivative Works that alter or
975+ restrict the terms of this License or the recipients' exercise of
976+ the rights granted hereunder, and You must keep intact all notices
977+ that refer to this License and to the disclaimer of warranties.
978+ You may not distribute, publicly display, publicly perform, or
979+ publicly digitally perform the Derivative Work with any
980+ technological measures that control access or use of the Work in a
981+ manner inconsistent with the terms of this License Agreement.
982+ The above applies to the Derivative Work as incorporated in a
983+ Collective Work, but this does not require the Collective Work
984+ apart from the Derivative Work itself to be made subject to the
985 terms of this License.
986- 3. If you distribute, publicly display, publicly perform, or
987- publicly digitally perform the Work or any Derivative Works or
988- Collective Works, You must keep intact all copyright notices for
989- the Work and provide, reasonable to the medium or means You are
990- utilizing: (i) the name of the Original Author (or pseudonym, if
991- applicable) if supplied, and/or (ii) if the Original Author and/or
992- Licensor designate another party or parties (e.g. a sponsor
993+ 3. If you distribute, publicly display, publicly perform, or
994+ publicly digitally perform the Work or any Derivative Works or
995+ Collective Works, You must keep intact all copyright notices for
996+ the Work and provide, reasonable to the medium or means You are
997+ utilizing: (i) the name of the Original Author (or pseudonym, if
998+ applicable) if supplied, and/or (ii) if the Original Author and/or
999+ Licensor designate another party or parties (e.g. a sponsor
1000 institute, publishing entity, journal) for attribution in Licensor's
1001 copyright notice, terms of service or by other reasonable means, the
1002 name of such party or parties; the title of the Work if supplied; to
1003- the extent reasonably practicable, the Uniform Resource Identifier,
1004- if any, that Licensor specifies to be associated with the Work,
1005- unless such URI does not refer to the copyright notice or licensing
1006- information for the Work; and in the case of a Derivative Work, a
1007+ the extent reasonably practicable, the Uniform Resource Identifier,
1008+ if any, that Licensor specifies to be associated with the Work,
1009+ unless such URI does not refer to the copyright notice or licensing
1010+ information for the Work; and in the case of a Derivative Work, a
1011 credit identifying the use of the Work in the Derivative Work (e.g.,
1012- "French translation of the Work by Original Author," or "Screenplay
1013- based on original Work by Original Author"). Such credit may be
1014+ "French translation of the Work by Original Author," or "Screenplay
1015+ based on original Work by Original Author"). Such credit may be
1016 implemented in any reasonable manner; provided, however, that in the
1017- case of a Derivative Work or Collective Work, at a minimum such
1018- credit will appear where any other comparable authorship credit
1019- appears and in a manner at least as prominent as such other
1020+ case of a Derivative Work or Collective Work, at a minimum such
1021+ credit will appear where any other comparable authorship credit
1022+ appears and in a manner at least as prominent as such other
1023 comparable authorship credit.
1024- .
1025+ .
1026 5. Representations, Warranties and Disclaimer
1027- .
1028- UNLESS OTHERWISE AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS
1029- THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND
1030- CONCERNING THE MATERIALS, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE,
1031- INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY,
1032- FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF
1033- LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF
1034- ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW
1035- THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY
1036+ .
1037+ UNLESS OTHERWISE AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS
1038+ THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND
1039+ CONCERNING THE MATERIALS, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE,
1040+ INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY,
1041+ FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF
1042+ LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF
1043+ ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW
1044+ THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY
1045 TO YOU.
1046- .
1047- 6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE
1048- LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR
1049- ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES
1050- ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR
1051+ .
1052+ 6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE
1053+ LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR
1054+ ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES
1055+ ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR
1056 HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
1057- .
1058+ .
1059 7. Termination
1060- .
1061- 1. This License and the rights granted hereunder will terminate
1062- automatically upon any breach by You of the terms of this License.
1063- Individuals or entities who have received Derivative Works or
1064- Collective Works from You under this License, however, will not have
1065- their licenses terminated provided such individuals or entities
1066- remain in full compliance with those licenses. Sections 1, 2, 5, 6,
1067+ .
1068+ 1. This License and the rights granted hereunder will terminate
1069+ automatically upon any breach by You of the terms of this License.
1070+ Individuals or entities who have received Derivative Works or
1071+ Collective Works from You under this License, however, will not have
1072+ their licenses terminated provided such individuals or entities
1073+ remain in full compliance with those licenses. Sections 1, 2, 5, 6,
1074 7, and 8 will survive any termination of this License.
1075- 2. Subject to the above terms and conditions, the license granted
1076- here is perpetual (for the duration of the applicable copyright in
1077- the Work). Notwithstanding the above, Licensor reserves the right to
1078- release the Work under different license terms or to stop
1079- distributing the Work at any time; provided, however that any such
1080- election will not serve to withdraw this License (or any other
1081- license that has been, or is required to be, granted under the terms
1082- of this License), and this License will continue in full force and
1083+ 2. Subject to the above terms and conditions, the license granted
1084+ here is perpetual (for the duration of the applicable copyright in
1085+ the Work). Notwithstanding the above, Licensor reserves the right to
1086+ release the Work under different license terms or to stop
1087+ distributing the Work at any time; provided, however that any such
1088+ election will not serve to withdraw this License (or any other
1089+ license that has been, or is required to be, granted under the terms
1090+ of this License), and this License will continue in full force and
1091 effect unless terminated as stated above.
1092- .
1093+ .
1094 8. Miscellaneous
1095- .
1096- 1. Each time You distribute or publicly digitally perform the Work
1097- or a Collective Work, the Licensor offers to the recipient a license
1098- to the Work on the same terms and conditions as the license granted
1099+ .
1100+ 1. Each time You distribute or publicly digitally perform the Work
1101+ or a Collective Work, the Licensor offers to the recipient a license
1102+ to the Work on the same terms and conditions as the license granted
1103 to You under this License.
1104- 2. Each time You distribute or publicly digitally perform a
1105- Derivative Work, Licensor offers to the recipient a license to the
1106- original Work on the same terms and conditions as the license
1107+ 2. Each time You distribute or publicly digitally perform a
1108+ Derivative Work, Licensor offers to the recipient a license to the
1109+ original Work on the same terms and conditions as the license
1110 granted to You under this License.
1111 3. If any provision of this License is invalid or unenforceable under
1112 applicable law, it shall not affect the validity or enforceability of
1113- the remainder of the terms of this License, and without further
1114- action by the parties to this agreement, such provision shall be
1115- reformed to the minimum extent necessary to make such provision
1116+ the remainder of the terms of this License, and without further
1117+ action by the parties to this agreement, such provision shall be
1118+ reformed to the minimum extent necessary to make such provision
1119 valid and enforceable.
1120- 4. No term or provision of this License shall be deemed waived and
1121- no breach consented to unless such waiver or consent shall be in
1122- writing and signed by the party to be charged with such waiver or
1123+ 4. No term or provision of this License shall be deemed waived and
1124+ no breach consented to unless such waiver or consent shall be in
1125+ writing and signed by the party to be charged with such waiver or
1126 consent.
1127- 5. This License constitutes the entire agreement between the parties
1128- with respect to the Work licensed here. There are no understandings,
1129- agreements or representations with respect to the Work not specified
1130- here. Licensor shall not be bound by any additional provisions that
1131- may appear in any communication from You. This License may not be
1132- modified without the mutual written agreement of the Licensor and
1133+ 5. This License constitutes the entire agreement between the parties
1134+ with respect to the Work licensed here. There are no understandings,
1135+ agreements or representations with respect to the Work not specified
1136+ here. Licensor shall not be bound by any additional provisions that
1137+ may appear in any communication from You. This License may not be
1138+ modified without the mutual written agreement of the Licensor and
1139 You.
1140- .
1141- Creative Commons is not a party to this License, and makes no warranty
1142- whatsoever in connection with the Work. Creative Commons will not be
1143- liable to You or any party on any legal theory for any damages
1144- whatsoever, including without limitation any general, special,
1145- incidental or consequential damages arising in connection to this
1146- license. Notwithstanding the foregoing two (2) sentences, if Creative
1147- Commons has expressly identified itself as the Licensor hereunder,
1148+ .
1149+ Creative Commons is not a party to this License, and makes no warranty
1150+ whatsoever in connection with the Work. Creative Commons will not be
1151+ liable to You or any party on any legal theory for any damages
1152+ whatsoever, including without limitation any general, special,
1153+ incidental or consequential damages arising in connection to this
1154+ license. Notwithstanding the foregoing two (2) sentences, if Creative
1155+ Commons has expressly identified itself as the Licensor hereunder,
1156 it shall have all rights and obligations of Licensor.
1157- .
1158- Except for the limited purpose of indicating to the public that the
1159- Work is licensed under the CCPL, neither party will use the trademark
1160- "Creative Commons" or any related trademark or logo of Creative Commons
1161- without the prior written consent of Creative Commons. Any permitted
1162- use will be in compliance with Creative Commons' then-current trademark
1163- usage guidelines, as may be published on its website or otherwise made
1164+ .
1165+ Except for the limited purpose of indicating to the public that the
1166+ Work is licensed under the CCPL, neither party will use the trademark
1167+ "Creative Commons" or any related trademark or logo of Creative Commons
1168+ without the prior written consent of Creative Commons. Any permitted
1169+ use will be in compliance with Creative Commons' then-current trademark
1170+ usage guidelines, as may be published on its website or otherwise made
1171 available upon request from time to time.
1172- .
1173+ .
1174 Creative Commons may be contacted at http://creativecommons.org/
1175
1176 License: LGPL-3.0
1177
1178=== modified file 'debian/libubuntugestures5-dev.install'
1179--- debian/libubuntugestures5-dev.install 2016-01-22 10:16:44 +0000
1180+++ debian/libubuntugestures5-dev.install 2016-04-04 04:42:19 +0000
1181@@ -1,34 +1,34 @@
1182-usr/include/*/qt5/UbuntuGestures/ubuntugesturesglobal.h
1183+usr/include/*/qt5/UbuntuGestures/AbstractTimer
1184+usr/include/*/qt5/UbuntuGestures/AbstractTimerFactory
1185 usr/include/*/qt5/UbuntuGestures/CandidateInactivityTimer
1186+usr/include/*/qt5/UbuntuGestures/DebugHelpers
1187+usr/include/*/qt5/UbuntuGestures/FakeTimeSource
1188+usr/include/*/qt5/UbuntuGestures/FakeTimer
1189+usr/include/*/qt5/UbuntuGestures/FakeTimerFactory
1190+usr/include/*/qt5/UbuntuGestures/Pool
1191+usr/include/*/qt5/UbuntuGestures/RealTimeSource
1192+usr/include/*/qt5/UbuntuGestures/SharedTimeSource
1193+usr/include/*/qt5/UbuntuGestures/TimeSource
1194+usr/include/*/qt5/UbuntuGestures/Timer
1195+usr/include/*/qt5/UbuntuGestures/TimerFactory
1196 usr/include/*/qt5/UbuntuGestures/TouchOwnershipEvent
1197+usr/include/*/qt5/UbuntuGestures/TouchRegistry
1198 usr/include/*/qt5/UbuntuGestures/UbuntuGestures
1199+usr/include/*/qt5/UbuntuGestures/UbuntuGesturesDepends
1200+usr/include/*/qt5/UbuntuGestures/UbuntuGesturesVersion
1201+usr/include/*/qt5/UbuntuGestures/UnownedTouchEvent
1202+usr/include/*/qt5/UbuntuGestures/candidateinactivitytimer.h
1203+usr/include/*/qt5/UbuntuGestures/debughelpers.h
1204 usr/include/*/qt5/UbuntuGestures/pool.h
1205-usr/include/*/qt5/UbuntuGestures/unownedtouchevent.h
1206-usr/include/*/qt5/UbuntuGestures/DebugHelpers
1207-usr/include/*/qt5/UbuntuGestures/debughelpers.h
1208+usr/include/*/qt5/UbuntuGestures/timer.h
1209+usr/include/*/qt5/UbuntuGestures/timesource.h
1210 usr/include/*/qt5/UbuntuGestures/touchownershipevent.h
1211 usr/include/*/qt5/UbuntuGestures/touchregistry.h
1212-usr/include/*/qt5/UbuntuGestures/UbuntuGesturesDepends
1213-usr/include/*/qt5/UbuntuGestures/timesource.h
1214-usr/include/*/qt5/UbuntuGestures/TimeSource
1215-usr/include/*/qt5/UbuntuGestures/timer.h
1216-usr/include/*/qt5/UbuntuGestures/UnownedTouchEvent
1217-usr/include/*/qt5/UbuntuGestures/TouchRegistry
1218-usr/include/*/qt5/UbuntuGestures/Pool
1219+usr/include/*/qt5/UbuntuGestures/ubuntugesturesglobal.h
1220 usr/include/*/qt5/UbuntuGestures/ubuntugesturesversion.h
1221-usr/include/*/qt5/UbuntuGestures/Timer
1222-usr/include/*/qt5/UbuntuGestures/candidateinactivitytimer.h
1223-usr/include/*/qt5/UbuntuGestures/UbuntuGesturesVersion
1224-usr/include/*/qt5/UbuntuGestures/TimerFactory
1225-usr/include/*/qt5/UbuntuGestures/AbstractTimer
1226-usr/include/*/qt5/UbuntuGestures/FakeTimeSource
1227-usr/include/*/qt5/UbuntuGestures/AbstractTimerFactory
1228-usr/include/*/qt5/UbuntuGestures/FakeTimerFactory
1229-usr/include/*/qt5/UbuntuGestures/RealTimeSource
1230-usr/include/*/qt5/UbuntuGestures/SharedTimeSource
1231-usr/include/*/qt5/UbuntuGestures/FakeTimer
1232+usr/include/*/qt5/UbuntuGestures/unownedtouchevent.h
1233+usr/lib/*/libUbuntuGestures.la
1234 usr/lib/*/libUbuntuGestures.prl
1235-usr/lib/*/libUbuntuGestures.la
1236 usr/lib/*/libUbuntuGestures.so
1237 usr/lib/*/pkgconfig/UbuntuGestures.pc
1238 usr/lib/*/qt5/mkspecs/modules/qt_lib_UbuntuGestures.pri
1239
1240=== modified file 'debian/libubuntugestures5-private-dev.install'
1241--- debian/libubuntugestures5-private-dev.install 2015-12-17 15:42:25 +0000
1242+++ debian/libubuntugestures5-private-dev.install 2016-04-04 04:42:19 +0000
1243@@ -1,3 +1,3 @@
1244+usr/include/*/qt5/UbuntuGestures/*/UbuntuGestures/private/damper_p.h
1245 usr/include/*/qt5/UbuntuGestures/*/UbuntuGestures/private/ucswipearea_p.h
1246 usr/include/*/qt5/UbuntuGestures/*/UbuntuGestures/private/ucswipearea_p_p.h
1247-usr/include/*/qt5/UbuntuGestures/*/UbuntuGestures/private/damper_p.h
1248
1249=== modified file 'debian/libubuntutoolkit5-dev.install'
1250--- debian/libubuntutoolkit5-dev.install 2016-02-12 08:52:18 +0000
1251+++ debian/libubuntutoolkit5-dev.install 2016-04-04 04:42:19 +0000
1252@@ -1,14 +1,16 @@
1253+usr/include/*/qt5/UbuntuToolkit/AsyncLoader
1254 usr/include/*/qt5/UbuntuToolkit/ColorUtils
1255-usr/include/*/qt5/UbuntuToolkit/colorutils.h
1256 usr/include/*/qt5/UbuntuToolkit/Tree
1257-usr/include/*/qt5/UbuntuToolkit/tree.h
1258 usr/include/*/qt5/UbuntuToolkit/UbuntuToolkit
1259 usr/include/*/qt5/UbuntuToolkit/UbuntuToolkitDepends
1260 usr/include/*/qt5/UbuntuToolkit/UbuntuToolkitVersion
1261+usr/include/*/qt5/UbuntuToolkit/asyncloader.h
1262+usr/include/*/qt5/UbuntuToolkit/colorutils.h
1263+usr/include/*/qt5/UbuntuToolkit/tree.h
1264 usr/include/*/qt5/UbuntuToolkit/ubuntutoolkitglobal.h
1265 usr/include/*/qt5/UbuntuToolkit/ubuntutoolkitversion.h
1266+usr/lib/*/libUbuntuToolkit.la
1267 usr/lib/*/libUbuntuToolkit.prl
1268-usr/lib/*/libUbuntuToolkit.la
1269 usr/lib/*/libUbuntuToolkit.so
1270 usr/lib/*/pkgconfig/UbuntuToolkit.pc
1271 usr/lib/*/qt5/mkspecs/modules/qt_lib_UbuntuToolkit.pri
1272
1273=== added file 'debian/libubuntutoolkit5-private-dev.install'
1274--- debian/libubuntutoolkit5-private-dev.install 1970-01-01 00:00:00 +0000
1275+++ debian/libubuntutoolkit5-private-dev.install 2016-04-04 04:42:19 +0000
1276@@ -0,0 +1,1 @@
1277+usr/include/*/qt5/UbuntuToolkit/*/UbuntuToolkit/private/*_p.h
1278
1279=== renamed file 'debian/qtdeclarative5-ubuntu-ui-toolkit-plugin.install' => 'debian/qml-module-ubuntu-components.install'
1280--- debian/qtdeclarative5-ubuntu-ui-toolkit-plugin.install 2015-09-22 05:58:02 +0000
1281+++ debian/qml-module-ubuntu-components.install 2016-04-04 04:42:19 +0000
1282@@ -1,33 +1,25 @@
1283-usr/lib/*/qt5/qml/Ubuntu/PerformanceMetrics/*.qml
1284-usr/lib/*/qt5/qml/Ubuntu/PerformanceMetrics/qmldir
1285-usr/lib/*/qt5/qml/Ubuntu/PerformanceMetrics/plugins.qmltypes
1286-usr/lib/*/qt5/qml/Ubuntu/PerformanceMetrics/libUbuntuPerformanceMetrics.so
1287-usr/lib/*/qt5/qml/Ubuntu/Layouts/qmldir
1288-usr/lib/*/qt5/qml/Ubuntu/Layouts/plugins.qmltypes
1289-usr/lib/*/qt5/qml/Ubuntu/Layouts/libUbuntuLayouts.so
1290 usr/lib/*/qt5/qml/Ubuntu/Components/1.0/*.qml
1291 usr/lib/*/qt5/qml/Ubuntu/Components/1.1/*.qml
1292+usr/lib/*/qt5/qml/Ubuntu/Components/1.2/*.js
1293 usr/lib/*/qt5/qml/Ubuntu/Components/1.2/*.qml
1294-usr/lib/*/qt5/qml/Ubuntu/Components/1.2/*.js
1295+usr/lib/*/qt5/qml/Ubuntu/Components/1.3/*.js
1296 usr/lib/*/qt5/qml/Ubuntu/Components/1.3/*.qml
1297-usr/lib/*/qt5/qml/Ubuntu/Components/1.3/*.js
1298-usr/lib/*/qt5/qml/Ubuntu/Components/qmldir
1299-usr/lib/*/qt5/qml/Ubuntu/Components/plugins.qmltypes
1300-usr/lib/*/qt5/qml/Ubuntu/Components/libUbuntuComponents.so
1301-usr/lib/*/qt5/qml/Ubuntu/Components/artwork
1302 usr/lib/*/qt5/qml/Ubuntu/Components/ListItems/1.2/*.qml
1303 usr/lib/*/qt5/qml/Ubuntu/Components/ListItems/1.3/*.qml
1304 usr/lib/*/qt5/qml/Ubuntu/Components/ListItems/qmldir
1305-usr/lib/*/qt5/qml/Ubuntu/Components/Popups/qmldir
1306-usr/lib/*/qt5/qml/Ubuntu/Components/Popups/1.2/*.qml
1307-usr/lib/*/qt5/qml/Ubuntu/Components/Popups/1.2/*.js
1308-usr/lib/*/qt5/qml/Ubuntu/Components/Popups/1.3/*.qml
1309-usr/lib/*/qt5/qml/Ubuntu/Components/Popups/1.3/*.js
1310 usr/lib/*/qt5/qml/Ubuntu/Components/Pickers/1.2/*.qml
1311 usr/lib/*/qt5/qml/Ubuntu/Components/Pickers/1.3/*.qml
1312 usr/lib/*/qt5/qml/Ubuntu/Components/Pickers/qmldir
1313+usr/lib/*/qt5/qml/Ubuntu/Components/Popups/1.2/*.js
1314+usr/lib/*/qt5/qml/Ubuntu/Components/Popups/1.2/*.qml
1315+usr/lib/*/qt5/qml/Ubuntu/Components/Popups/1.3/*.js
1316+usr/lib/*/qt5/qml/Ubuntu/Components/Popups/1.3/*.qml
1317+usr/lib/*/qt5/qml/Ubuntu/Components/Popups/qmldir
1318 usr/lib/*/qt5/qml/Ubuntu/Components/Styles/1.2/*.qml
1319 usr/lib/*/qt5/qml/Ubuntu/Components/Styles/1.3/*.qml
1320 usr/lib/*/qt5/qml/Ubuntu/Components/Styles/qmldir
1321-usr/lib/*/qt5/qml/Ubuntu/Test
1322+usr/lib/*/qt5/qml/Ubuntu/Components/artwork
1323+usr/lib/*/qt5/qml/Ubuntu/Components/libUbuntuComponents.so
1324+usr/lib/*/qt5/qml/Ubuntu/Components/plugins.qmltypes
1325+usr/lib/*/qt5/qml/Ubuntu/Components/qmldir
1326 usr/share/locale/*/LC_MESSAGES/ubuntu-ui-toolkit.mo
1327
1328=== renamed file 'debian/qtdeclarative5-ubuntu-ui-toolkit-plugin.lintian-overrides' => 'debian/qml-module-ubuntu-components.lintian-overrides'
1329--- debian/qtdeclarative5-ubuntu-ui-toolkit-plugin.lintian-overrides 2013-02-26 07:55:20 +0000
1330+++ debian/qml-module-ubuntu-components.lintian-overrides 2016-04-04 04:42:19 +0000
1331@@ -1,1 +1,1 @@
1332-qtdeclarative5-ubuntu-ui-toolkit-plugin: image-file-in-usr-lib
1333+qml-module-ubuntu-components: image-file-in-usr-lib
1334
1335=== added file 'debian/qml-module-ubuntu-layouts.install'
1336--- debian/qml-module-ubuntu-layouts.install 1970-01-01 00:00:00 +0000
1337+++ debian/qml-module-ubuntu-layouts.install 2016-04-04 04:42:19 +0000
1338@@ -0,0 +1,3 @@
1339+usr/lib/*/qt5/qml/Ubuntu/Layouts/libUbuntuLayouts.so
1340+usr/lib/*/qt5/qml/Ubuntu/Layouts/plugins.qmltypes
1341+usr/lib/*/qt5/qml/Ubuntu/Layouts/qmldir
1342
1343=== added file 'debian/qml-module-ubuntu-performancemetrics.install'
1344--- debian/qml-module-ubuntu-performancemetrics.install 1970-01-01 00:00:00 +0000
1345+++ debian/qml-module-ubuntu-performancemetrics.install 2016-04-04 04:42:19 +0000
1346@@ -0,0 +1,4 @@
1347+usr/lib/*/qt5/qml/Ubuntu/PerformanceMetrics/*.qml
1348+usr/lib/*/qt5/qml/Ubuntu/PerformanceMetrics/libUbuntuPerformanceMetrics.so
1349+usr/lib/*/qt5/qml/Ubuntu/PerformanceMetrics/plugins.qmltypes
1350+usr/lib/*/qt5/qml/Ubuntu/PerformanceMetrics/qmldir
1351
1352=== added file 'debian/qml-module-ubuntu-test.install'
1353--- debian/qml-module-ubuntu-test.install 1970-01-01 00:00:00 +0000
1354+++ debian/qml-module-ubuntu-test.install 2016-04-04 04:42:19 +0000
1355@@ -0,0 +1,1 @@
1356+usr/lib/*/qt5/qml/Ubuntu/Test
1357
1358=== modified file 'debian/ubuntu-app-launch-profiler.install'
1359--- debian/ubuntu-app-launch-profiler.install 2016-03-12 17:38:04 +0000
1360+++ debian/ubuntu-app-launch-profiler.install 2016-04-04 04:42:19 +0000
1361@@ -1,4 +1,4 @@
1362 usr/bin/app-launch-profiler-lttng
1363+usr/bin/app-launch-tracepoints
1364 usr/bin/appstart_test
1365-usr/bin/app-launch-tracepoints
1366 usr/bin/profile_appstart.sh
1367
1368=== modified file 'debian/ubuntu-ui-toolkit-autopilot.install'
1369--- debian/ubuntu-ui-toolkit-autopilot.install 2015-08-06 11:50:01 +0000
1370+++ debian/ubuntu-ui-toolkit-autopilot.install 2016-04-04 04:42:19 +0000
1371@@ -1,2 +1,2 @@
1372+usr/lib/*/ubuntu-ui-toolkit/apicheck
1373 usr/lib/python3
1374-usr/lib/*/ubuntu-ui-toolkit/apicheck
1375
1376=== modified file 'debian/ubuntu-ui-toolkit-doc.install'
1377--- debian/ubuntu-ui-toolkit-doc.install 2015-06-17 10:01:58 +0000
1378+++ debian/ubuntu-ui-toolkit-doc.install 2016-04-04 04:42:19 +0000
1379@@ -1,2 +1,2 @@
1380+usr/share/qt5/doc
1381 usr/share/ubuntu-ui-toolkit/doc
1382-usr/share/qt5/doc
1383
1384=== modified file 'debian/ubuntu-ui-toolkit-theme.install'
1385--- debian/ubuntu-ui-toolkit-theme.install 2015-05-02 05:47:27 +0000
1386+++ debian/ubuntu-ui-toolkit-theme.install 2016-04-04 04:42:19 +0000
1387@@ -1,17 +1,17 @@
1388-usr/lib/*/qt5/qml/Ubuntu/Components/Themes/qmldir
1389 usr/lib/*/qt5/qml/Ubuntu/Components/Themes/1.2/*.qml
1390 usr/lib/*/qt5/qml/Ubuntu/Components/Themes/1.3/*.qml
1391-usr/lib/*/qt5/qml/Ubuntu/Components/Themes/Ambiance/qmldir
1392-usr/lib/*/qt5/qml/Ubuntu/Components/Themes/Ambiance/artwork
1393 usr/lib/*/qt5/qml/Ubuntu/Components/Themes/Ambiance/1.2/*.qml
1394 usr/lib/*/qt5/qml/Ubuntu/Components/Themes/Ambiance/1.3/*.qml
1395-usr/lib/*/qt5/qml/Ubuntu/Components/Themes/SuruDark/qmldir
1396-usr/lib/*/qt5/qml/Ubuntu/Components/Themes/SuruDark/parent_theme
1397-usr/lib/*/qt5/qml/Ubuntu/Components/Themes/SuruDark/artwork
1398+usr/lib/*/qt5/qml/Ubuntu/Components/Themes/Ambiance/artwork
1399+usr/lib/*/qt5/qml/Ubuntu/Components/Themes/Ambiance/qmldir
1400 usr/lib/*/qt5/qml/Ubuntu/Components/Themes/SuruDark/1.2/*.qml
1401 usr/lib/*/qt5/qml/Ubuntu/Components/Themes/SuruDark/1.3/*.qml
1402-usr/lib/*/qt5/qml/Ubuntu/Components/Themes/SuruGradient/qmldir
1403+usr/lib/*/qt5/qml/Ubuntu/Components/Themes/SuruDark/artwork
1404+usr/lib/*/qt5/qml/Ubuntu/Components/Themes/SuruDark/parent_theme
1405+usr/lib/*/qt5/qml/Ubuntu/Components/Themes/SuruDark/qmldir
1406+usr/lib/*/qt5/qml/Ubuntu/Components/Themes/SuruGradient/*.qml
1407+usr/lib/*/qt5/qml/Ubuntu/Components/Themes/SuruGradient/artwork
1408 usr/lib/*/qt5/qml/Ubuntu/Components/Themes/SuruGradient/deprecated
1409 usr/lib/*/qt5/qml/Ubuntu/Components/Themes/SuruGradient/parent_theme
1410-usr/lib/*/qt5/qml/Ubuntu/Components/Themes/SuruGradient/artwork
1411-usr/lib/*/qt5/qml/Ubuntu/Components/Themes/SuruGradient/*.qml
1412+usr/lib/*/qt5/qml/Ubuntu/Components/Themes/SuruGradient/qmldir
1413+usr/lib/*/qt5/qml/Ubuntu/Components/Themes/qmldir
1414
1415=== modified file 'documentation/css/qtquick.css'
1416--- documentation/css/qtquick.css 2013-07-25 13:19:45 +0000
1417+++ documentation/css/qtquick.css 2016-04-04 04:42:19 +0000
1418@@ -473,8 +473,19 @@
1419 color: red;
1420 }
1421
1422- .qmldoc
1423- {
1424+ /* The `#details ~ ul` selector is used because there is no other way to
1425+ * target the content without overwriting the default styles of the page.
1426+ * A better solution would be to reset the list style on the parts where
1427+ * this style is required instead of doing it by default. */
1428+ .qmldoc ul,
1429+ #details ~ ul
1430+ {
1431+ margin: 0 10px 10px;
1432+ }
1433+ .qmldoc li,
1434+ #details ~ ul li
1435+ {
1436+ list-style: disc inside none;
1437 }
1438
1439 .generic .alphaChar{
1440
1441=== modified file 'documentation/ubuntu-theming.qdoc'
1442--- documentation/ubuntu-theming.qdoc 2015-12-14 08:59:36 +0000
1443+++ documentation/ubuntu-theming.qdoc 2016-04-04 04:42:19 +0000
1444@@ -337,6 +337,7 @@
1445 * \qml
1446 * import QtQuick 2.4
1447 * import Ubuntu.Components 1.3
1448+ * import Ubuntu.Components.Popups 1.3
1449 * MainView {
1450 * width: units.gu(40)
1451 * height: units.gu(71)
1452
1453=== added file 'examples/calculator/calculator.apparmor'
1454--- examples/calculator/calculator.apparmor 1970-01-01 00:00:00 +0000
1455+++ examples/calculator/calculator.apparmor 2016-04-04 04:42:19 +0000
1456@@ -0,0 +1,8 @@
1457+{
1458+ "policy_groups": [
1459+ ],
1460+ "policy_version": 1.3
1461+}
1462+
1463+
1464+
1465
1466=== modified file 'examples/calculator/calculator.desktop'
1467--- examples/calculator/calculator.desktop 2013-07-02 10:59:12 +0000
1468+++ examples/calculator/calculator.desktop 2016-04-04 04:42:19 +0000
1469@@ -1,8 +1,10 @@
1470 [Desktop Entry]
1471-Name=calculator
1472+Name=Calculator
1473 Comment=My project description
1474-Exec=/usr/bin/qmlscene $@ /usr/lib/ubuntu-ui-toolkit/examples/calculator/calculator.qml
1475-Icon=qmlscene
1476+Exec=qmlscene $@ calculator.qml
1477 Terminal=false
1478 Type=Application
1479 X-Ubuntu-Touch=true
1480+X-Ubuntu-Gettext-Domain=com.ubuntu.developer.bzoltan.calculator
1481+Icon=calculator.png
1482+
1483
1484=== added file 'examples/calculator/calculator.png'
1485Binary files examples/calculator/calculator.png 1970-01-01 00:00:00 +0000 and examples/calculator/calculator.png 2016-04-04 04:42:19 +0000 differ
1486=== modified file 'examples/calculator/calculator.pro'
1487--- examples/calculator/calculator.pro 2015-06-15 13:55:18 +0000
1488+++ examples/calculator/calculator.pro 2016-04-04 04:42:19 +0000
1489@@ -1,20 +1,47 @@
1490 TEMPLATE = subdirs
1491
1492+#load Ubuntu specific features
1493+load(ubuntu-click)
1494+
1495+# specify the manifest file, this file is required for click
1496+# packaging and for the IDE to create runconfigurations
1497+UBUNTU_MANIFEST_FILE=manifest.json.in
1498+
1499+TARGET = calculator
1500+
1501 SUBDIRS += components
1502
1503-filetypes = qml png svg js qmltheme jpg qmlproject desktop wav
1504-
1505-OTHER_FILES = ""
1506-
1507-for(filetype, filetypes) {
1508- OTHER_FILES += *.$$filetype
1509+QML_FILES += $$files(*.qml,true) \
1510+ $$files(*.js,true) \
1511+ components
1512+
1513+CONF_FILES += $${TARGET}.apparmor \
1514+ $${TARGET}.png \
1515+ $${TARGET}.wav
1516+
1517+OTHER_FILES += $${CONF_FILES} \
1518+ $${QML_FILES} \
1519+ $${TARGET}.desktop \
1520+ ``
1521+
1522+#specify where the qml/js files are installed to
1523+qml_files.path = /
1524+qml_files.files += $${QML_FILES}
1525+
1526+#specify where the config files are installed to
1527+config_files.path = /
1528+config_files.files += $${CONF_FILES}
1529+
1530+#install the desktop file, a translated version is
1531+#automatically created in the build directory
1532+desktop_file.path = /
1533+desktop_file.files = $${TARGET}.desktop
1534+desktop_file.CONFIG += no_check_exist
1535+
1536+exists($$PWD/../examples.pro) {
1537+ desktop_file.path = $$[QT_INSTALL_EXAMPLES]/ubuntu-ui-toolkit/examples/$${TARGET}
1538+ config_files.path = $$[QT_INSTALL_EXAMPLES]/ubuntu-ui-toolkit/examples/$${TARGET}
1539+ qml_files.path = $$[QT_INSTALL_EXAMPLES]/ubuntu-ui-toolkit/examples/$${TARGET}
1540 }
1541
1542-desktop_files.path = $$[QT_INSTALL_EXAMPLES]/ubuntu-ui-toolkit/examples/calculator
1543-desktop_files.files = calculator.desktop
1544-
1545-other_files.path = $$[QT_INSTALL_EXAMPLES]/ubuntu-ui-toolkit/examples/calculator
1546-other_files.files = $$OTHER_FILES
1547-
1548-INSTALLS += other_files desktop_files
1549-
1550+INSTALLS+=config_files qml_files desktop_file
1551
1552=== removed file 'examples/calculator/calculator.qmlproject'
1553--- examples/calculator/calculator.qmlproject 2013-07-02 10:59:12 +0000
1554+++ examples/calculator/calculator.qmlproject 1970-01-01 00:00:00 +0000
1555@@ -1,31 +0,0 @@
1556-/* File generated by Qt Creator (with Ubuntu Plugin), version 2.7.1 */
1557-
1558-import QmlProject 1.1
1559-
1560-Project {
1561- mainFile: "calculator.qml"
1562-
1563- /* Include .qml, .js, and image files from current directory and subdirectories */
1564- QmlFiles {
1565- directory: "."
1566- }
1567- JavaScriptFiles {
1568- directory: "."
1569- }
1570- ImageFiles {
1571- directory: "."
1572- }
1573- Files {
1574- filter: "*.desktop"
1575- }
1576- Files {
1577- directory: "html"
1578- filter: "*"
1579- }
1580- Files {
1581- directory: "debian"
1582- filter: "*"
1583- }
1584- /* List of plugin directories passed to QML runtime */
1585- importPaths: [ "." ,"/usr/bin","/usr/lib/*/qt5/qml" ]
1586-}
1587
1588=== added file 'examples/calculator/manifest.json.in'
1589--- examples/calculator/manifest.json.in 1970-01-01 00:00:00 +0000
1590+++ examples/calculator/manifest.json.in 2016-04-04 04:42:19 +0000
1591@@ -0,0 +1,15 @@
1592+{
1593+ "name": "calculator.bzoltan",
1594+ "description": "Example application of the Ubuntu UI Toolkit - Calculator",
1595+ "architecture": "@CLICK_ARCH@",
1596+ "title": "Calculator",
1597+ "hooks": {
1598+ "calculator": {
1599+ "apparmor": "calculator.apparmor",
1600+ "desktop": "calculator.desktop"
1601+ }
1602+ },
1603+ "version": "0.1",
1604+ "maintainer": "Zoltán Balogh <zoltan@bakter.hu>",
1605+ "framework": "ubuntu-sdk-15.04"
1606+}
1607
1608=== modified file 'examples/customtheme/customtheme.desktop'
1609--- examples/customtheme/customtheme.desktop 2014-12-04 07:18:58 +0000
1610+++ examples/customtheme/customtheme.desktop 2016-04-04 04:42:19 +0000
1611@@ -1,8 +1,8 @@
1612 [Desktop Entry]
1613 Name=customtheme
1614 Exec=qmlscene $@ main.qml
1615-Icon=customtheme.png
1616 Terminal=false
1617 Type=Application
1618 X-Ubuntu-Touch=true
1619-
1620+X-Ubuntu-Gettext-Domain=com.ubuntu.developer.zsombi.customtheme
1621+Icon=customtheme.png
1622
1623=== added file 'examples/customtheme/customtheme.png'
1624Binary files examples/customtheme/customtheme.png 1970-01-01 00:00:00 +0000 and examples/customtheme/customtheme.png 2016-04-04 04:42:19 +0000 differ
1625=== modified file 'examples/customtheme/customtheme.pro'
1626--- examples/customtheme/customtheme.pro 2015-06-15 08:53:40 +0000
1627+++ examples/customtheme/customtheme.pro 2016-04-04 04:42:19 +0000
1628@@ -1,18 +1,44 @@
1629-TEMPLATE = aux
1630-
1631-filetypes = qml png svg js jpg qmlproject desktop
1632-
1633-OTHER_FILES = theme/parent_theme
1634-
1635-for(filetype, filetypes) {
1636- OTHER_FILES += *.$$filetype
1637- OTHER_FILES += theme/*.$$filetype
1638+TEMPLATE = subdirs
1639+
1640+#load Ubuntu specific features
1641+load(ubuntu-click)
1642+
1643+# specify the manifest file, this file is required for click
1644+# packaging and for the IDE to create runconfigurations
1645+UBUNTU_MANIFEST_FILE=manifest.json.in
1646+
1647+TARGET = customtheme
1648+
1649+QML_FILES += $$files(*.qml,true) \
1650+ $$files(*.js,true)
1651+
1652+CONF_FILES += $${TARGET}.apparmor \
1653+ $${TARGET}.png \
1654+ $${TARGET}.wav \
1655+ theme/parent_theme
1656+
1657+OTHER_FILES += $${CONF_FILES} \
1658+ $${QML_FILES} \
1659+ $${TARGET}.desktop
1660+
1661+#specify where the qml/js files are installed to
1662+qml_files.path = /
1663+qml_files.files += $${QML_FILES}
1664+
1665+#specify where the config files are installed to
1666+config_files.path = /
1667+config_files.files += $${CONF_FILES}
1668+
1669+#install the desktop file, a translated version is
1670+#automatically created in the build directory
1671+desktop_file.path = /
1672+desktop_file.files = $${TARGET}.desktop
1673+desktop_file.CONFIG += no_check_exist
1674+
1675+exists($$PWD/../examples.pro) {
1676+ desktop_file.path = $$[QT_INSTALL_EXAMPLES]/ubuntu-ui-toolkit/examples/$${TARGET}
1677+ config_files.path = $$[QT_INSTALL_EXAMPLES]/ubuntu-ui-toolkit/examples/$${TARGET}
1678+ qml_files.path = $$[QT_INSTALL_EXAMPLES]/ubuntu-ui-toolkit/examples/$${TARGET}
1679 }
1680
1681-desktop_files.path = $$[QT_INSTALL_EXAMPLES]/ubuntu-ui-toolkit/examples/
1682-desktop_files.files = customtheme.desktop
1683-
1684-other_files.path = $$[QT_INSTALL_EXAMPLES]/ubuntu-ui-toolkit/examples/customtheme
1685-other_files.files = $$OTHER_FILES
1686-
1687-INSTALLS += other_files desktop_files
1688+INSTALLS+=config_files qml_files desktop_file
1689
1690=== removed file 'examples/customtheme/customtheme.qmlproject'
1691--- examples/customtheme/customtheme.qmlproject 2014-12-04 07:18:58 +0000
1692+++ examples/customtheme/customtheme.qmlproject 1970-01-01 00:00:00 +0000
1693@@ -1,59 +0,0 @@
1694-import QmlProject 1.1
1695-
1696-Project {
1697- mainFile: "main.qml"
1698-
1699- /* Include .qml, .js, and image files from current directory and subdirectories */
1700- QmlFiles {
1701- directory: "."
1702- }
1703- JavaScriptFiles {
1704- directory: "."
1705- }
1706- ImageFiles {
1707- directory: "."
1708- }
1709- Files {
1710- filter: "*.desktop"
1711- }
1712- Files {
1713- filter: "www/*.html"
1714- }
1715- Files {
1716- filter: "Makefile"
1717- }
1718- Files {
1719- filter: "*.apparmor"
1720- }
1721- Files {
1722- directory: "."
1723- paths: ["manifest.json",".excludes"]
1724- }
1725- Files {
1726- directory: "www"
1727- filter: "*"
1728- }
1729- Files {
1730- directory: "www/img/"
1731- filter: "*"
1732- }
1733- Files {
1734- directory: "www/css/"
1735- filter: "*"
1736- }
1737- Files {
1738- directory: "www/js/"
1739- filter: "*"
1740- }
1741- Files {
1742- directory: "tests/"
1743- filter: "*"
1744- }
1745- Files {
1746- directory: "debian"
1747- filter: "*"
1748- }
1749- /* List of plugin directories passed to QML runtime */
1750- importPaths: [ "." ,"/usr/bin","/usr/lib/x86_64-linux-gnu/qt5/qml" ]
1751-}
1752-
1753
1754=== added file 'examples/customtheme/manifest.json.in'
1755--- examples/customtheme/manifest.json.in 1970-01-01 00:00:00 +0000
1756+++ examples/customtheme/manifest.json.in 2016-04-04 04:42:19 +0000
1757@@ -0,0 +1,15 @@
1758+{
1759+ "name": "customtheme.zsombi",
1760+ "description": "Example application of the Ubuntu UI Toolkit - Jokes",
1761+ "architecture": "@CLICK_ARCH@",
1762+ "title": "Jokes",
1763+ "hooks": {
1764+ "customtheme": {
1765+ "apparmor": "customtheme.apparmor",
1766+ "desktop": "customtheme.desktop"
1767+ }
1768+ },
1769+ "version": "0.1",
1770+ "maintainer": "Zsombor Egri <zsombor.egri@canonical.com>",
1771+ "framework": "ubuntu-sdk-15.04"
1772+}
1773
1774=== added file 'examples/examples.pro'
1775--- examples/examples.pro 1970-01-01 00:00:00 +0000
1776+++ examples/examples.pro 2016-04-04 04:42:19 +0000
1777@@ -0,0 +1,9 @@
1778+TEMPLATE = subdirs
1779+
1780+SUBDIRS += \
1781+ ubuntu-ui-toolkit-gallery\
1782+ locale \
1783+ jokes \
1784+ unit-converter \
1785+ calculator \
1786+ customtheme
1787
1788=== removed file 'examples/examples.pro'
1789--- examples/examples.pro 2015-05-05 16:23:29 +0000
1790+++ examples/examples.pro 1970-01-01 00:00:00 +0000
1791@@ -1,9 +0,0 @@
1792-TEMPLATE = subdirs
1793-
1794-SUBDIRS += \
1795- ubuntu-ui-toolkit-gallery\
1796- locale \
1797- jokes \
1798- unit-converter \
1799- calculator \
1800- customtheme
1801
1802=== added file 'examples/jokes/jokes.apparmor'
1803--- examples/jokes/jokes.apparmor 1970-01-01 00:00:00 +0000
1804+++ examples/jokes/jokes.apparmor 2016-04-04 04:42:19 +0000
1805@@ -0,0 +1,7 @@
1806+{
1807+ "policy_groups": [
1808+ "networking",
1809+ "audio"
1810+ ],
1811+ "policy_version": 1.3
1812+}
1813
1814=== modified file 'examples/jokes/jokes.desktop'
1815--- examples/jokes/jokes.desktop 2013-05-07 10:33:22 +0000
1816+++ examples/jokes/jokes.desktop 2016-04-04 04:42:19 +0000
1817@@ -1,8 +1,11 @@
1818 [Desktop Entry]
1819-Name=converter
1820-Comment=My project description
1821-Exec=/usr/bin/qmlscene $@ /usr/lib/ubuntu-ui-toolkit/examples/jokes/jokes.qml
1822+Name=Jokes
1823+Exec=qmlscene $@ jokes.qml
1824 Icon=qmlscene
1825 Terminal=false
1826 Type=Application
1827 X-Ubuntu-Touch=true
1828+X-Ubuntu-Gettext-Domain=com.ubuntu.developer.bzoltan.jokes
1829+Icon=jokes.png
1830+
1831+
1832
1833=== added file 'examples/jokes/jokes.png'
1834Binary files examples/jokes/jokes.png 1970-01-01 00:00:00 +0000 and examples/jokes/jokes.png 2016-04-04 04:42:19 +0000 differ
1835=== modified file 'examples/jokes/jokes.pro'
1836--- examples/jokes/jokes.pro 2015-06-15 08:53:40 +0000
1837+++ examples/jokes/jokes.pro 2016-04-04 04:42:19 +0000
1838@@ -1,18 +1,43 @@
1839 TEMPLATE = subdirs
1840
1841-filetypes = qml png svg js jpg qmlproject desktop wav
1842-
1843-OTHER_FILES = ""
1844-
1845-for(filetype, filetypes) {
1846- OTHER_FILES += *.$$filetype
1847+#load Ubuntu specific features
1848+load(ubuntu-click)
1849+
1850+# specify the manifest file, this file is required for click
1851+# packaging and for the IDE to create runconfigurations
1852+UBUNTU_MANIFEST_FILE=manifest.json.in
1853+
1854+TARGET = jokes
1855+
1856+QML_FILES += $$files(*.qml,true) \
1857+ $$files(*.js,true)
1858+
1859+CONF_FILES += $${TARGET}.apparmor \
1860+ $${TARGET}.png \
1861+ $${TARGET}.wav
1862+
1863+OTHER_FILES += $${CONF_FILES} \
1864+ $${QML_FILES} \
1865+ $${TARGET}.desktop
1866+
1867+#specify where the qml/js files are installed to
1868+qml_files.path = /
1869+qml_files.files += $${QML_FILES}
1870+
1871+#specify where the config files are installed to
1872+config_files.path = /
1873+config_files.files += $${CONF_FILES}
1874+
1875+#install the desktop file, a translated version is
1876+#automatically created in the build directory
1877+desktop_file.path = /
1878+desktop_file.files = $${TARGET}.desktop
1879+desktop_file.CONFIG += no_check_exist
1880+
1881+exists($$PWD/../examples.pro) {
1882+ desktop_file.path = $$[QT_INSTALL_EXAMPLES]/ubuntu-ui-toolkit/examples/$${TARGET}
1883+ config_files.path = $$[QT_INSTALL_EXAMPLES]/ubuntu-ui-toolkit/examples/$${TARGET}
1884+ qml_files.path = $$[QT_INSTALL_EXAMPLES]/ubuntu-ui-toolkit/examples/$${TARGET}
1885 }
1886
1887-desktop_files.path = $$[QT_INSTALL_EXAMPLES]/ubuntu-ui-toolkit/examples/jokes
1888-desktop_files.files = jokes.desktop
1889-
1890-other_files.path = $$[QT_INSTALL_EXAMPLES]/ubuntu-ui-toolkit/examples/jokes
1891-other_files.files = $$OTHER_FILES
1892-
1893-INSTALLS += other_files desktop_files
1894-
1895+INSTALLS+=config_files qml_files desktop_file
1896
1897=== modified file 'examples/jokes/jokes.qml'
1898--- examples/jokes/jokes.qml 2015-09-21 14:44:13 +0000
1899+++ examples/jokes/jokes.qml 2016-04-04 04:42:19 +0000
1900@@ -84,7 +84,7 @@
1901
1902 SoundEffect {
1903 id: laugh
1904- source: "laugh.wav"
1905+ source: "jokes.wav"
1906 }
1907
1908 UbuntuShape {
1909
1910=== removed file 'examples/jokes/jokes.qmlproject'
1911--- examples/jokes/jokes.qmlproject 2013-05-06 16:24:50 +0000
1912+++ examples/jokes/jokes.qmlproject 1970-01-01 00:00:00 +0000
1913@@ -1,31 +0,0 @@
1914-/* File generated by Qt Creator (with Ubuntu Plugin), version 2.7.0 */
1915-
1916-import QmlProject 1.1
1917-
1918-Project {
1919- mainFile: "jokes.qml"
1920-
1921- /* Include .qml, .js, and image files from current directory and subdirectories */
1922- QmlFiles {
1923- directory: "."
1924- }
1925- JavaScriptFiles {
1926- directory: "."
1927- }
1928- ImageFiles {
1929- directory: "."
1930- }
1931- Files {
1932- filter: "*.desktop"
1933- }
1934- Files {
1935- directory: "html"
1936- filter: "*"
1937- }
1938- Files {
1939- directory: "debian"
1940- filter: "*"
1941- }
1942- /* List of plugin directories passed to QML runtime */
1943- importPaths: [ "." ,"/usr/bin","/usr/lib/*/qt5/qml" ]
1944-}
1945
1946=== renamed file 'examples/jokes/laugh.wav' => 'examples/jokes/jokes.wav'
1947=== added file 'examples/jokes/manifest.json.in'
1948--- examples/jokes/manifest.json.in 1970-01-01 00:00:00 +0000
1949+++ examples/jokes/manifest.json.in 2016-04-04 04:42:19 +0000
1950@@ -0,0 +1,15 @@
1951+{
1952+ "name": "jokes.bzoltan",
1953+ "description": "Example application of the Ubuntu UI Toolkit - Jokes",
1954+ "architecture": "@CLICK_ARCH@",
1955+ "title": "Jokes",
1956+ "hooks": {
1957+ "jokes": {
1958+ "apparmor": "jokes.apparmor",
1959+ "desktop": "jokes.desktop"
1960+ }
1961+ },
1962+ "version": "0.1",
1963+ "maintainer": "Zoltán Balogh <zoltan@bakter.hu>",
1964+ "framework": "ubuntu-sdk-15.04"
1965+}
1966
1967=== added file 'examples/locale/locale.apparmor'
1968--- examples/locale/locale.apparmor 1970-01-01 00:00:00 +0000
1969+++ examples/locale/locale.apparmor 2016-04-04 04:42:19 +0000
1970@@ -0,0 +1,8 @@
1971+{
1972+ "policy_groups": [
1973+ ],
1974+ "policy_version": 1.3
1975+}
1976+
1977+
1978+
1979
1980=== modified file 'examples/locale/locale.desktop'
1981--- examples/locale/locale.desktop 2013-05-07 10:33:22 +0000
1982+++ examples/locale/locale.desktop 2016-04-04 04:42:19 +0000
1983@@ -1,8 +1,9 @@
1984 [Desktop Entry]
1985 Name=Locale
1986 Comment=My project description
1987-Exec=/usr/bin/qmlscene $@ /usr/lib/ubuntu-ui-toolkit/examples/locale/locale.qml
1988+Exec=qmlscene $@ locale.qml
1989 Icon=qmlscene
1990 Terminal=false
1991 Type=Application
1992 X-Ubuntu-Touch=true
1993+X-Ubuntu-Gettext-Domain=com.ubuntu.developer.bzoltan.locale
1994
1995=== added file 'examples/locale/locale.png'
1996Binary files examples/locale/locale.png 1970-01-01 00:00:00 +0000 and examples/locale/locale.png 2016-04-04 04:42:19 +0000 differ
1997=== modified file 'examples/locale/locale.pro'
1998--- examples/locale/locale.pro 2015-06-15 13:55:18 +0000
1999+++ examples/locale/locale.pro 2016-04-04 04:42:19 +0000
2000@@ -1,19 +1,42 @@
2001-TEMPLATE = aux
2002-
2003-filetypes = qml png svg js jpg qmlproject desktop
2004-
2005-OTHER_FILES = ""
2006-
2007-for(filetype, filetypes) {
2008- OTHER_FILES += *.$$filetype
2009+TEMPLATE = subdirs
2010+
2011+#load Ubuntu specific features
2012+load(ubuntu-click)
2013+
2014+# specify the manifest file, this file is required for click
2015+# packaging and for the IDE to create runconfigurations
2016+UBUNTU_MANIFEST_FILE=manifest.json.in
2017+
2018+TARGET = locale
2019+
2020+QML_FILES += $$files(*.qml,true) \
2021+ $$files(*.js,true)
2022+
2023+CONF_FILES += $${TARGET}.apparmor \
2024+ $${TARGET}.png
2025+
2026+OTHER_FILES += $${CONF_FILES} \
2027+ $${QML_FILES} \
2028+ $${TARGET}.desktop
2029+
2030+#specify where the qml/js files are installed to
2031+qml_files.path = /
2032+qml_files.files += $${QML_FILES}
2033+
2034+#specify where the config files are installed to
2035+config_files.path = /
2036+config_files.files += $${CONF_FILES}
2037+
2038+#install the desktop file, a translated version is
2039+#automatically created in the build directory
2040+desktop_file.path = /
2041+desktop_file.files = $${TARGET}.desktop
2042+desktop_file.CONFIG += no_check_exist
2043+
2044+exists($$PWD/../examples.pro) {
2045+ desktop_file.path = $$[QT_INSTALL_EXAMPLES]/ubuntu-ui-toolkit/examples/$${TARGET}
2046+ config_files.path = $$[QT_INSTALL_EXAMPLES]/ubuntu-ui-toolkit/examples/$${TARGET}
2047+ qml_files.path = $$[QT_INSTALL_EXAMPLES]/ubuntu-ui-toolkit/examples/$${TARGET}
2048 }
2049
2050-
2051-desktop_files.path = $$[QT_INSTALL_EXAMPLES]/ubuntu-ui-toolkit/examples/locale
2052-desktop_files.files = locale.desktop
2053-
2054-other_files.path = $$[QT_INSTALL_EXAMPLES]/ubuntu-ui-toolkit/examples/locale
2055-other_files.files = $$OTHER_FILES
2056-
2057-INSTALLS += other_files desktop_files
2058-
2059+INSTALLS+=config_files qml_files desktop_file
2060
2061=== removed file 'examples/locale/locale.qmlproject'
2062--- examples/locale/locale.qmlproject 2013-05-02 00:01:27 +0000
2063+++ examples/locale/locale.qmlproject 1970-01-01 00:00:00 +0000
2064@@ -1,31 +0,0 @@
2065-/* File generated by Qt Creator (with Ubuntu Plugin), version 2.7.0 */
2066-
2067-import QmlProject 1.1
2068-
2069-Project {
2070- mainFile: "locale.qml"
2071-
2072- /* Include .qml, .js, and image files from current directory and subdirectories */
2073- QmlFiles {
2074- directory: "."
2075- }
2076- JavaScriptFiles {
2077- directory: "."
2078- }
2079- ImageFiles {
2080- directory: "."
2081- }
2082- Files {
2083- filter: "*.desktop"
2084- }
2085- Files {
2086- directory: "html"
2087- filter: "*"
2088- }
2089- Files {
2090- directory: "debian"
2091- filter: "*"
2092- }
2093- /* List of plugin directories passed to QML runtime */
2094- importPaths: [ "." ,"/usr/bin","/usr/lib/i386-linux-gnu/qt5/qml" ]
2095-}
2096
2097=== added file 'examples/locale/manifest.json.in'
2098--- examples/locale/manifest.json.in 1970-01-01 00:00:00 +0000
2099+++ examples/locale/manifest.json.in 2016-04-04 04:42:19 +0000
2100@@ -0,0 +1,15 @@
2101+{
2102+ "name": "locale.bzoltan",
2103+ "description": "Example application of the Ubuntu UI Toolkit - Locale",
2104+ "architecture": "@CLICK_ARCH@",
2105+ "title": "Locale",
2106+ "hooks": {
2107+ "locale": {
2108+ "apparmor": "locale.apparmor",
2109+ "desktop": "locale.desktop"
2110+ }
2111+ },
2112+ "version": "0.1",
2113+ "maintainer": "Zoltán Balogh <zoltan@bakter.hu>",
2114+ "framework": "ubuntu-sdk-15.04"
2115+}
2116
2117=== modified file 'examples/ubuntu-ui-toolkit-gallery/BottomEdgePage.qml'
2118--- examples/ubuntu-ui-toolkit-gallery/BottomEdgePage.qml 2016-01-13 16:07:58 +0000
2119+++ examples/ubuntu-ui-toolkit-gallery/BottomEdgePage.qml 2016-04-04 04:42:19 +0000
2120@@ -36,7 +36,7 @@
2121 spacing: units.gu(1)
2122 CheckBox {
2123 id: contentToLayout
2124- text: i18n.tr("push content into the layout")
2125+ text: i18n.tr("push content into the column")
2126 enabled: bottomEdge.hint.status >= BottomEdgeHint.Active
2127 }
2128 Label {
2129@@ -52,20 +52,38 @@
2130 className: "BottomEdge"
2131
2132 TemplateRow {
2133+ title: i18n.tr("Content")
2134+ Row {
2135+ spacing: units.gu(1)
2136+ CheckBox {
2137+ id: preloadContent
2138+ text: i18n.tr("preload content")
2139+ checked: bottomEdge.preloadContent
2140+ onTriggered: bottomEdge.preloadContent = checked
2141+ }
2142+ Label {
2143+ text: preloadContent.text
2144+ anchors.verticalCenter: preloadContent.verticalCenter
2145+ }
2146+ }
2147+ }
2148+
2149+ TemplateFlow {
2150 title: i18n.tr("Top")
2151 Slider {
2152 id: bottomEdgeHeight
2153+ width: Math.min(units.gu(30), parent.width)
2154 maximumValue: page.height
2155 value: bottomEdge.height
2156 onValueChanged: bottomEdge.height = value
2157 }
2158 }
2159
2160- TemplateRow {
2161+ TemplateFlow {
2162 title: i18n.tr("Regions")
2163 Slider {
2164 id: regionCount
2165- width: units.gu(20)
2166+ width: Math.min(units.gu(20), parent.width)
2167 maximumValue: 3.0
2168 live: true
2169 }
2170@@ -133,12 +151,28 @@
2171 enabled: regionConfig.model >= 1
2172 to: 0.3
2173 property color baseColor: UbuntuColors.silk
2174+ contentComponent: Rectangle {
2175+ PageHeader {
2176+ title: i18n.tr("CustomRegion #1")
2177+ }
2178+ width: bottomEdge.width - units.gu(10)
2179+ height: bottomEdge.height
2180+ color: UbuntuColors.blue
2181+ }
2182 },
2183 BottomEdgeRegion {
2184 objectName: "CustomRegion2"
2185 enabled: regionConfig.model >= 2
2186 from: 0.3
2187 to: 0.6
2188+ contentComponent: Rectangle {
2189+ PageHeader {
2190+ title: i18n.tr("CustomRegion #2")
2191+ }
2192+ width: bottomEdge.width - units.gu(30)
2193+ height: bottomEdge.height
2194+ color: UbuntuColors.red
2195+ }
2196 },
2197 BottomEdgeRegion {
2198 objectName: "CustomRegion3"
2199
2200=== modified file 'examples/ubuntu-ui-toolkit-gallery/MainPage.qml'
2201--- examples/ubuntu-ui-toolkit-gallery/MainPage.qml 2015-12-21 20:17:16 +0000
2202+++ examples/ubuntu-ui-toolkit-gallery/MainPage.qml 2016-04-04 04:42:19 +0000
2203@@ -117,7 +117,10 @@
2204 // Used by Autopilot
2205 property string text: label
2206 onClicked: widgetList.currentIndex = index
2207+ //follow ListItemLayout size
2208+ height: layout.height + (divider.visible ? divider.height : 0)
2209 ListItemLayout {
2210+ id: layout
2211 title.text: label
2212 ProgressionSlot {}
2213 }
2214
2215=== modified file 'examples/ubuntu-ui-toolkit-gallery/Template.qml'
2216--- examples/ubuntu-ui-toolkit-gallery/Template.qml 2016-01-13 16:14:08 +0000
2217+++ examples/ubuntu-ui-toolkit-gallery/Template.qml 2016-04-04 04:42:19 +0000
2218@@ -34,19 +34,16 @@
2219 }
2220
2221 ScrollView {
2222- //anchors.fill: parent
2223- //anchors.topMargin: template.header.flickable ? 0 : template.header.height
2224 objectName: "TemplateScrollView"
2225 anchors {
2226 fill: parent
2227 topMargin: template.header.flickable ? 0 : template.header.height
2228 }
2229+
2230 Flickable {
2231 id: templateFlickable
2232 objectName: "TemplateFlickable"
2233 anchors.fill: parent
2234- topMargin: units.gu(2)
2235- bottomMargin: units.gu(2)
2236 contentHeight: column.height
2237 interactive: contentHeight > height
2238 Column {
2239
2240=== modified file 'examples/ubuntu-ui-toolkit-gallery/ubuntu-ui-toolkit-gallery.pro'
2241--- examples/ubuntu-ui-toolkit-gallery/ubuntu-ui-toolkit-gallery.pro 2016-01-25 15:25:25 +0000
2242+++ examples/ubuntu-ui-toolkit-gallery/ubuntu-ui-toolkit-gallery.pro 2016-04-04 04:42:19 +0000
2243@@ -2,7 +2,7 @@
2244
2245 SUBDIRS += po
2246
2247-filetypes = qml png svg js jpg qmlproject desktop
2248+filetypes = qml png svg js jpg pro desktop
2249
2250 OTHER_FILES = ""
2251
2252
2253=== removed file 'examples/ubuntu-ui-toolkit-gallery/ubuntu-ui-toolkit-gallery.qmlproject'
2254--- examples/ubuntu-ui-toolkit-gallery/ubuntu-ui-toolkit-gallery.qmlproject 2013-06-27 14:24:02 +0000
2255+++ examples/ubuntu-ui-toolkit-gallery/ubuntu-ui-toolkit-gallery.qmlproject 1970-01-01 00:00:00 +0000
2256@@ -1,31 +0,0 @@
2257-/* File generated by Qt Creator (with Ubuntu Plugin), version 2.7.0 */
2258-
2259-import QmlProject 1.1
2260-
2261-Project {
2262- mainFile: "ubuntu-ui-toolkit-gallery.qml"
2263-
2264- /* Include .qml, .js, and image files from current directory and subdirectories */
2265- QmlFiles {
2266- directory: "."
2267- }
2268- JavaScriptFiles {
2269- directory: "."
2270- }
2271- ImageFiles {
2272- directory: "."
2273- }
2274- Files {
2275- filter: "*.desktop"
2276- }
2277- Files {
2278- directory: "html"
2279- filter: "*"
2280- }
2281- Files {
2282- directory: "debian"
2283- filter: "*"
2284- }
2285- /* List of plugin directories passed to QML runtime */
2286- importPaths: [ "." ,"/usr/bin","/usr/lib/i386-linux-gnu/qt5/qml" ]
2287-}
2288
2289=== added file 'examples/unit-converter/manifest.json.in'
2290--- examples/unit-converter/manifest.json.in 1970-01-01 00:00:00 +0000
2291+++ examples/unit-converter/manifest.json.in 2016-04-04 04:42:19 +0000
2292@@ -0,0 +1,15 @@
2293+{
2294+ "name": "unit-converter.bzoltan",
2295+ "description": "Example application of the Ubuntu UI Toolkit - Unit converter",
2296+ "architecture": "@CLICK_ARCH@",
2297+ "title": "Unit Converter",
2298+ "hooks": {
2299+ "unit-converter": {
2300+ "apparmor": "unit-converter.apparmor",
2301+ "desktop": "unit-converter.desktop"
2302+ }
2303+ },
2304+ "version": "0.1",
2305+ "maintainer": "Zoltán Balogh <zoltan@bakter.hu>",
2306+ "framework": "ubuntu-sdk-15.04"
2307+}
2308
2309=== added file 'examples/unit-converter/unit-converter.apparmor'
2310--- examples/unit-converter/unit-converter.apparmor 1970-01-01 00:00:00 +0000
2311+++ examples/unit-converter/unit-converter.apparmor 2016-04-04 04:42:19 +0000
2312@@ -0,0 +1,8 @@
2313+{
2314+ "policy_groups": [
2315+ ],
2316+ "policy_version": 1.3
2317+}
2318+
2319+
2320+
2321
2322=== modified file 'examples/unit-converter/unit-converter.desktop'
2323--- examples/unit-converter/unit-converter.desktop 2013-05-07 10:33:22 +0000
2324+++ examples/unit-converter/unit-converter.desktop 2016-04-04 04:42:19 +0000
2325@@ -1,8 +1,9 @@
2326 [Desktop Entry]
2327-Name=converter
2328+Name=unit-converter
2329 Comment=My project description
2330-Exec=/usr/bin/qmlscene $@ /usr/lib/ubuntu-ui-toolkit/examples/unit-converter/unit-converter.qml
2331+Exec=qmlscene $@ unit-converter.qml
2332 Icon=qmlscene
2333 Terminal=false
2334 Type=Application
2335 X-Ubuntu-Touch=true
2336+X-Ubuntu-Gettext-Domain=com.ubuntu.developer.bzoltan.unit-converter
2337
2338=== added file 'examples/unit-converter/unit-converter.png'
2339Binary files examples/unit-converter/unit-converter.png 1970-01-01 00:00:00 +0000 and examples/unit-converter/unit-converter.png 2016-04-04 04:42:19 +0000 differ
2340=== modified file 'examples/unit-converter/unit-converter.pro'
2341--- examples/unit-converter/unit-converter.pro 2015-06-15 08:53:40 +0000
2342+++ examples/unit-converter/unit-converter.pro 2016-04-04 04:42:19 +0000
2343@@ -1,19 +1,42 @@
2344-TEMPLATE = aux
2345-
2346-filetypes = qml png svg js jpg qmlproject desktop
2347-
2348-OTHER_FILES = ""
2349-
2350-for(filetype, filetypes) {
2351- OTHER_FILES += *.$$filetype
2352+TEMPLATE = subdirs
2353+
2354+#load Ubuntu specific features
2355+load(ubuntu-click)
2356+
2357+# specify the manifest file, this file is required for click
2358+# packaging and for the IDE to create runconfigurations
2359+UBUNTU_MANIFEST_FILE=manifest.json.in
2360+
2361+TARGET = unit-converter
2362+
2363+QML_FILES += $$files(*.qml,true) \
2364+ $$files(*.js,true)
2365+
2366+CONF_FILES += $${TARGET}.apparmor \
2367+ $${TARGET}.png
2368+
2369+OTHER_FILES += $${CONF_FILES} \
2370+ $${QML_FILES} \
2371+ $${TARGET}.desktop
2372+
2373+#specify where the qml/js files are installed to
2374+qml_files.path = /
2375+qml_files.files += $${QML_FILES}
2376+
2377+#specify where the config files are installed to
2378+config_files.path = /
2379+config_files.files += $${CONF_FILES}
2380+
2381+#install the desktop file, a translated version is
2382+#automatically created in the build directory
2383+desktop_file.path = /
2384+desktop_file.files = $${TARGET}.desktop
2385+desktop_file.CONFIG += no_check_exist
2386+
2387+exists($$PWD/../examples.pro) {
2388+ desktop_file.path = $$[QT_INSTALL_EXAMPLES]/ubuntu-ui-toolkit/examples/$${TARGET}
2389+ config_files.path = $$[QT_INSTALL_EXAMPLES]/ubuntu-ui-toolkit/examples/$${TARGET}
2390+ qml_files.path = $$[QT_INSTALL_EXAMPLES]/ubuntu-ui-toolkit/examples/$${TARGET}
2391 }
2392
2393-
2394-desktop_files.path = $$[QT_INSTALL_EXAMPLES]/ubuntu-ui-toolkit/examples/unit-converter
2395-desktop_files.files = unit-converter.desktop
2396-
2397-other_files.path = $$[QT_INSTALL_EXAMPLES]/ubuntu-ui-toolkit/examples/unit-converter
2398-other_files.files = $$OTHER_FILES
2399-
2400-INSTALLS += other_files desktop_files
2401-
2402+INSTALLS+=config_files qml_files desktop_file
2403
2404=== modified file 'examples/unit-converter/unit-converter.qml'
2405--- examples/unit-converter/unit-converter.qml 2015-09-21 14:44:13 +0000
2406+++ examples/unit-converter/unit-converter.qml 2016-04-04 04:42:19 +0000
2407@@ -25,20 +25,19 @@
2408 - i18n
2409 - units
2410 - Label
2411- - Tabs
2412- - Tab
2413+ - Loader
2414 - Page
2415- - ToolbarActions
2416+ - PageHeader
2417 - Action
2418 - TextField and
2419 - Button components
2420
2421 The application converts length and weight units between several metrics.
2422- Related units are grouped in the same page (Tab) and conversion happens when
2423+ Related units are grouped in the same page and conversion happens when
2424 pressing Enter/Return after entering a number in one of the input fields (i.e.
2425 accepting the entered text), or by pressing the "Convert" button.
2426
2427- The navigation between converter pages is provided by the Tabs component.
2428+ The navigation between converter pages is provided by the PageHeader component.
2429 */
2430
2431 MainView {
2432@@ -85,6 +84,42 @@
2433 Component {
2434 id: pageContent
2435 Page {
2436+ header: PageHeader {
2437+ title: "Ubuntu header"
2438+ leadingActionBar.actions: [
2439+ Action {
2440+ text: "Lengths"
2441+ onTriggered: {
2442+ if (status === Loader.Ready && item) {
2443+ item.parent = parent;
2444+ item.model = lengthModel;
2445+ header.title="Lengths"
2446+ }
2447+ }
2448+ },
2449+ Action {
2450+ text: "Weights"
2451+ onTriggered: {
2452+ if (status === Loader.Ready && item) {
2453+ item.parent = parent;
2454+ item.model = weightModel;
2455+ header.title="Weights"
2456+
2457+ }
2458+ }
2459+ }
2460+ ]
2461+ trailingActionBar.actions: [
2462+ Action {
2463+ objectName: "action"
2464+ iconName: "clear"
2465+ text: i18n.tr("Clear")
2466+ onTriggered: Converter.clear(converter)
2467+ }
2468+
2469+ ]
2470+ }
2471+
2472 // expose Repeater's model for reusability, so we can set it from
2473 // outside, when we build the tabs
2474 property alias model: converter.model
2475@@ -133,58 +168,25 @@
2476 font.pixelSize: FontUtils.sizeToPixels("large")
2477 height: units.gu(4)
2478 // on-the-fly conversion
2479- onTextChanged: if (activeFocus) Converter.convert(input, converter, index)
2480+ onTextChanged: if (activeFocus) Converter.convert(input, converter, index); else cursorPosition = 0
2481 onAccepted: Qt.inputMethod.hide()
2482 }
2483 }
2484 }
2485 }
2486 }
2487-
2488- head.actions: Action {
2489- objectName: "action"
2490- iconName: "clear"
2491- text: i18n.tr("Clear")
2492- onTriggered: Converter.clear(converter)
2493- }
2494- }
2495- }
2496-
2497- Tabs {
2498- id: tabs
2499-
2500- // First tab begins here
2501- Tab {
2502- objectName: "Tab1"
2503-
2504- title: i18n.tr("Lengths")
2505-
2506- // Tab content begins here
2507- page: Loader {
2508- sourceComponent: pageContent
2509- onStatusChanged: {
2510- if (status === Loader.Ready && item) {
2511- item.parent = parent;
2512- item.model = lengthModel;
2513- }
2514- }
2515- }
2516- }
2517-
2518- // Second tab begins here
2519- Tab {
2520- objectName: "Tab2"
2521-
2522- title: i18n.tr("Weights")
2523- page: Loader {
2524- sourceComponent: pageContent
2525- onStatusChanged: {
2526- if (status === Loader.Ready && item) {
2527- item.parent = parent;
2528- item.model = weightModel;
2529- }
2530- }
2531- }
2532- }
2533- }
2534+ }
2535+ }
2536+ Loader {
2537+ sourceComponent: pageContent
2538+ onStatusChanged: {
2539+ if (status === Loader.Ready && item) {
2540+ item.parent = parent;
2541+ item.model = lengthModel;
2542+ item.header.title="Lengths"
2543+ }
2544+
2545+ }
2546+ }
2547+
2548 }
2549
2550=== removed file 'examples/unit-converter/unit-converter.qmlproject'
2551--- examples/unit-converter/unit-converter.qmlproject 2013-05-06 16:24:50 +0000
2552+++ examples/unit-converter/unit-converter.qmlproject 1970-01-01 00:00:00 +0000
2553@@ -1,31 +0,0 @@
2554-/* File generated by Qt Creator (with Ubuntu Plugin), version 2.7.0 */
2555-
2556-import QmlProject 1.1
2557-
2558-Project {
2559- mainFile: "unit-converter.qml"
2560-
2561- /* Include .qml, .js, and image files from current directory and subdirectories */
2562- QmlFiles {
2563- directory: "."
2564- }
2565- JavaScriptFiles {
2566- directory: "."
2567- }
2568- ImageFiles {
2569- directory: "."
2570- }
2571- Files {
2572- filter: "*.desktop"
2573- }
2574- Files {
2575- directory: "html"
2576- filter: "*"
2577- }
2578- Files {
2579- directory: "debian"
2580- filter: "*"
2581- }
2582- /* List of plugin directories passed to QML runtime */
2583- importPaths: [ "." ,"/usr/bin","/usr/lib/*/qt5/qml" ]
2584-}
2585
2586=== renamed file 'export_modules_dir.sh' => 'export_qml_dir.sh'
2587--- export_modules_dir.sh 2016-01-20 14:34:16 +0000
2588+++ export_qml_dir.sh 2016-04-04 04:42:19 +0000
2589@@ -1,6 +1,6 @@
2590-#!/bin/bash
2591+#!/bin/sh
2592 #
2593-# Copyright 2012 - 2015 Canonical Ltd.
2594+# Copyright 2012 - 2016 Canonical Ltd.
2595 #
2596 # This program is free software; you can redistribute it and/or modify
2597 # it under the terms of the GNU Lesser General Public License as published by
2598@@ -15,11 +15,17 @@
2599 # along with this program. If not, see <http://www.gnu.org/licenses/>.
2600 #
2601
2602-. `dirname ${BASH_SOURCE[0]}`/build_paths.inc || return 1
2603+# Get the current script directory (compatible with Bash and ZSH)
2604+SCRIPT_DIR=`dirname ${BASH_SOURCE[0]-$0}`
2605+SCRIPT_DIR=`cd $SCRIPT_DIR && pwd`
2606+
2607+source "$SCRIPT_DIR/build_paths.inc" || return 1
2608 export QML_IMPORT_PATH=$BUILD_DIR/qml
2609 export QML2_IMPORT_PATH=$BUILD_DIR/qml
2610 export UBUNTU_UI_TOOLKIT_THEMES_PATH=$BUILD_DIR/qml
2611-export LD_LIBRARY_PATH=$BUILD_DIR/lib:$LD_LIBRARY_PATH
2612+UBUNTU_QML_ROOT=$BUILD_DIR/qml/Ubuntu
2613+UBUNTU_QML_DIRS=$UBUNTU_QML_ROOT/Components:$UBUNTU_QML_ROOT/Test:$UBUNTU_QML_ROOT/Layouts:$UBUNTU_QML_ROOT/PerformanceMetrics
2614+export LD_LIBRARY_PATH=$BUILD_DIR/lib:$UBUNTU_QML_DIRS$LD_LIBRARY_PATH
2615 /sbin/initctl set-env --global QML_IMPORT_PATH=$BUILD_DIR/qml
2616 /sbin/initctl set-env --global QML2_IMPORT_PATH=$BUILD_DIR/qml
2617 /sbin/initctl set-env --global UBUNTU_UI_TOOLKIT_THEMES_PATH=$BUILD_DIR/qml
2618
2619=== modified file 'run_tests.sh'
2620--- run_tests.sh 2015-01-30 11:58:40 +0000
2621+++ run_tests.sh 2016-04-04 04:42:19 +0000
2622@@ -15,7 +15,7 @@
2623 # along with this program. If not, see <http://www.gnu.org/licenses/>.
2624 #
2625
2626-source $PWD/export_modules_dir.sh
2627+source $PWD/export_qml_dir.sh
2628
2629 if [ ! -e $QML2_IMPORT_PATH/Ubuntu/Layouts/libUbuntuLayouts.so ]; then
2630 echo You need to build UITK before you can run Autopilot test cases!
2631
2632=== modified file 'src/Ubuntu/Components/1.3/AdaptivePageLayout.qml'
2633--- src/Ubuntu/Components/1.3/AdaptivePageLayout.qml 2016-02-24 06:40:54 +0000
2634+++ src/Ubuntu/Components/1.3/AdaptivePageLayout.qml 2016-04-04 04:42:19 +0000
2635@@ -122,7 +122,7 @@
2636
2637 AdaptivePageLayout {
2638 anchors.fill: parent
2639- primaryPageSource: page1
2640+ primaryPageSource: page1Component
2641 layouts: PageColumnsLayout {
2642 when: width > units.gu(80)
2643 // column #0
2644@@ -339,11 +339,14 @@
2645 */
2646 function addPageToNextColumn(sourcePage, page, properties) {
2647 var nextColumn = d.columnForPage(sourcePage) + 1;
2648- d.tree.prune(nextColumn);
2649+ var wrappers = d.tree.prune(nextColumn);
2650 return d.addPageToColumn(nextColumn, sourcePage, page, properties, function() {
2651 for (var i = nextColumn; i < d.columns; i++) {
2652 d.updatePageForColumn(i);
2653 }
2654+ for (var i in wrappers) {
2655+ wrappers[i].destroyObject();
2656+ }
2657 });
2658 }
2659
2660@@ -591,9 +594,7 @@
2661 if (newWrapper) {
2662 columnHolder.attachPage(newWrapper);
2663 }
2664- if (oldWrapper.canDestroy) {
2665- oldWrapper.destroyObject();
2666- }
2667+ oldWrapper.destroyObject();
2668 }
2669 }
2670
2671@@ -754,6 +755,19 @@
2672 property var page: pageWrapper ? pageWrapper.object : null
2673 property bool customHeader: page && page.hasOwnProperty("header") &&
2674 page.header
2675+ onCustomHeaderChanged: {
2676+ // do not change the holderBody anchors until the new page
2677+ // for the column has been set to prevent geometry changes in
2678+ // the current/previous page.
2679+ if (page) {
2680+ if (customHeader) {
2681+ holderBody.anchors.top = holderBody.parent.top;
2682+ } else {
2683+ holderBody.anchors.top = subHeader.bottom;
2684+ }
2685+ }
2686+ }
2687+
2688 onPageChanged: body.updateHeaderHeight(0)
2689 Connections {
2690 target: page
2691@@ -770,7 +784,7 @@
2692 id: holderBody
2693 objectName: parent.objectName + "Body"
2694 anchors {
2695- top: customHeader ? parent.top : subHeader.bottom
2696+ top: subHeader.bottom // updated in onCustomHeaderChanged
2697 bottom: parent.bottom
2698 left: parent.left
2699 right: parent.right
2700
2701=== modified file 'src/Ubuntu/Components/1.3/ScrollView.qml'
2702--- src/Ubuntu/Components/1.3/ScrollView.qml 2016-02-18 12:39:14 +0000
2703+++ src/Ubuntu/Components/1.3/ScrollView.qml 2016-04-04 04:42:19 +0000
2704@@ -30,6 +30,13 @@
2705 migrate to ScrollView, to ensure the UX is ready for convergent devices and is consistent with the
2706 rest of the platform.
2707
2708+ ScrollView wraps \l {Scrollbar}(s) in a view, and provides additional features such as:
2709+ \list
2710+ \li - Keyboard navigation and focus handling, for a complete convergent experience.
2711+ \li - Automatic position handling of vertical and horizontal scrollbars, preventing them from
2712+ overlapping one another when both on screen.
2713+ \endlist
2714+
2715 Adding scrollbars and keyboard input handling to a QML item is as simple as wrapping that item in a
2716 ScrollView, as shown in the following example:
2717
2718@@ -91,11 +98,6 @@
2719 */
2720 default property Item contentItem
2721
2722- /*! \internal */
2723- //property alias __horizontalScrollBar: scroller.horizontalScrollBar
2724- /*! \internal */
2725- //property alias __verticalScrollBar: scroller.verticalScrollBar
2726-
2727 Keys.enabled: true
2728 Keys.onLeftPressed: {
2729 if (horizontalScrollbar.__styleInstance !== null) {
2730@@ -156,37 +158,53 @@
2731 internal.flickableItem.anchors.fill = viewportItem
2732 }
2733
2734- children: Item {
2735- id: internal
2736-
2737- property Flickable flickableItem
2738- property real nonOverlayScrollbarMargin: verticalScrollbar.__styleInstance ? verticalScrollbar.__styleInstance.nonOverlayScrollbarMargin : 0
2739- //shortScrollingRation is used for arrow keys, longScrollingRatio is used for pgUp/pgDown
2740- //0.1 means we will scroll 10% of the *visible* flickable area
2741- property real shortScrollingRatio: __styleInstance ? __styleInstance.shortScrollingRatio : 0.1
2742- property real longScrollingRatio: __styleInstance ? __styleInstance.longScrollingRatio : 0.9
2743-
2744- //if the flickable is not coming from the user but from our internal Component...
2745- Binding {
2746- target: flickableItem
2747- when: contentItem !== flickableItem
2748- property: "contentHeight"
2749- value: contentItem ? contentItem.height : 0
2750- }
2751- Binding {
2752- target: flickableItem
2753- when: contentItem !== flickableItem
2754- property: "contentWidth"
2755- value: contentItem ? contentItem.width : 0
2756- }
2757-
2758- anchors.fill: parent
2759-
2760- Component {
2761- id: flickableComponent
2762- Flickable {}
2763- }
2764-
2765+ /*!
2766+ \qmlproperty Scrollbar ScrollView::horizontalScrollbar
2767+
2768+ This property holds the horizontal scrollbar used in the ScrollView.
2769+ It provides access to the scrollbar thus making it possible to change its properties or
2770+ completely replace it with a custom \l Scrollbar object.
2771+
2772+ This property defaults to an instance of \l Scrollbar.
2773+
2774+ \b NOTE: some \l Scrollbar properties are already handled by ScrollView, and their value
2775+ should hence not be overridden. These properties are:
2776+ \list
2777+ \li anchors margins, such as anchors.topMargin etc.
2778+ \li the parent Item
2779+ \li \l Scrollbar::flickableItem
2780+ \endlist
2781+ */
2782+ property Scrollbar horizontalScrollbar: Scrollbar {
2783+ objectName: "horizontalScrollbar"
2784+ align: Qt.AlignBottom
2785+ focus: false
2786+ }
2787+
2788+ /*!
2789+ \qmlproperty Scrollbar ScrollView::verticalScrollbar
2790+
2791+ This property holds the vertical scrollbar used in the ScrollView.
2792+ It provides access to the scrollbar thus making it possible to change its properties or
2793+ completely replace it with a custom \l Scrollbar object.
2794+
2795+ This property defaults to an instance of \l Scrollbar.
2796+
2797+ \b NOTE: some \l Scrollbar properties are already handled by ScrollView, and their value
2798+ should hence not be overridden. These properties are:
2799+ \list
2800+ \li anchors margins, such as anchors.topMargin etc.
2801+ \li the parent Item
2802+ \li \l Scrollbar::flickableItem
2803+ \endlist
2804+ */
2805+ property Scrollbar verticalScrollbar: Scrollbar {
2806+ objectName: "verticalScrollbar"
2807+ align: Qt.AlignTrailing
2808+ focus: false
2809+ }
2810+
2811+ children: [
2812 Item {
2813 id: viewportItem
2814 anchors.fill: parent
2815@@ -201,59 +219,128 @@
2816
2817 clip: true
2818 focus: true
2819- }
2820-
2821- Scrollbar {
2822- id: horizontalScrollbar
2823- objectName: "horizontalScrollbar"
2824- flickableItem: internal.flickableItem
2825- __viewport: viewportItem
2826- align: Qt.AlignBottom
2827- __buddyScrollbar: verticalScrollbar
2828- __alwaysOnScrollbars: false//alwaysOnScrollbars
2829- focus: false
2830- }
2831-
2832- Scrollbar {
2833- id: verticalScrollbar
2834- objectName: "verticalScrollbar"
2835- flickableItem: internal.flickableItem
2836- __viewport: viewportItem
2837- align: Qt.AlignTrailing
2838- __buddyScrollbar: horizontalScrollbar
2839- __alwaysOnScrollbars: false//alwaysOnScrollbars
2840- focus: false
2841- }
2842- //When you click outside of a child of the scrollview, this restores the focus to the ScrollView
2843- //Why is this needed?
2844- // Suppose the viewport has a child ScrollView (or another Item which handles some or all of the hw keys we handle).
2845- // Now, if that child is coded to set its focus to true when you tap on it (which is, for instance, what
2846- // StyledItem's activeFocusOnPress does), tapping on that child will set viewportItem.focus = false, because
2847- // that child is just another Item inside "root" and "root" is a FocusScope, and that's how FocusScope works.
2848- // At this point, we need something to restore the focus to the viewportItem once you tap on viewportItem, outside
2849- // any other child. And that's what the MouseArea below does.
2850- //
2851- //The alternative could be making the viewport a StyledItem and using activeFocusOnPress:true, but that wouldn't work
2852- //because it would make viewportItem a focus scope, and we don't want that, because at that point,
2853- //being in a similar situation as described above, we wouldn't be able to transfer the focus to viewportItem, because
2854- //being a focus scope means viewportItem would forward the focus to the one between its children who asked it most
2855- //recently
2856- MouseArea {
2857+ },
2858+
2859+ Item {
2860+ id: internal
2861 anchors.fill: parent
2862- onPressed: {
2863- //FIXME: we can't force focus on the viewport, this breaks text selection inside scrollview!
2864- //+ it still doesn't work in Sliders page, for yet unknown reasons
2865- //Without this we can't shift focus from a child ScrollView to a parent ScrollView
2866- //viewportItem.focus = true
2867-
2868- //activeFocusOnPress only works if *all* the parents have activeFocusOnPress enabled
2869- //Some applications (like messaging-app at the moment) have activeFocusOnPress:false on
2870- //the MainView, and that would make focusing the scrollview impossible. Hence we also
2871- //force it from QML side
2872- root.forceActiveFocus()
2873-
2874- mouse.accepted = false
2875+
2876+ property Flickable flickableItem
2877+ property real nonOverlayScrollbarMargin: verticalScrollbar.__styleInstance ? verticalScrollbar.__styleInstance.nonOverlayScrollbarMargin : 0
2878+ //shortScrollingRation is used for arrow keys, longScrollingRatio is used for pgUp/pgDown
2879+ //0.1 means we will scroll 10% of the *visible* flickable area
2880+ property real shortScrollingRatio: __styleInstance ? __styleInstance.shortScrollingRatio : 0.1
2881+ property real longScrollingRatio: __styleInstance ? __styleInstance.longScrollingRatio : 0.9
2882+
2883+ Component {
2884+ id: flickableComponent
2885+ Flickable {}
2886+ }
2887+
2888+ //if the flickable is not coming from the user but from our internal Component...
2889+ Binding {
2890+ target: flickableItem
2891+ when: contentItem !== flickableItem
2892+ property: "contentHeight"
2893+ value: contentItem ? contentItem.height : 0
2894+ }
2895+ Binding {
2896+ target: flickableItem
2897+ when: contentItem !== flickableItem
2898+ property: "contentWidth"
2899+ value: contentItem ? contentItem.width : 0
2900+ }
2901+
2902+ Binding {
2903+ when: root.verticalScrollbar
2904+ target: root.verticalScrollbar
2905+ property: "parent"
2906+ value: root
2907+ }
2908+ Binding {
2909+ when: root.horizontalScrollbar
2910+ target: root.horizontalScrollbar
2911+ property: "parent"
2912+ value: root
2913+ }
2914+
2915+ //The viewport MUST be set, when Scrollbar is used inside a ScrollView, because that is the
2916+ //item it will anchor to.
2917+ Binding {
2918+ //NOTE: we have to wait for the parent to be set before setting the viewport item or that
2919+ //will trigger anchoring errors
2920+ when: root.horizontalScrollbar && root.horizontalScrollbar.parent
2921+ target: root.horizontalScrollbar
2922+ property: "__viewport"
2923+ value: viewportItem
2924+ }
2925+ Binding {
2926+ when: root.verticalScrollbar && root.verticalScrollbar.parent
2927+ target: root.verticalScrollbar
2928+ property: "__viewport"
2929+ value: viewportItem
2930+ }
2931+
2932+ Binding {
2933+ //wait for viewport to be set, otherwise Scrollbar will try anchoring to flickableItem, which
2934+ //is not a parent or sibling (see definition of Scrollbar anchors) when Scrollbar is inside
2935+ //a ScrollView (it is a sibling usually when Scrollbar is used directly, without ScrollView)
2936+ when: root.horizontalScrollbar && root.horizontalScrollbar.__viewport
2937+ target: root.horizontalScrollbar
2938+ property: "flickableItem"
2939+ value: internal.flickableItem
2940+ }
2941+ Binding {
2942+ when: root.verticalScrollbar && root.verticalScrollbar.__viewport
2943+ target: root.verticalScrollbar
2944+ property: "flickableItem"
2945+ value: internal.flickableItem
2946+ }
2947+
2948+ Binding {
2949+ when: root.verticalScrollbar
2950+ target: root.verticalScrollbar
2951+ property: "__buddyScrollbar"
2952+ value: root.horizontalScrollbar
2953+ }
2954+ Binding {
2955+ when: root.horizontalScrollbar
2956+ target: root.horizontalScrollbar
2957+ property: "__buddyScrollbar"
2958+ value: root.verticalScrollbar
2959+ }
2960+
2961+ //When you click outside of a child of the scrollview, this restores the focus to the ScrollView
2962+ //Why is this needed?
2963+ // Suppose the viewport has a child ScrollView (or another Item which handles some or all of the hw keys we handle).
2964+ // Now, if that child is coded to set its focus to true when you tap on it (which is, for instance, what
2965+ // StyledItem's activeFocusOnPress does), tapping on that child will set viewportItem.focus = false, because
2966+ // that child is just another Item inside "root" and "root" is a FocusScope, and that's how FocusScope works.
2967+ // At this point, we need something to restore the focus to the viewportItem once you tap on viewportItem, outside
2968+ // any other child. And that's what the MouseArea below does.
2969+ //
2970+ //The alternative could be making the viewport a StyledItem and using activeFocusOnPress:true, but that wouldn't work
2971+ //because it would make viewportItem a focus scope, and we don't want that, because at that point,
2972+ //being in a similar situation as described above, we wouldn't be able to transfer the focus to viewportItem, because
2973+ //being a focus scope means viewportItem would forward the focus to the one between its children who asked it most
2974+ //recently
2975+ MouseArea {
2976+ anchors.fill: parent
2977+ onPressed: {
2978+ //FIXME: we can't force focus on the viewport, this breaks text selection inside scrollview!
2979+ //+ it still doesn't work in Sliders page, for yet unknown reasons
2980+ //Without this we can't shift focus from a child ScrollView to a parent ScrollView
2981+ //viewportItem.focus = true
2982+
2983+ //activeFocusOnPress only works if *all* the parents have activeFocusOnPress enabled
2984+ //Some applications (like messaging-app at the moment) have activeFocusOnPress:false on
2985+ //the MainView, and that would make focusing the scrollview impossible. Hence we also
2986+ //force it from QML side
2987+ root.forceActiveFocus()
2988+
2989+ mouse.accepted = false
2990+ }
2991 }
2992 }
2993- }
2994+ ]
2995 }
2996
2997=== modified file 'src/Ubuntu/Components/1.3/Scrollbar.qml'
2998--- src/Ubuntu/Components/1.3/Scrollbar.qml 2016-02-25 12:59:27 +0000
2999+++ src/Ubuntu/Components/1.3/Scrollbar.qml 2016-04-04 04:42:19 +0000
3000@@ -18,14 +18,19 @@
3001 import Ubuntu.Components 1.3 as Toolkit
3002
3003 /*!
3004- \qmltype ScrollBar
3005+ \qmltype Scrollbar
3006 \inqmlmodule Ubuntu.Components 1.1
3007 \ingroup ubuntu
3008- \brief The ScrollBar component provides scrolling functionality for
3009+ \brief The Scrollbar component provides scrolling functionality for
3010 scrollable views (i.e. Flickable, ListView).
3011
3012- The ScrollBar can be set to any flickable and has built-in anchoring setup
3013- to the attached flickable's front, rear, top or bottom. the scrollbar can
3014+ \b NOTE: the Scrollbar component was revamped for OTA9 and used for the implementation
3015+ of \l ScrollView. Apps targeting system version OTA9 (or newer) should use ScrollView instead
3016+ of Scrollbar, as it features convergent-ready features, such as (but not limited to)
3017+ keyboard input handling.
3018+
3019+ The Scrollbar can be set to any flickable and has built-in anchoring setup
3020+ to the attached flickable's front, rear, top or bottom. The scrollbar can
3021 also be aligned using anchors, however the built-in align functionality
3022 makes sure to have the proper alignemt applied based on theme and layout
3023 direction (RTL or LTR).
3024@@ -57,6 +62,43 @@
3025 }
3026 }
3027 \endqml
3028+
3029+ \section1 Vertical Scrollbar and Flickable behaviour
3030+
3031+ Since Flickable's topMargin and bottomMargin are modified by Ubuntu components
3032+ such as \l BottomEdgeHint and \l Header in their positioning logic, the Scrollbar component
3033+ uses the value of those properties to its top and bottom anchors margins, by default. This is
3034+ to prevent any overlap with BottomEdgeHint or Header (see \l {Vertical Scrollbar and Header behaviour}
3035+ for more info about that). In case you need to specify custom Flickable
3036+ content margins (note: we're talking about content margins, not anchors ones), you will also have to
3037+ override the top and bottom anchors margins of the Scrollbar accordingly.
3038+
3039+ \section1 Vertical Scrollbar and Header behaviour
3040+
3041+ The thumb of the Scrollbar should not move or resize unexpectedly. It would be confusing,
3042+ for instance, if it moved under the user's finger (or pointer) while he's dragging it.
3043+
3044+ Because the size and position of the thumb in a scrollbar is related to the size of the
3045+ trough (or track) it slides in, it is important that the trough does not resize or move while the
3046+ user is interacting with the component.
3047+
3048+ In the context of a \l Page with a \l Header that slides in and out dynamically when the user
3049+ flicks the surface (see \l {Header::flickable}), a vertical Scrollbar that is linked
3050+ to the same flickable surface as the Header behaves as described below:
3051+
3052+ \list
3053+ \li - when the Header is exposed, the Scrollbar component sits right below it, \
3054+ thus avoiding overlaps;
3055+
3056+ \li - when the Header hides due to the user either flicking the surface or dragging \
3057+ the thumb, the trough of the Scrollbar does not resize or move, thus avoiding \
3058+ unexpected changes in thumb's position or size. As a side effect, the space \
3059+ above the Scrollbar, previously occupied by Header, stays empty until the Header \
3060+ is exposed again.
3061+
3062+ \endlist
3063+ \br
3064+ This behaviour is intended and makes for a less confusing User Experience.
3065 */
3066
3067 Toolkit.StyledItem {
3068@@ -126,18 +168,26 @@
3069 //interactive scrollbar right below us (can happen with nested views)
3070 enabled: __interactive//&& __alwaysOnScrollbars
3071
3072- implicitWidth: internals.vertical ? units.gu(3) : flickableItem.width
3073- implicitHeight: !internals.vertical ? units.gu(3) : flickableItem.height
3074+ implicitWidth: internals.vertical ? units.gu(3) : (flickableItem ? flickableItem.width : 0)
3075+ implicitHeight: !internals.vertical ? units.gu(3) : (flickableItem ? flickableItem.height : 0)
3076
3077 anchors {
3078- left: internals.leftAnchor(__viewport ? __viewport : flickableItem)
3079+ left: (__viewport || flickableItem)
3080+ ? internals.leftAnchor(__viewport ? __viewport : flickableItem)
3081+ : undefined
3082 leftMargin: internals.leftAnchorMargin()
3083- right: internals.rightAnchor(__viewport ? __viewport : flickableItem)
3084+ right: (__viewport || flickableItem)
3085+ ? internals.rightAnchor(__viewport ? __viewport : flickableItem)
3086+ : undefined
3087 rightMargin: internals.rightAnchorMargin()
3088- top: internals.topAnchor(__viewport ? __viewport : flickableItem)
3089- topMargin: internals.topAnchorMargin()
3090- bottom: internals.bottomAnchor(__viewport ? __viewport : flickableItem)
3091- bottomMargin: internals.bottomAnchorMargin()
3092+ top: (__viewport || flickableItem)
3093+ ? internals.topAnchor(__viewport ? __viewport : flickableItem)
3094+ : undefined
3095+ topMargin: (flickableItem ? flickableItem.topMargin : 0) + internals.topAnchorMargin()
3096+ bottom: (__viewport || flickableItem)
3097+ ? internals.bottomAnchor(__viewport ? __viewport : flickableItem)
3098+ : undefined
3099+ bottomMargin: (flickableItem ? flickableItem.bottomMargin : 0) + internals.bottomAnchorMargin()
3100 }
3101
3102 /*!
3103@@ -183,7 +233,6 @@
3104 && __buddyScrollbar.align === Qt.AlignLeading
3105 && __buddyScrollbar.__styleInstance.isScrollable)
3106 return __buddyScrollbar.__styleInstance.troughThicknessSteppersStyle
3107- //return buddyScrollbar.__styleInstance.indicatorThickness
3108 // *ELSE FALLTHROUGH*
3109 default:
3110 return 0
3111@@ -209,7 +258,6 @@
3112 && __buddyScrollbar.align === Qt.AlignTrailing
3113 && __buddyScrollbar.__styleInstance.isScrollable)
3114 return __buddyScrollbar.__styleInstance.troughThicknessSteppersStyle
3115- //return buddyScrollbar.__styleInstance.indicatorThickness
3116 // *ELSE FALLTHROUGH*
3117 default:
3118 return 0
3119@@ -234,7 +282,6 @@
3120 && __buddyScrollbar.align === Qt.AlignTop
3121 && __buddyScrollbar.__styleInstance.isScrollable)
3122 return __buddyScrollbar.__styleInstance.troughThicknessSteppersStyle
3123- //return buddyScrollbar.__styleInstance.indicatorThickness
3124 // *ELSE FALLTHROUGH*
3125
3126 default:
3127@@ -260,7 +307,6 @@
3128 && __buddyScrollbar.align === Qt.AlignBottom
3129 && __buddyScrollbar.__styleInstance.isScrollable)
3130 return __buddyScrollbar.__styleInstance.troughThicknessSteppersStyle
3131- //return buddyScrollbar.__styleInstance.indicatorThickness
3132 // *ELSE FALLTHROUGH*
3133 default:
3134 return 0
3135
3136=== modified file 'src/Ubuntu/Components/Pickers/1.2/DatePicker.qml'
3137--- src/Ubuntu/Components/Pickers/1.2/DatePicker.qml 2015-04-30 08:32:44 +0000
3138+++ src/Ubuntu/Components/Pickers/1.2/DatePicker.qml 2016-04-04 04:42:19 +0000
3139@@ -98,10 +98,10 @@
3140 \a minimum and \a maximum properties. The interval can be altered considering
3141 the following rules:
3142 \list
3143- \li - \a minimum must be less or equal than the \l date; if the \a date
3144+ \li \a minimum must be less or equal than the \l date; if the \a date
3145 value is less than the given \a minimum, the date will be set to
3146 the minimum's value
3147- \li - \a maximum value must be greater than the \a minimum, or invalid.
3148+ \li \a maximum value must be greater than the \a minimum, or invalid.
3149 When the maximum is smaller than the \l date, the \l date property
3150 will be updated to get the maximum value.
3151 When set to invalid date (see Date.getInvalidDate()), the upper
3152@@ -142,12 +142,12 @@
3153 The date picker consist of three pickers: year, month, and date. The exact
3154 contents of the month and date pickers depends on the available width:
3155 \list
3156- \li * full name for month, number and full day for date (“August” “28 Wednesday”)
3157- \li * otherwise full name for month, number and abbreviated day
3158+ \li full name for month, number and full day for date (“August” “28 Wednesday”)
3159+ \li otherwise full name for month, number and abbreviated day
3160 for date (“August” “28 Wed”);
3161- \li * otherwise full name for month, number for date (“August” “28”);
3162- \li * otherwise abbreviated name for month, number for date (“Aug” “28”).
3163- \li * otherwise number for month, number for date (“08” “28”).
3164+ \li otherwise full name for month, number for date (“August” “28”);
3165+ \li otherwise abbreviated name for month, number for date (“Aug” “28”).
3166+ \li otherwise number for month, number for date (“08” “28”).
3167 \endlist
3168
3169 \a{If the currently selected date becomes impossible due to year change (from a
3170
3171=== modified file 'src/Ubuntu/Components/Pickers/1.3/DatePicker.qml'
3172--- src/Ubuntu/Components/Pickers/1.3/DatePicker.qml 2015-09-28 14:36:54 +0000
3173+++ src/Ubuntu/Components/Pickers/1.3/DatePicker.qml 2016-04-04 04:42:19 +0000
3174@@ -98,10 +98,10 @@
3175 \a minimum and \a maximum properties. The interval can be altered considering
3176 the following rules:
3177 \list
3178- \li - \a minimum must be less or equal than the \l date; if the \a date
3179+ \li \a minimum must be less or equal than the \l date; if the \a date
3180 value is less than the given \a minimum, the date will be set to
3181 the minimum's value
3182- \li - \a maximum value must be greater than the \a minimum, or invalid.
3183+ \li \a maximum value must be greater than the \a minimum, or invalid.
3184 When the maximum is smaller than the \l date, the \l date property
3185 will be updated to get the maximum value.
3186 When set to invalid date (see Date.getInvalidDate()), the upper
3187@@ -142,12 +142,12 @@
3188 The date picker consist of three pickers: year, month, and date. The exact
3189 contents of the month and date pickers depends on the available width:
3190 \list
3191- \li * full name for month, number and full day for date (“August” “28 Wednesday”)
3192- \li * otherwise full name for month, number and abbreviated day
3193+ \li full name for month, number and full day for date (“August” “28 Wednesday”)
3194+ \li otherwise full name for month, number and abbreviated day
3195 for date (“August” “28 Wed”);
3196- \li * otherwise full name for month, number for date (“August” “28”);
3197- \li * otherwise abbreviated name for month, number for date (“Aug” “28”).
3198- \li * otherwise number for month, number for date (“08” “28”).
3199+ \li otherwise full name for month, number for date (“August” “28”);
3200+ \li otherwise abbreviated name for month, number for date (“Aug” “28”).
3201+ \li otherwise number for month, number for date (“08” “28”).
3202 \endlist
3203
3204 \a{If the currently selected date becomes impossible due to year change (from a
3205
3206=== modified file 'src/Ubuntu/Components/Popups/1.3/Dialog.qml'
3207--- src/Ubuntu/Components/Popups/1.3/Dialog.qml 2016-02-03 01:27:02 +0000
3208+++ src/Ubuntu/Components/Popups/1.3/Dialog.qml 2016-04-04 04:42:19 +0000
3209@@ -137,6 +137,68 @@
3210 */
3211 property alias contentHeight: foreground.height
3212
3213+ /*!
3214+ \qmlproperty ThemeSettings theme
3215+ \since Ubuntu.Components 1.3
3216+ Configure the theme of the Dialog foreground and all its subcomponents.
3217+ Example:
3218+ \qml
3219+ import QtQuick 2.4
3220+ import Ubuntu.Components 1.3
3221+ import Ubuntu.Components.Popups 1.3
3222+ MainView {
3223+ width: units.gu(40)
3224+ height: units.gu(71)
3225+
3226+ // make sure the main theme is Ambiance
3227+ theme.name: "Ubuntu.Components.Themes.Ambiance"
3228+
3229+ Component {
3230+ id: dialogComponent
3231+ Dialog {
3232+ id: dialog
3233+ title: "Input dialog"
3234+ // the dialog and its children will use SuruDark
3235+ theme: ThemeSettings {
3236+ name: "Ubuntu.Components.Themes.SuruDark"
3237+ }
3238+ TextField {
3239+ placeholderText: "enter text"
3240+ }
3241+ Button {
3242+ text: "Close"
3243+ onClicked: PopupUtils.close(dialog)
3244+ }
3245+ }
3246+ }
3247+
3248+ Button {
3249+ text: "Open dialog"
3250+ onClicked: PopupUtils.open(dialogComponent)
3251+ }
3252+ }
3253+ \endqml
3254+ \sa StyledItem::theme
3255+ */
3256+ property alias theme: foreground.theme
3257+
3258+ /*!
3259+ \qmlproperty string styleName
3260+ The style name of the foreground of the Dialog.
3261+ \since Ubuntu.Components 1.3
3262+ \sa StyledItem::styleName
3263+ */
3264+ property alias styleName: foreground.styleName
3265+
3266+ /*!
3267+ \qmlproperty Component style
3268+ The style of the foreground of the Dialog.
3269+ This property takes precedence over \l styleName
3270+ \since Ubuntu.Components 1.3
3271+ \sa StyledItem::style
3272+ */
3273+ property alias style: foreground.style
3274+
3275 __foreground: foreground
3276 __eventGrabber.enabled: modal
3277 __dimBackground: modal
3278
3279=== modified file 'src/Ubuntu/Components/Popups/1.3/Popover.qml'
3280--- src/Ubuntu/Components/Popups/1.3/Popover.qml 2015-12-22 14:42:59 +0000
3281+++ src/Ubuntu/Components/Popups/1.3/Popover.qml 2016-04-04 04:42:19 +0000
3282@@ -205,6 +205,30 @@
3283
3284 y: parent ? (parent.height - height) / 2 : 0
3285
3286+ /*!
3287+ \qmlproperty ThemeSettings theme
3288+ \since Ubuntu.Components 1.3
3289+ Configure the theme of the Popover foreground and all its subcomponents.
3290+ \sa StyledItem::theme, Dialog::theme
3291+ */
3292+ property alias theme: foreground.theme
3293+
3294+ /*!
3295+ \qmlproperty string styleName
3296+ The style name of the foreground of the Popover.
3297+ \since Ubuntu.Components 1.3
3298+ \sa StyledItem::styleName
3299+ */
3300+ property alias styleName: foreground.styleName
3301+
3302+ /*!
3303+ \qmlproperty Component style
3304+ The style of the foreground of the Popover.
3305+ This property takes precedence over \l styleName
3306+ \since Ubuntu.Components 1.3
3307+ \sa StyledItem::style
3308+ */
3309+ property alias style: foreground.style
3310 StyledItem {
3311 id: foreground
3312 objectName: "popover_foreground"
3313
3314=== modified file 'src/Ubuntu/Components/Themes/Ambiance/1.3/BottomEdgeHintStyle.qml'
3315--- src/Ubuntu/Components/Themes/Ambiance/1.3/BottomEdgeHintStyle.qml 2016-01-27 15:17:56 +0000
3316+++ src/Ubuntu/Components/Themes/Ambiance/1.3/BottomEdgeHintStyle.qml 2016-04-04 04:42:19 +0000
3317@@ -104,14 +104,17 @@
3318
3319 Icon {
3320 id: h1
3321- width: units.gu(2)
3322- height: width
3323+ width: units.gu(3)
3324+ height: units.gu(1.5)
3325 anchors {
3326 centerIn: parent
3327 topMargin: styledItem.height
3328 }
3329 name: "toolkit_bottom-edge-hint"
3330 color: foregroundColor
3331+
3332+ FocusShape {
3333+ }
3334 }
3335
3336 Rectangle {
3337@@ -128,6 +131,17 @@
3338 anchors.top: parent.top
3339 }
3340
3341+ FocusShape {
3342+ anchors {
3343+ fill: undefined
3344+ margins: 0
3345+ top: parent.top
3346+ bottom: parent.bottom
3347+ horizontalCenter: parent.horizontalCenter
3348+ }
3349+ // icon, spacing, label, margin on either side
3350+ width: icon.width + units.gu(1) + label.width + units.gu(0.46) * 2
3351+ }
3352 Row {
3353 anchors {
3354 top: parent.top
3355
3356=== modified file 'src/Ubuntu/Components/Themes/Ambiance/1.3/BottomEdgeStyle.qml'
3357--- src/Ubuntu/Components/Themes/Ambiance/1.3/BottomEdgeStyle.qml 2015-12-14 09:16:41 +0000
3358+++ src/Ubuntu/Components/Themes/Ambiance/1.3/BottomEdgeStyle.qml 2016-04-04 04:42:19 +0000
3359@@ -22,10 +22,12 @@
3360 //setup properties
3361 property BottomEdge bottomEdge: styledItem
3362 panel: panelItem
3363- contentItem: loader.item
3364 panelAnimation: panelBehavior
3365 revealThreshold: bottomEdge.hint.height + units.gu(2)
3366
3367+ //deprecated for now
3368+ contentItem: bottomEdge.contentItem
3369+
3370 // own styling properties
3371 property color backgroundColor: !panelItem.collapsing
3372 ? Qt.rgba(0, 0, 0, Math.min(0.25, (height - revealThreshold - panelItem.y) / (height - revealThreshold)))
3373@@ -54,7 +56,7 @@
3374 ? -(bottomEdge.height * bottomEdge.dragProgress)
3375 : 0
3376 }
3377- height: loader.item ? loader.item.height : 0
3378+ height: bottomEdge.contentItem ? bottomEdge.contentItem.height : 0
3379 color: panelColor
3380 opacity: bottomEdge.status >= BottomEdge.Revealed ? 1.0 : 0.0
3381
3382@@ -108,26 +110,5 @@
3383 GradientStop { position: 1.0; color: Qt.rgba(shadowColor.r, shadowColor.g, shadowColor.b, 0.1) }
3384 }
3385 }
3386-
3387- // content
3388- Loader {
3389- id: loader
3390- anchors.horizontalCenter: parent.horizontalCenter
3391- asynchronous: true
3392- source: bottomEdge.status > BottomEdge.Hidden ? bottomEdge.contentUrl : ""
3393- sourceComponent: bottomEdge.status > BottomEdge.Hidden ? bottomEdge.contentComponent : null
3394- onItemChanged: {
3395- if (item) {
3396- item.parent = panelItem;
3397- item.anchors.horizontalCenter = panelItem.horizontalCenter;
3398- }
3399- }
3400-
3401- Connections {
3402- target: bottomEdge
3403- onCommitStarted: loader.asynchronous = false
3404- onCommitCompleted: loader.asynchronous = true
3405- }
3406- }
3407 }
3408 }
3409
3410=== modified file 'src/Ubuntu/Components/Themes/Ambiance/1.3/DatePickerStyle.qml'
3411--- src/Ubuntu/Components/Themes/Ambiance/1.3/DatePickerStyle.qml 2016-02-10 16:33:02 +0000
3412+++ src/Ubuntu/Components/Themes/Ambiance/1.3/DatePickerStyle.qml 2016-04-04 04:42:19 +0000
3413@@ -32,7 +32,7 @@
3414 /*!
3415 Highlight color.
3416 */
3417- property color highlightColor: theme.palette.highlight.baseText
3418+ property color highlightColor: theme.palette.highlighted.baseText
3419 /*!
3420 Scale of the highlight item
3421 */
3422
3423=== modified file 'src/Ubuntu/Components/Themes/Ambiance/1.3/ListItemStyle.qml'
3424--- src/Ubuntu/Components/Themes/Ambiance/1.3/ListItemStyle.qml 2016-01-27 16:42:47 +0000
3425+++ src/Ubuntu/Components/Themes/Ambiance/1.3/ListItemStyle.qml 2016-04-04 04:42:19 +0000
3426@@ -79,6 +79,7 @@
3427 id: actionButton
3428 action: modelData
3429 enabled: action.enabled
3430+ activeFocusOnTab: false
3431 width: MathUtils.clamp(delegateLoader.item ? delegateLoader.item.width : 0, actionsRow.minItemWidth, actionsRow.maxItemWidth)
3432 anchors {
3433 top: parent ? parent.top : undefined
3434
3435=== modified file 'src/Ubuntu/Components/Themes/Ambiance/1.3/PageHeadStyle.qml'
3436--- src/Ubuntu/Components/Themes/Ambiance/1.3/PageHeadStyle.qml 2016-01-27 15:17:56 +0000
3437+++ src/Ubuntu/Components/Themes/Ambiance/1.3/PageHeadStyle.qml 2016-04-04 04:42:19 +0000
3438@@ -14,6 +14,7 @@
3439 * along with this program. If not, see <http://www.gnu.org/licenses/>.
3440 */
3441 import QtQuick 2.4
3442+import QtQuick.Window 2.0
3443 import Ubuntu.Components 1.3
3444 import Ubuntu.Components.Popups 1.3
3445 import Ubuntu.Components.Styles 1.3 as Style
3446@@ -21,7 +22,7 @@
3447 Style.PageHeadStyle {
3448 id: headerStyle
3449 objectName: "PageHeadStyle" // used in unit tests
3450- contentHeight: units.gu(6)
3451+ contentHeight: Screen.height > units.gu(50) ? units.gu(6) : units.gu(5)
3452 fontWeight: Font.Light
3453 textSize: Label.Large
3454 textLeftMargin: units.gu(2)
3455
3456=== modified file 'src/Ubuntu/Components/Themes/Ambiance/1.3/ScrollbarStyle.qml'
3457--- src/Ubuntu/Components/Themes/Ambiance/1.3/ScrollbarStyle.qml 2016-02-18 16:21:27 +0000
3458+++ src/Ubuntu/Components/Themes/Ambiance/1.3/ScrollbarStyle.qml 2016-04-04 04:42:19 +0000
3459@@ -121,10 +121,18 @@
3460
3461 //flickable helper properties
3462 property Flickable flickableItem: styledItem.flickableItem
3463- property real pageSize: (isVertical) ? (styledItem.flickableItem.height) : (styledItem.flickableItem.width)
3464- property real contentSize: (isVertical) ? styledItem.flickableItem.contentHeight : styledItem.flickableItem.contentWidth
3465- property real leadingContentMargin: isVertical ? styledItem.flickableItem.topMargin : styledItem.flickableItem.leftMargin
3466- property real trailingContentMargin: isVertical ? styledItem.flickableItem.bottomMargin : styledItem.flickableItem.rightMargin
3467+ property real pageSize: flickableItem
3468+ ? (isVertical ? flickableItem.height : flickableItem.width)
3469+ : 0
3470+ property real contentSize: flickableItem
3471+ ? (isVertical ? flickableItem.contentHeight : flickableItem.contentWidth)
3472+ : 0
3473+ property real leadingContentMargin: flickableItem
3474+ ? (isVertical ? flickableItem.topMargin : flickableItem.leftMargin)
3475+ : 0
3476+ property real trailingContentMargin: flickableItem
3477+ ? (isVertical ? flickableItem.bottomMargin : flickableItem.rightMargin)
3478+ : 0
3479 //this size includes content margins
3480 property real totalContentSize: contentSize + leadingContentMargin + trailingContentMargin
3481
3482@@ -271,7 +279,7 @@
3483
3484 //The total length of the path where the thumb can be positioned, from its min to its max value
3485 var draggableLength = scrollbar.__trough[propSize] - margin*2
3486- var maxPosRatio = 1.0 - scrollbar.flickableItem.visibleArea[propSizeRatio]
3487+ var maxPosRatio = 1.0 - (scrollbar.flickableItem ? scrollbar.flickableItem.visibleArea[propSizeRatio] : 1.0)
3488
3489 //Example with x/width, same applies to y/height
3490 //xPosition is in the range [0...1 - widthRatio]
3491@@ -282,7 +290,7 @@
3492 //the maxPosition is reached when xPosition becomes 1, and that never happens. To compensate that, we
3493 //scale xPosition by ( 1 / ( 1 - widthRatio) ). This way, when xPosition reaches its max ( 1 - widthRatio )
3494 //we get a multiplication factor of 1
3495- return MathUtils.clamp(1.0 / maxPosRatio * scrollbar.flickableItem.visibleArea[propPosRatio]
3496+ return MathUtils.clamp(1.0 / maxPosRatio * (scrollbar.flickableItem ? scrollbar.flickableItem.visibleArea[propPosRatio] : 1.0)
3497 * (draggableLength - scrollbar.__styleInstance.thumb[propSize]) + margin, min, max);
3498 }
3499
3500@@ -296,8 +304,8 @@
3501 THUMB CAN MOVE INTO! (which is what you want in 99.9% of the cases, for a scrollbar)
3502 */
3503 function sliderSize(scrollbar, min, max) {
3504- var sizeRatio = scrollbar.flickableItem.visibleArea[propSizeRatio];
3505- var posRatio = scrollbar.flickableItem.visibleArea[propPosRatio];
3506+ var sizeRatio = scrollbar.flickableItem ? scrollbar.flickableItem.visibleArea[propSizeRatio] : 1.0;
3507+ var posRatio = scrollbar.flickableItem ? scrollbar.flickableItem.visibleArea[propPosRatio] : 0.0;
3508
3509 //(sizeRatio * max) is the current ideal size, as recommended by Flickable visibleArea props
3510 var sizeUnderflow = (sizeRatio * max) < min ? min - (sizeRatio * max) : 0
3511
3512=== modified file 'src/Ubuntu/Components/Themes/Ambiance/1.3/SectionsStyle.qml'
3513--- src/Ubuntu/Components/Themes/Ambiance/1.3/SectionsStyle.qml 2016-02-26 10:13:15 +0000
3514+++ src/Ubuntu/Components/Themes/Ambiance/1.3/SectionsStyle.qml 2016-04-04 04:42:19 +0000
3515@@ -14,6 +14,7 @@
3516 * along with this program. If not, see <http://www.gnu.org/licenses/>.
3517 */
3518 import QtQuick 2.4
3519+import QtQuick.Window 2.2
3520 import Ubuntu.Components 1.3
3521 import QtGraphicalEffects 1.0
3522 import Ubuntu.Components.Private 1.3
3523@@ -22,7 +23,7 @@
3524 id: sectionsStyle
3525
3526 implicitWidth: sectionsListView.contentWidth + 2 * listViewContainer.listViewMargins
3527- implicitHeight: units.gu(4)
3528+ implicitHeight: Screen.height > units.gu(50) ? units.gu(4) : units.gu(3)
3529
3530 /*!
3531 The foreground color of unselected sections.
3532@@ -208,7 +209,7 @@
3533 font.weight: Font.Light
3534 anchors {
3535 baseline: underline.bottom
3536- baselineOffset: -units.gu(2)
3537+ baselineOffset: sectionsStyle.height < units.gu(4) ? -units.gu(1) : -units.gu(2)
3538 horizontalCenter: parent.horizontalCenter
3539 }
3540
3541@@ -235,6 +236,7 @@
3542 }
3543
3544 SmoothedAnimation {
3545+ objectName: "sections_scroll_animation"
3546 id: contentXAnim
3547 target: sectionsListView
3548 property: "contentX"
3549@@ -250,53 +252,52 @@
3550
3551 property real iconsDisabledOpacity: 0.3
3552
3553- property bool hoveringLeft: false
3554- property bool hoveringRight: false
3555-
3556- function checkHovering(mouse) {
3557- if (mouse.x < listViewContainer.listViewMargins) {
3558- if (!hoveringLeft) hoveringLeft = true;
3559- } else if (mouse.x > width - listViewContainer.listViewMargins) {
3560- if (!hoveringRight) hoveringRight = true;
3561- } else {
3562- hoveringLeft = false;
3563- hoveringRight = false;
3564- }
3565- }
3566-
3567 anchors.fill: parent
3568 hoverEnabled: true
3569
3570- onPositionChanged: checkHovering(mouse)
3571- onExited: {
3572- hoveringLeft = false;
3573- hoveringRight = false;
3574- }
3575+ property bool pressedLeft: false
3576+ property bool pressedRight: false
3577 onPressed: {
3578- if (!hoveringLeft && !hoveringRight) {
3579- mouse.accepted = false;
3580- }
3581+ pressedLeft = leftIcon.contains(mouse);
3582+ pressedRight = rightIcon.contains(mouse);
3583+ mouse.accepted = pressedLeft || pressedRight;
3584 }
3585 onClicked: {
3586 // positionViewAtIndex() does not provide animation
3587+ var scrollDirection = 0;
3588+ if (pressedLeft && leftIcon.contains(mouse)) {
3589+ scrollDirection = -1;
3590+ } else if (pressedRight && rightIcon.contains(mouse)) {
3591+ scrollDirection = 1;
3592+ } else {
3593+ // User pressed on the left or right icon, and then released inside of the
3594+ // MouseArea but outside of the icon that was pressed.
3595+ return;
3596+ }
3597 if (contentXAnim.running) contentXAnim.stop();
3598- var newContentX = sectionsListView.contentX + (sectionsListView.width * (hoveringLeft ? -1 : 1));
3599+ var newContentX = sectionsListView.contentX + (sectionsListView.width * scrollDirection);
3600 contentXAnim.from = sectionsListView.contentX;
3601 // make sure we don't overshoot bounds
3602 contentXAnim.to = MathUtils.clamp(
3603 newContentX,
3604- sectionsListView.originX,
3605+ 0.0, // estimation of originX is some times wrong when scrolling towards the beginning
3606 sectionsListView.originX + sectionsListView.contentWidth - sectionsListView.width);
3607 contentXAnim.start();
3608 }
3609
3610 Icon {
3611- id: leftHoveringIcon
3612+ id: leftIcon
3613+ objectName: "left_scroll_icon"
3614+ // return whether the pressed event was done inside the area of the icon
3615+ function contains(mouse) {
3616+ return (mouse.x < listViewContainer.listViewMargins &&
3617+ !sectionsListView.atXBeginning);
3618+ }
3619 anchors {
3620 left: parent.left
3621 leftMargin: (listViewContainer.listViewMargins - width) / 2
3622 bottom: parent.bottom
3623- bottomMargin: units.gu(2)
3624+ bottomMargin: sectionsStyle.height < units.gu(4) ? units.gu(1) : units.gu(2)
3625 }
3626 width: units.gu(1)
3627 height: units.gu(1)
3628@@ -314,12 +315,18 @@
3629 }
3630
3631 Icon {
3632- id: rightHoveringIcon
3633+ id: rightIcon
3634+ objectName: "right_scroll_icon"
3635+ // return whether the pressed event was done inside the area of the icon
3636+ function contains(mouse) {
3637+ return (mouse.x > (hoveringArea.width - listViewContainer.listViewMargins) &&
3638+ !sectionsListView.atXEnd);
3639+ }
3640 anchors {
3641 right: parent.right
3642 rightMargin: (listViewContainer.listViewMargins - width) / 2
3643 bottom: parent.bottom
3644- bottomMargin: units.gu(2)
3645+ bottomMargin: sectionsStyle.height < units.gu(4) ? units.gu(1) : units.gu(2)
3646 }
3647 width: units.gu(1)
3648 height: units.gu(1)
3649@@ -386,8 +393,8 @@
3650 when: hoveringArea.containsMouse
3651 PropertyChanges { target: mask; visible: true }
3652 PropertyChanges { target: listViewContainer; opacity: 0.0 }
3653- PropertyChanges { target: leftHoveringIcon; visible: true; }
3654- PropertyChanges { target: rightHoveringIcon; visible: true; }
3655+ PropertyChanges { target: leftIcon; visible: true; }
3656+ PropertyChanges { target: rightIcon; visible: true; }
3657 }
3658 ]
3659 }
3660
3661=== added file 'src/Ubuntu/Components/plugin/label_p.h'
3662--- src/Ubuntu/Components/plugin/label_p.h 1970-01-01 00:00:00 +0000
3663+++ src/Ubuntu/Components/plugin/label_p.h 2016-04-04 04:42:19 +0000
3664@@ -0,0 +1,60 @@
3665+/*
3666+ * Copyright 2016 Canonical Ltd.
3667+ *
3668+ * This program is free software; you can redistribute it and/or modify
3669+ * it under the terms of the GNU Lesser General Public License as published by
3670+ * the Free Software Foundation; version 3.
3671+ *
3672+ * This program is distributed in the hope that it will be useful,
3673+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
3674+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3675+ * GNU Lesser General Public License for more details.
3676+ *
3677+ * You should have received a copy of the GNU Lesser General Public License
3678+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
3679+ */
3680+
3681+#ifndef LABEL_P
3682+#define LABEL_P
3683+
3684+#include "uclabel.h"
3685+
3686+class UCLabelPrivate
3687+{
3688+ Q_DECLARE_PUBLIC(UCLabel)
3689+public:
3690+ explicit UCLabelPrivate(UCLabel *qq);
3691+ UCLabelPrivate(UCLabel *qq, UCLabel::ColorProviderFunc func);
3692+
3693+ static UCLabelPrivate *get(UCLabel *q)
3694+ {
3695+ return q->d_func();
3696+ }
3697+
3698+ void init();
3699+
3700+ // slots
3701+ void updateRenderType();
3702+
3703+ // methods
3704+ void updatePixelSize();
3705+
3706+ // members
3707+ enum {
3708+ TextSizeSet = 1,
3709+ PixelSizeSet = 2,
3710+ ColorSet = 4
3711+ };
3712+
3713+ UCLabel *q_ptr;
3714+ QFont defaultFont;
3715+ UCLabel::ColorProviderFunc defaultColor;
3716+ UCLabel::TextSize textSize;
3717+ quint8 flags;
3718+
3719+protected:
3720+ static QColor getDefaultColor(QQuickItem *item, UCTheme *theme);
3721+};
3722+
3723+#endif // LABEL_P
3724+
3725
3726=== modified file 'src/Ubuntu/Components/plugin/plugin.pri'
3727--- src/Ubuntu/Components/plugin/plugin.pri 2016-02-10 18:02:18 +0000
3728+++ src/Ubuntu/Components/plugin/plugin.pri 2016-04-04 04:42:19 +0000
3729@@ -110,11 +110,14 @@
3730 $$PWD/ucmainviewbase.h \
3731 $$PWD/ucmainviewbase_p.h \
3732 $$PWD/ucperformancemonitor.h \
3733+ $$PWD/privates/listviewextensions.h \
3734 $$PWD/privates/frame.h \
3735 $$PWD/privates/ucpagewrapper.h \
3736 $$PWD/privates/ucpagewrapper_p.h \
3737 $$PWD/privates/ucpagewrapperincubator_p.h \
3738- $$PWD/privates/appheaderbase.h
3739+ $$PWD/privates/appheaderbase.h \
3740+ $$PWD/label_p.h \
3741+ $$PWD/ucbottomedgeregion_p.h
3742
3743 SOURCES += $$PWD/plugin.cpp \
3744 $$PWD/uctheme.cpp \
3745@@ -187,6 +190,7 @@
3746 $$PWD/ucpagetreenode.cpp \
3747 $$PWD/ucmainviewbase.cpp \
3748 $$PWD/ucperformancemonitor.cpp \
3749+ $$PWD/privates/listviewextensions.cpp \
3750 $$PWD/privates/frame.cpp \
3751 $$PWD/privates/ucpagewrapper.cpp \
3752 $$PWD/privates/ucpagewrapperincubator.cpp \
3753
3754=== added file 'src/Ubuntu/Components/plugin/privates/listviewextensions.cpp'
3755--- src/Ubuntu/Components/plugin/privates/listviewextensions.cpp 1970-01-01 00:00:00 +0000
3756+++ src/Ubuntu/Components/plugin/privates/listviewextensions.cpp 2016-04-04 04:42:19 +0000
3757@@ -0,0 +1,153 @@
3758+/*
3759+ * Copyright 2016 Canonical Ltd.
3760+ *
3761+ * This program is free software; you can redistribute it and/or modify
3762+ * it under the terms of the GNU Lesser General Public License as published by
3763+ * the Free Software Foundation; version 3.
3764+ *
3765+ * This program is distributed in the hope that it will be useful,
3766+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
3767+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3768+ * GNU Lesser General Public License for more details.
3769+ *
3770+ * You should have received a copy of the GNU Lesser General Public License
3771+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
3772+ *
3773+ * Author Zsombor Egri <zsombor.egri@canonical.com>
3774+ */
3775+
3776+#include "listviewextensions.h"
3777+#include "uclistitem_p.h"
3778+#include "quickutils.h"
3779+#include <QtQuick/QQuickItem>
3780+#include <QtQuick/private/qquickflickable_p.h>
3781+
3782+ListViewProxy::ListViewProxy(QQuickFlickable *listView, QObject *parent)
3783+ : QObject(parent)
3784+ , listView(listView)
3785+{
3786+}
3787+ListViewProxy::~ListViewProxy()
3788+{
3789+ if (isEventFilter) {
3790+ listView->removeEventFilter(this);
3791+ }
3792+}
3793+
3794+// proxy methods
3795+
3796+Qt::Orientation ListViewProxy::orientation()
3797+{
3798+ return (Qt::Orientation)listView->property("orientation").toInt();
3799+}
3800+
3801+int ListViewProxy::count()
3802+{
3803+ return listView->property("count").toInt();
3804+}
3805+
3806+QQuickItem *ListViewProxy::currentItem()
3807+{
3808+ return listView->property("currentItem").value<QQuickItem*>();
3809+}
3810+
3811+int ListViewProxy::currentIndex()
3812+{
3813+ return listView->property("currentIndex").toInt();
3814+}
3815+
3816+void ListViewProxy::setCurrentIndex(int index)
3817+{
3818+ listView->setProperty("currentIndex", index);
3819+}
3820+
3821+QVariant ListViewProxy::model()
3822+{
3823+ return listView->property("model");
3824+}
3825+
3826+/*********************************************************************
3827+ * Additional functionality used in different places in toolkit
3828+ *********************************************************************/
3829+
3830+// Navigation override used by ListItems
3831+void ListViewProxy::overrideItemNavigation(bool override)
3832+{
3833+ if (override) {
3834+ listView->installEventFilter(this);
3835+ } else {
3836+ listView->removeEventFilter(this);
3837+ }
3838+ isEventFilter = override;
3839+}
3840+
3841+bool ListViewProxy::eventFilter(QObject *, QEvent *event)
3842+{
3843+ switch (event->type()) {
3844+ case QEvent::FocusIn:
3845+ return focusInEvent(static_cast<QFocusEvent*>(event));
3846+ case QEvent::KeyPress:
3847+ return keyPressEvent(static_cast<QKeyEvent*>(event));
3848+ default:
3849+ break;
3850+ }
3851+
3852+ return false;
3853+}
3854+
3855+void ListViewProxy::setKeyNavigationForListView(bool value)
3856+{
3857+ UCListItem *listItem = qobject_cast<UCListItem*>(currentItem());
3858+ if (listItem) {
3859+ UCListItemPrivate::get(listItem)->setListViewKeyNavigation(value);
3860+ listItem->update();
3861+ }
3862+}
3863+
3864+// grab focusIn event
3865+bool ListViewProxy::focusInEvent(QFocusEvent *event)
3866+{
3867+ switch (event->reason()) {
3868+ case Qt::TabFocusReason:
3869+ case Qt::BacktabFocusReason:
3870+ {
3871+ QQuickItem *currentItem = this->currentItem();
3872+ if (!currentItem && count() > 0) {
3873+ // set the first one to be the focus
3874+ setCurrentIndex(0);
3875+ setKeyNavigationForListView(true);
3876+ }
3877+ break;
3878+ }
3879+ default:
3880+ break;
3881+ }
3882+ return false;
3883+}
3884+
3885+// override up/down key presses for ListView; returns true if the key event is consumed
3886+// in which case ListView won't get it.
3887+bool ListViewProxy::keyPressEvent(QKeyEvent *event)
3888+{
3889+ int key = event->key();
3890+ Qt::Orientation orientation = this->orientation();
3891+
3892+ if ((orientation == Qt::Vertical && key != Qt::Key_Up && key != Qt::Key_Down)
3893+ || (orientation == Qt::Horizontal && key != Qt::Key_Left && key != Qt::Key_Right)) {
3894+ return false;
3895+ }
3896+ // for horizontal moves take into account the layout mirroring
3897+ bool isRtl = QQuickItemPrivate::get(listView)->effectiveLayoutMirror;
3898+ bool forwards = (key == Qt::Key_Up || (isRtl ? key == Qt::Key_Left : key == Qt::Key_Right));
3899+ int oldIndex = this->currentIndex();
3900+ int currentIndex = this->currentIndex();
3901+ int count = this->count();
3902+
3903+ if (currentIndex >= 0 && count > 0) {
3904+ currentIndex = qBound<int>(0, forwards ? currentIndex - 1 : currentIndex + 1, count - 1);
3905+ setCurrentIndex(currentIndex);
3906+ setKeyNavigationForListView(true);
3907+ }
3908+
3909+ return (oldIndex != currentIndex);
3910+}
3911
3912=== added file 'src/Ubuntu/Components/plugin/privates/listviewextensions.h'
3913--- src/Ubuntu/Components/plugin/privates/listviewextensions.h 1970-01-01 00:00:00 +0000
3914+++ src/Ubuntu/Components/plugin/privates/listviewextensions.h 2016-04-04 04:42:19 +0000
3915@@ -0,0 +1,60 @@
3916+/*
3917+ * Copyright 2016 Canonical Ltd.
3918+ *
3919+ * This program is free software; you can redistribute it and/or modify
3920+ * it under the terms of the GNU Lesser General Public License as published by
3921+ * the Free Software Foundation; version 3.
3922+ *
3923+ * This program is distributed in the hope that it will be useful,
3924+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
3925+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3926+ * GNU Lesser General Public License for more details.
3927+ *
3928+ * You should have received a copy of the GNU Lesser General Public License
3929+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
3930+ *
3931+ * Author Zsombor Egri <zsombor.egri@canonical.com>
3932+ */
3933+
3934+#ifndef LISTVIEWEXTENSIONS_H
3935+#define LISTVIEWEXTENSIONS_H
3936+
3937+#include <QtCore/QObject>
3938+
3939+class QQuickFlickable;
3940+class QQuickItem;
3941+class QFocusEvent;
3942+class QKeyEvent;
3943+class ListViewProxy : public QObject
3944+{
3945+ Q_OBJECT
3946+public:
3947+ explicit ListViewProxy(QQuickFlickable *listView, QObject *parent = 0);
3948+ virtual ~ListViewProxy();
3949+ inline QQuickFlickable *view() const
3950+ {
3951+ return listView;
3952+ }
3953+ void overrideItemNavigation(bool override);
3954+
3955+
3956+ // proxied methods
3957+ Qt::Orientation orientation();
3958+ int count();
3959+ QQuickItem *currentItem();
3960+ int currentIndex();
3961+ void setCurrentIndex(int index);
3962+ QVariant model();
3963+
3964+protected:
3965+ bool eventFilter(QObject *, QEvent *) override;
3966+
3967+ bool focusInEvent(QFocusEvent *event);
3968+ bool keyPressEvent(QKeyEvent *event);
3969+ void setKeyNavigationForListView(bool value);
3970+private:
3971+ QQuickFlickable *listView;
3972+ bool isEventFilter:1;
3973+};
3974+
3975+#endif // LISTVIEWEXTENSIONS_H
3976
3977=== modified file 'src/Ubuntu/Components/plugin/privates/threelabelsslot_p.cpp'
3978--- src/Ubuntu/Components/plugin/privates/threelabelsslot_p.cpp 2016-01-30 10:51:22 +0000
3979+++ src/Ubuntu/Components/plugin/privates/threelabelsslot_p.cpp 2016-04-04 04:42:19 +0000
3980@@ -1,5 +1,5 @@
3981 /*
3982- * Copyright 2015 Canonical Ltd.
3983+ * Copyright 2015-2016 Canonical Ltd.
3984 *
3985 * This program is free software; you can redistribute it and/or modify
3986 * it under the terms of the GNU Lesser General Public License as published by
3987@@ -15,7 +15,7 @@
3988 */
3989
3990 #include "threelabelsslot_p.h"
3991-#include "uclabel.h"
3992+#include "label_p.h"
3993 #include "ucunits.h"
3994 #include "ucfontutils.h"
3995 #include "uctheme.h"
3996@@ -148,7 +148,7 @@
3997 if (d->m_title == Q_NULLPTR) {
3998 d->m_title = new UCLabel(this);
3999 QQmlEngine::setContextForObject(d->m_title, qmlContext(this));
4000- d->m_title->init();
4001+ UCLabelPrivate::get(d->m_title)->init();
4002
4003 QQuickAnchors *titleAnchors = QQuickItemPrivate::get(d->m_title)->anchors();
4004 titleAnchors->setLeft(d->left());
4005@@ -193,7 +193,7 @@
4006 if (d->m_subtitle == Q_NULLPTR) {
4007 d->m_subtitle = new UCLabel(getSubtitleColor, this);
4008 QQmlEngine::setContextForObject(d->m_subtitle, qmlContext(this));
4009- d->m_subtitle->init();
4010+ UCLabelPrivate::get(d->m_subtitle)->init();
4011
4012 QQuickAnchors *subtitleAnchors = QQuickItemPrivate::get(d->m_subtitle)->anchors();
4013 subtitleAnchors->setLeft(d->left());
4014@@ -223,7 +223,7 @@
4015 if (d->m_summary == Q_NULLPTR) {
4016 d->m_summary = new UCLabel(getSummaryColor, this);
4017 QQmlEngine::setContextForObject(d->m_summary, qmlContext(this));
4018- d->m_summary->init();
4019+ UCLabelPrivate::get(d->m_summary)->init();
4020
4021 QQuickAnchors *summaryAnchors = QQuickItemPrivate::get(d->m_summary)->anchors();
4022 summaryAnchors->setLeft(d->left());
4023
4024=== modified file 'src/Ubuntu/Components/plugin/propertychange_p.cpp'
4025--- src/Ubuntu/Components/plugin/propertychange_p.cpp 2015-06-07 13:20:11 +0000
4026+++ src/Ubuntu/Components/plugin/propertychange_p.cpp 2016-04-04 04:42:19 +0000
4027@@ -42,7 +42,12 @@
4028 void PropertyChange::backup()
4029 {
4030 if (!backedUp) {
4031+#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
4032+ backupBinding = QQmlPropertyPrivate::binding(qmlProperty);
4033+ QQmlPropertyPrivate::setBinding(qmlProperty, Q_NULLPTR);
4034+#else
4035 backupBinding = QQmlPropertyPrivate::setBinding(qmlProperty, Q_NULLPTR);
4036+#endif
4037 backupValue = qmlProperty.read();
4038 backedUp = true;
4039 }
4040@@ -70,9 +75,18 @@
4041 return;
4042 }
4043 change->backup();
4044+#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
4045+ QQmlAbstractBinding::Ptr prev(QQmlPropertyPrivate::binding(change->qmlProperty));
4046+ QQmlPropertyPrivate::setBinding(change->qmlProperty, binding);
4047+#else
4048 QQmlAbstractBinding *prev = QQmlPropertyPrivate::setBinding(change->qmlProperty, binding);
4049+#endif
4050 if (prev && prev != binding && prev != change->backupBinding) {
4051+#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
4052+ prev->removeFromObject();
4053+#else
4054 prev->destroy();
4055+#endif
4056 }
4057 }
4058
4059@@ -88,9 +102,18 @@
4060 if (change->backedUp) {
4061 if (change->qmlProperty.isValid()) {
4062 if (change->backupBinding) {
4063+#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
4064+ QQmlAbstractBinding::Ptr prev(QQmlPropertyPrivate::binding(change->qmlProperty));
4065+ QQmlPropertyPrivate::setBinding(change->qmlProperty, change->backupBinding.data());
4066+#else
4067 QQmlAbstractBinding *prev = QQmlPropertyPrivate::setBinding(change->qmlProperty, change->backupBinding);
4068+#endif
4069 if (prev != change->backupBinding && prev) {
4070+#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
4071+ prev->removeFromObject();
4072+#else
4073 prev->destroy();
4074+#endif
4075 }
4076 } else {
4077 change->qmlProperty.write(change->backupValue);
4078
4079=== modified file 'src/Ubuntu/Components/plugin/propertychange_p.h'
4080--- src/Ubuntu/Components/plugin/propertychange_p.h 2015-05-29 06:09:56 +0000
4081+++ src/Ubuntu/Components/plugin/propertychange_p.h 2016-04-04 04:42:19 +0000
4082@@ -21,6 +21,10 @@
4083 #include <QtCore/QObject>
4084 #include <QtQml/QQmlProperty>
4085
4086+#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
4087+#include <QtCore/QExplicitlySharedDataPointer>
4088+#endif
4089+
4090 class QQmlAbstractBinding;
4091 class PropertyChange
4092 {
4093@@ -41,7 +45,12 @@
4094 bool backedUp;
4095 QQmlProperty qmlProperty;
4096 QVariant backupValue;
4097+
4098+#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
4099+ QExplicitlySharedDataPointer<QQmlAbstractBinding> backupBinding;
4100+#else
4101 QQmlAbstractBinding *backupBinding;
4102+#endif
4103
4104 void backup();
4105 };
4106
4107=== modified file 'src/Ubuntu/Components/plugin/quickutils.cpp'
4108--- src/Ubuntu/Components/plugin/quickutils.cpp 2016-02-01 18:57:26 +0000
4109+++ src/Ubuntu/Components/plugin/quickutils.cpp 2016-04-04 04:42:19 +0000
4110@@ -214,3 +214,56 @@
4111 }
4112 return showWarnings == 2;
4113 }
4114+
4115+// check whether an item is a descendant of parent
4116+bool QuickUtils::descendantItemOf(QQuickItem *item, const QQuickItem *parent)
4117+{
4118+ while (item && parent) {
4119+ if (item == parent) {
4120+ return true;
4121+ }
4122+ item = item->parentItem();
4123+ }
4124+ return false;
4125+}
4126+
4127+// returns the first key-focusable child item
4128+QQuickItem *QuickUtils::firstFocusableChild(QQuickItem *item)
4129+{
4130+ if (!item) {
4131+ return Q_NULLPTR;
4132+ }
4133+ const QList<QQuickItem*> &list = item->childItems();
4134+ for (int i = 0; i < list.count(); i++) {
4135+ QQuickItem *child = list.at(i);
4136+ if (child->activeFocusOnTab()) {
4137+ return child;
4138+ }
4139+ QQuickItem *focus = firstFocusableChild(child);
4140+ if (focus) {
4141+ return focus;
4142+ }
4143+ }
4144+ return Q_NULLPTR;
4145+}
4146+
4147+// returns the last key-focusable child item
4148+QQuickItem *QuickUtils::lastFocusableChild(QQuickItem *item)
4149+{
4150+ if (!item) {
4151+ return Q_NULLPTR;
4152+ }
4153+ const QList<QQuickItem*> &list = item->childItems();
4154+ int i = list.count() - 1;
4155+ while (i >= 0) {
4156+ QQuickItem *child = list.at(i--);
4157+ if (child->activeFocusOnTab()) {
4158+ return child;
4159+ }
4160+ QQuickItem *focus = lastFocusableChild(child);
4161+ if (focus) {
4162+ return focus;
4163+ }
4164+ }
4165+ return Q_NULLPTR;
4166+}
4167
4168=== modified file 'src/Ubuntu/Components/plugin/quickutils.h'
4169--- src/Ubuntu/Components/plugin/quickutils.h 2016-02-10 09:54:59 +0000
4170+++ src/Ubuntu/Components/plugin/quickutils.h 2016-04-04 04:42:19 +0000
4171@@ -55,6 +55,9 @@
4172 Q_REVISION(1) Q_INVOKABLE static bool inherits(QObject *object, const QString &fromClass);
4173 QObject* createQmlObject(const QUrl &url, QQmlEngine *engine);
4174 static bool showDeprecationWarnings();
4175+ static bool descendantItemOf(QQuickItem *item, const QQuickItem *parent);
4176+ Q_INVOKABLE static QQuickItem *firstFocusableChild(QQuickItem *item);
4177+ Q_INVOKABLE static QQuickItem *lastFocusableChild(QQuickItem *item);
4178
4179 bool mouseAttached()
4180 {
4181
4182=== modified file 'src/Ubuntu/Components/plugin/ucbottomedge.cpp'
4183--- src/Ubuntu/Components/plugin/ucbottomedge.cpp 2016-01-25 12:23:03 +0000
4184+++ src/Ubuntu/Components/plugin/ucbottomedge.cpp 2016-04-04 04:42:19 +0000
4185@@ -19,6 +19,7 @@
4186 #include "ucbottomedge_p.h"
4187 #include "ucbottomedgestyle.h"
4188 #include "ucbottomedgeregion.h"
4189+#include "ucbottomedgeregion_p.h"
4190 #include "ucbottomedgehint_p.h"
4191 #include "ucstyleditembase_p.h"
4192 #include <QtQml/QQmlEngine>
4193@@ -37,15 +38,15 @@
4194 #include "private/ucswipearea_p.h"
4195 #include <QtQuick/private/qquickanimation_p.h>
4196
4197+using namespace UbuntuToolkit;
4198+
4199 Q_LOGGING_CATEGORY(ucBottomEdge, "ubuntu.components.BottomEdge", QtMsgType::QtWarningMsg)
4200
4201-#define LOG qCDebug(ucBottomEdge) << "[BottomEdge]"
4202-
4203 UCBottomEdgePrivate::UCBottomEdgePrivate()
4204 : UCStyledItemBasePrivate()
4205+ , defaultRegion(new DefaultRegion(nullptr))
4206 , activeRegion(Q_NULLPTR)
4207 , hint(new UCBottomEdgeHint)
4208- , contentComponent(Q_NULLPTR)
4209 , bottomPanel(Q_NULLPTR)
4210 , previousDistance(0.0)
4211 , dragProgress(0.)
4212@@ -54,6 +55,7 @@
4213 , dragDirection(UCBottomEdge::Undefined)
4214 , defaultRegionsReset(false)
4215 , mousePressed(false)
4216+ , preloadContent(false)
4217 {
4218 }
4219
4220@@ -67,8 +69,16 @@
4221 hint->setEnabled2(q->isEnabled());
4222 });
4223
4224- // create default regions
4225- createDefaultRegions();
4226+ // create default region
4227+ // enters in this stage when drag ratio reaches 30% of the area
4228+ UCBottomEdgeRegionPrivate::get(defaultRegion)->attachToBottomEdge(q);
4229+
4230+ QObject::connect(defaultRegion, &UCBottomEdgeRegion::contentChanged,
4231+ q, &UCBottomEdge::contentChanged);
4232+ QObject::connect(defaultRegion, &UCBottomEdgeRegion::contentComponentChanged,
4233+ q, &UCBottomEdge::contentComponentChanged);
4234+
4235+ regions.append(defaultRegion);
4236
4237 // set the style name
4238 styleDocument = QStringLiteral("BottomEdgeStyle");
4239@@ -120,11 +130,10 @@
4240 QQml_setParent_noEvent(region, q);
4241 // take ownership!
4242 QQmlEngine::setObjectOwnership(region, QQmlEngine::CppOwnership);
4243- region->attachToBottomEdge(q);
4244+ UCBottomEdgeRegionPrivate::get(region)->attachToBottomEdge(q);
4245
4246 if (!defaultRegionsReset) {
4247 defaultRegionsReset = true;
4248- qDeleteAll(regions);
4249 regions.clear();
4250 }
4251
4252@@ -133,6 +142,8 @@
4253
4254 // append region definition
4255 regions.append(region);
4256+
4257+ LOG << "region added:" << region;
4258 }
4259
4260 // clears the custom regions list and restores the default ones
4261@@ -146,7 +157,9 @@
4262 }
4263 regions.clear();
4264 defaultRegionsReset = false;
4265- createDefaultRegions();
4266+ regions.append(defaultRegion);
4267+
4268+ LOG << "regions cleared, default restored";
4269 }
4270
4271 // validates an added region
4272@@ -155,7 +168,7 @@
4273 // we should not validate unti the bottom edge is not completed,
4274 // property changes may invalidate the result of the validation
4275 // also leave if the region is disabled
4276- if (!componentComplete || !region->m_enabled) {
4277+ if (!componentComplete || !UCBottomEdgeRegionPrivate::get(region)->enabled) {
4278 return;
4279 }
4280 Q_Q(UCBottomEdge);
4281@@ -170,7 +183,7 @@
4282 const QRectF regionRect(region->rect(boundingRect));
4283 for (int i = 0; i < regionsSize; ++i) {
4284 UCBottomEdgeRegion *stackedRegion = regions[i];
4285- if (region == stackedRegion || !stackedRegion->m_enabled) {
4286+ if (region == stackedRegion || !UCBottomEdgeRegionPrivate::get(stackedRegion)->enabled) {
4287 continue;
4288 }
4289 QRectF rect(stackedRegion->rect(boundingRect));
4290@@ -180,27 +193,14 @@
4291 QRectF intersect = regionRect.intersected(stackedRegion->rect(boundingRect));
4292 if (!intersect.isNull()) {
4293 qmlInfo(region) << QString("Region intersects the one from index %1 having from: %2 and to: %3")
4294- .arg(i).arg(stackedRegion->m_from).arg(stackedRegion->m_to);
4295+ .arg(i)
4296+ .arg(UCBottomEdgeRegionPrivate::get(stackedRegion)->from)
4297+ .arg(UCBottomEdgeRegionPrivate::get(stackedRegion)->to);
4298 }
4299 }
4300 }
4301 }
4302
4303-// creates the default region(s)
4304-void UCBottomEdgePrivate::createDefaultRegions()
4305-{
4306- Q_Q(UCBottomEdge);
4307- // add the default stages
4308- UCBottomEdgeRegion *commitRegion = new UCBottomEdgeRegion(q);
4309- // for testing purposes
4310- commitRegion->setObjectName("default_BottomEdgeRegion");
4311- // enters in this stage when drag ratio reaches 30% of the area
4312- commitRegion->m_from = 0.33;
4313- commitRegion->m_to = 1.0;
4314-
4315- regions.append(commitRegion);
4316-}
4317-
4318 // update status, drag direction and activeRegion during drag
4319 void UCBottomEdgePrivate::updateProgressionStates(qreal distance)
4320 {
4321@@ -227,6 +227,11 @@
4322 break;
4323 }
4324 }
4325+ // if no active region is found, use the default one
4326+ if (!newActive) {
4327+ LOG << "no active region found, fall back to the default";
4328+ newActive = defaultRegion;
4329+ }
4330 if (newActive != activeRegion) {
4331 setActiveRegion(newActive);
4332 }
4333@@ -286,15 +291,15 @@
4334 void UCBottomEdgePrivate::onDragEnded()
4335 {
4336 // collapse if we drag downwards, or not in any active region and we did not pass 30% of the BottomEdge height
4337- if (dragDirection == UCBottomEdge::Downwards || (!activeRegion && dragProgress < 0.33)) {
4338+ LOG << "direction:" << dragDirection << ", activeRegion?" << activeRegion << ", dragProgress:" << dragProgress;
4339+ if (dragDirection == UCBottomEdge::Downwards || (activeRegion && !activeRegion->canCommit(dragProgress))) {
4340 q_func()->collapse();
4341- } else if (!activeRegion && dragProgress >= 0.33) {
4342- // commit if we are not in an active region but we passed 30% of the BottomEdge height
4343- q_func()->commit();
4344- } else if (activeRegion) {
4345- // emit region's dragEnded first
4346- Q_EMIT activeRegion->dragEnded();
4347- commit(activeRegion->m_to);
4348+ } else {
4349+ UCBottomEdgeRegion *region = activeRegion ? activeRegion : defaultRegion;
4350+ if (region->canCommit(dragProgress)) {
4351+ Q_EMIT region->dragEnded();
4352+ commit(UCBottomEdgeRegionPrivate::get(region)->to);
4353+ }
4354 }
4355 }
4356
4357@@ -352,6 +357,8 @@
4358 }
4359 break;
4360 case UCBottomEdgePrivate::Collapsing:
4361+ // no active region when collapsed!
4362+ d->setActiveRegion(nullptr);
4363 d->setStatus(UCBottomEdge::Hidden);
4364 Q_EMIT collapseCompleted();
4365 break;
4366@@ -392,11 +399,12 @@
4367 void UCBottomEdgePrivate::patchContentItemHeader()
4368 {
4369 // ugly, as it can be, as we don't have the PageHeader in cpp to detect the type
4370- UCHeader *header = bottomPanel->m_contentItem ? bottomPanel->m_contentItem->findChild<UCHeader*>() : Q_NULLPTR;
4371+ UCHeader *header = currentContentItem ? currentContentItem->findChild<UCHeader*>() : Q_NULLPTR;
4372 if (!header || !QuickUtils::inherits(header, "PageHeader")) {
4373 return;
4374 }
4375
4376+ LOG << "PATCH HEADER" << currentContentItem.data();
4377 // get the navigationActions and inject an action there
4378 QVariant list(header->property("navigationActions"));
4379 QQmlListProperty<UCAction> actions = list.value< QQmlListProperty<UCAction> >();
4380@@ -434,7 +442,6 @@
4381 bool UCBottomEdgePrivate::loadStyleItem(bool animated)
4382 {
4383 // fix styleVersion
4384- Q_Q(UCBottomEdge);
4385 if (!styleVersion) {
4386 styleVersion = BUILD_VERSION(1, 3);
4387 }
4388@@ -453,14 +460,6 @@
4389 hint->setParentItem(bottomPanel);
4390 // and stack it before the panel, so it is covered by the panel when revealed
4391 hint->stackBefore(bottomPanel->m_panel);
4392-
4393- // connect style stuff
4394- QObject::connect(bottomPanel, &UCBottomEdgeStyle::contentItemChanged,
4395- q, &UCBottomEdge::contentItemChanged, Qt::DirectConnection);
4396- // follow contentItem change to patch the header
4397- QObject::connect(bottomPanel, &UCBottomEdgeStyle::contentItemChanged, [=]() {
4398- patchContentItemHeader();
4399- });
4400 }
4401 return result;
4402 }
4403@@ -749,6 +748,7 @@
4404 {
4405 UCStyledItemBasePrivate::completeComponentInitialization();
4406 Q_Q(UCBottomEdge);
4407+
4408 // fix the hint's style version as that has no qmlContext of its own
4409 // and thus import version check will fail; setting the context for
4410 // the hint using this component's hint won't work either as this
4411@@ -830,6 +830,15 @@
4412 }
4413 break;
4414 }
4415+ case QEvent::KeyPress: {
4416+ QKeyEvent *keyPress = static_cast<QKeyEvent*>(event);
4417+ switch (keyPress->key()) {
4418+ case Qt::Key_Escape:
4419+ collapse();
4420+ default:
4421+ break;
4422+ }
4423+ }
4424 default: break;
4425 }
4426 return UCStyledItemBase::eventFilter(target, event);
4427@@ -931,6 +940,13 @@
4428 }
4429
4430 Q_EMIT q_func()->statusChanged(this->status);
4431+
4432+ // show content
4433+ if (status > UCBottomEdge::Hidden) {
4434+ setCurrentContent();
4435+ } else {
4436+ resetCurrentContent(nullptr);
4437+ }
4438 }
4439
4440 /*!
4441@@ -941,17 +957,12 @@
4442 QUrl UCBottomEdge::contentUrl() const
4443 {
4444 Q_D(const UCBottomEdge);
4445- return d->contentUrl;
4446+ return d->defaultRegion->url();
4447 }
4448 void UCBottomEdge::setContent(const QUrl &url)
4449 {
4450 Q_D(UCBottomEdge);
4451- if (d->contentUrl == url) {
4452- return;
4453- }
4454-
4455- d->contentUrl = url;
4456- Q_EMIT contentChanged(d->contentUrl);
4457+ d->defaultRegion->setUrl(url);
4458 }
4459
4460 /*!
4461@@ -962,16 +973,12 @@
4462 QQmlComponent *UCBottomEdge::contentComponent() const
4463 {
4464 Q_D(const UCBottomEdge);
4465- return d->contentComponent;
4466+ return d->defaultRegion->component();
4467 }
4468 void UCBottomEdge::setContentComponent(QQmlComponent *component)
4469 {
4470 Q_D(UCBottomEdge);
4471- if (d->contentComponent == component) {
4472- return;
4473- }
4474- d->contentComponent = component;
4475- Q_EMIT contentComponentChanged(d->contentComponent);
4476+ d->defaultRegion->setComponent(component);
4477 }
4478
4479 /*!
4480@@ -983,7 +990,7 @@
4481 QQuickItem *UCBottomEdge::contentItem() const
4482 {
4483 Q_D(const UCBottomEdge);
4484- return d->bottomPanel ? d->bottomPanel->m_contentItem : Q_NULLPTR;
4485+ return d->currentContentItem.data();
4486 }
4487
4488 /*!
4489@@ -995,6 +1002,11 @@
4490 void UCBottomEdge::commit()
4491 {
4492 Q_D(UCBottomEdge);
4493+ // make sure that teh default region's content is loaded!
4494+ if (!d->activeRegion || d->activeRegion == d->defaultRegion) {
4495+ // make sure teh default is the active region
4496+ d->setActiveRegion(d->defaultRegion);
4497+ }
4498 d->commit(1.0);
4499 }
4500
4501@@ -1082,4 +1094,94 @@
4502 return d->activeRegion;
4503 }
4504
4505+/*!
4506+ * \qmlproperty bool BottomEdge::preloadContent
4507+ * If set, all the contents set in the component and in regions will be loaded
4508+ * in the background, so it will be available before it is revealed.
4509+ */
4510+bool UCBottomEdge::preloadContent() const
4511+{
4512+ return d_func()->preloadContent;
4513+}
4514+void UCBottomEdge::setPreloadContent(bool value)
4515+{
4516+ Q_D(UCBottomEdge);
4517+ if (d->preloadContent == value) {
4518+ return;
4519+ }
4520+ d->preloadContent = value;
4521+
4522+ if (d->preloadContent) {
4523+ // we load all region's content, but we skip teh default one,
4524+ // as default one is always preloaded
4525+ for (int i = 0; i < d->regions.size(); i++) {
4526+ UCBottomEdgeRegion *region = d->regions[i];
4527+ UCBottomEdgeRegionPrivate::get(region)->loadRegionContent();
4528+ }
4529+ } else {
4530+ // discard all inactive regions content, except default one
4531+ for (int i = 0; i < d->regions.size(); i++) {
4532+ UCBottomEdgeRegion *region = d->regions[i];
4533+ if (region != d->activeRegion) {
4534+ UCBottomEdgeRegionPrivate::get(region)->discardRegionContent();
4535+ }
4536+ }
4537+ }
4538+
4539+ Q_EMIT preloadContentChanged();
4540+}
4541+
4542+/*
4543+ * Set the current content. The content is taken from the region if active, or foced
4544+ * is set. If the region has no item, the logic falls back to use the default region's
4545+ * content.
4546+ */
4547+void UCBottomEdgePrivate::setCurrentContent()
4548+{
4549+ QQuickItem *newContent = nullptr;
4550+ if (activeRegion) {
4551+ newContent = UCBottomEdgeRegionPrivate::get(activeRegion)->contentItem;
4552+ LOG << "ACTIVE REGION CONTENT" << activeRegion->objectName() << newContent;
4553+ }
4554+ if (!newContent) {
4555+ newContent = UCBottomEdgeRegionPrivate::get(defaultRegion)->contentItem;
4556+ LOG << "USING DEFAULT" << newContent;
4557+ }
4558+ resetCurrentContent(newContent);
4559+}
4560+/*
4561+ * Set the content to the default region one.
4562+ */
4563+void UCBottomEdgePrivate::resetCurrentContent(QQuickItem *newContent)
4564+{
4565+ if (newContent == currentContentItem) {
4566+ // same content, no need to reset to
4567+ return;
4568+ }
4569+ if (currentContentItem) {
4570+ // detach current content, the content will be deleted by the exiting region
4571+ currentContentItem->setVisible(false);
4572+ currentContentItem->setParentItem(nullptr);
4573+ }
4574+
4575+ if (!newContent) {
4576+ // try to use the default one
4577+ newContent = UCBottomEdgeRegionPrivate::get(defaultRegion)->contentItem;
4578+ }
4579+
4580+ // if it is still null, leave - we may not have default content at all!
4581+ if (!newContent) {
4582+ return;
4583+ }
4584+
4585+ LOG << "RESET CONTENT TO" << newContent;
4586+ currentContentItem = newContent;
4587+ currentContentItem->setParentItem(bottomPanel->m_panel);
4588+ QQuickAnchors *anchors = QQuickItemPrivate::get(currentContentItem.data())->anchors();
4589+ anchors->setHorizontalCenter(QQuickItemPrivate::get(bottomPanel->m_panel)->horizontalCenter());
4590+ currentContentItem->setVisible(true);
4591+ Q_EMIT q_func()->contentItemChanged();
4592+ patchContentItemHeader();
4593+}
4594+
4595 #include "moc_ucbottomedge.cpp"
4596
4597=== modified file 'src/Ubuntu/Components/plugin/ucbottomedge.h'
4598--- src/Ubuntu/Components/plugin/ucbottomedge.h 2015-12-11 12:10:54 +0000
4599+++ src/Ubuntu/Components/plugin/ucbottomedge.h 2016-04-04 04:42:19 +0000
4600@@ -42,6 +42,7 @@
4601 Q_PROPERTY(QQuickItem* contentItem READ contentItem NOTIFY contentItemChanged FINAL)
4602 Q_PROPERTY(QQmlListProperty<UCBottomEdgeRegion> regions READ regions NOTIFY regionsChanged FINAL)
4603 Q_PROPERTY(UCBottomEdgeRegion* activeRegion READ activeRegion NOTIFY activeRegionChanged FINAL)
4604+ Q_PROPERTY(bool preloadContent READ preloadContent WRITE setPreloadContent NOTIFY preloadContentChanged FINAL DESIGNABLE false)
4605
4606 // overloaded data property to catch regions
4607 Q_PRIVATE_PROPERTY(UCBottomEdge::d_func(), QQmlListProperty<QObject> data READ data DESIGNABLE false)
4608@@ -73,6 +74,8 @@
4609 void setFillWindow(bool fill);
4610 QQmlListProperty<UCBottomEdgeRegion> regions();
4611 UCBottomEdgeRegion *activeRegion();
4612+ bool preloadContent() const;
4613+ void setPreloadContent(bool value);
4614
4615 Q_SIGNALS:
4616 void dragProgressChanged(qreal dragProgress);
4617@@ -83,6 +86,7 @@
4618 void contentItemChanged();
4619 void regionsChanged();
4620 void activeRegionChanged(UCBottomEdgeRegion *activeRegion);
4621+ void preloadContentChanged();
4622
4623 void commitStarted();
4624 void commitCompleted();
4625@@ -109,6 +113,7 @@
4626
4627 Q_DECLARE_PRIVATE(UCBottomEdge)
4628
4629+private:
4630 friend class tst_BottomEdge;
4631 };
4632 Q_DECLARE_METATYPE(UCBottomEdge::Status)
4633@@ -116,4 +121,6 @@
4634
4635 Q_DECLARE_LOGGING_CATEGORY(ucBottomEdge)
4636
4637+#define LOG qCDebug(ucBottomEdge) << "[BottomEdge]"
4638+
4639 #endif // UCBOTTOMEDGE_H
4640
4641=== modified file 'src/Ubuntu/Components/plugin/ucbottomedge_p.h'
4642--- src/Ubuntu/Components/plugin/ucbottomedge_p.h 2015-12-21 17:49:59 +0000
4643+++ src/Ubuntu/Components/plugin/ucbottomedge_p.h 2016-04-04 04:42:19 +0000
4644@@ -23,6 +23,10 @@
4645 #include "ucstyleditembase_p.h"
4646 #include "ucaction.h"
4647
4648+#include <AsyncLoader>
4649+
4650+using namespace UbuntuToolkit;
4651+
4652 class UCBottomEdgeStyle;
4653 class UCBottomEdgePrivate : public UCStyledItemBasePrivate, protected QQuickItemChangeListener
4654 {
4655@@ -51,7 +55,6 @@
4656
4657 // page header manipulation
4658 void patchContentItemHeader();
4659- void createDefaultRegions();
4660 void updateProgressionStates(qreal distance);
4661 bool setActiveRegion(UCBottomEdgeRegion *range);
4662 void detectDirection(qreal currentDistance);
4663@@ -70,12 +73,14 @@
4664 void itemChildAdded(QQuickItem *item, QQuickItem *child);
4665 void itemChildRemoved(QQuickItem *item, QQuickItem *child);
4666
4667+ void setCurrentContent();
4668+ void resetCurrentContent(QQuickItem *newItem);
4669 // members
4670- QUrl contentUrl;
4671 QList<UCBottomEdgeRegion*> regions;
4672+ QPointer<QQuickItem> currentContentItem;
4673+ UCBottomEdgeRegion *defaultRegion;
4674 UCBottomEdgeRegion *activeRegion;
4675 UCBottomEdgeHint *hint;
4676- QQmlComponent *contentComponent;
4677 UCBottomEdgeStyle *bottomPanel;
4678
4679 qreal previousDistance;
4680@@ -93,6 +98,7 @@
4681
4682 bool defaultRegionsReset:1;
4683 bool mousePressed:1;
4684+ bool preloadContent:1;
4685
4686 // status management
4687 void setOperationStatus(OperationStatus s);
4688
4689=== modified file 'src/Ubuntu/Components/plugin/ucbottomedgehint.cpp'
4690--- src/Ubuntu/Components/plugin/ucbottomedgehint.cpp 2016-02-01 18:57:26 +0000
4691+++ src/Ubuntu/Components/plugin/ucbottomedgehint.cpp 2016-04-04 04:42:19 +0000
4692@@ -198,8 +198,16 @@
4693 void UCBottomEdgeHint::keyPressEvent(QKeyEvent *event)
4694 {
4695 UCActionItem::keyPressEvent(event);
4696- if ((status() >= Active) && (event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return)) {
4697- Q_EMIT clicked();
4698+ if (status() == Hidden)
4699+ return;
4700+ switch (event->key()) {
4701+ case Qt::Key_Enter:
4702+ case Qt::Key_Return:
4703+ case Qt::Key_Space:
4704+ Q_EMIT clicked();
4705+ break;
4706+ default:
4707+ break;
4708 }
4709 }
4710
4711
4712=== modified file 'src/Ubuntu/Components/plugin/ucbottomedgeregion.cpp'
4713--- src/Ubuntu/Components/plugin/ucbottomedgeregion.cpp 2015-11-26 15:49:24 +0000
4714+++ src/Ubuntu/Components/plugin/ucbottomedgeregion.cpp 2016-04-04 04:42:19 +0000
4715@@ -19,9 +19,31 @@
4716 #include "ucbottomedge.h"
4717 #include "ucbottomedge_p.h"
4718 #include "ucbottomedgeregion.h"
4719+#include "ucbottomedgeregion_p.h"
4720 #include "propertychange_p.h"
4721 #include <QtQml/private/qqmlproperty_p.h>
4722
4723+
4724+UCBottomEdgeRegionPrivate::UCBottomEdgeRegionPrivate()
4725+ : QObjectPrivate()
4726+ , bottomEdge(Q_NULLPTR)
4727+ , component(Q_NULLPTR)
4728+ , contentItem(Q_NULLPTR)
4729+ , from(0.0)
4730+ , to(-1.0)
4731+ , enabled(true)
4732+ , active(false)
4733+{
4734+}
4735+
4736+void UCBottomEdgeRegionPrivate::init()
4737+{
4738+ Q_Q(UCBottomEdgeRegion);
4739+ bottomEdge = qobject_cast<UCBottomEdge*>(parent);
4740+ QObject::connect(&loader, SIGNAL(loadingStatus(AsyncLoader::LoadingStatus,QObject*)),
4741+ q, SLOT(onLoaderStatusChanged(AsyncLoader::LoadingStatus,QObject*)));
4742+}
4743+
4744 /*!
4745 * \qmltype BottomEdgeRegion
4746 * \instantiates UCBottomEdgeRegion
4747@@ -92,94 +114,201 @@
4748 */
4749
4750 UCBottomEdgeRegion::UCBottomEdgeRegion(QObject *parent)
4751- : QObject(parent)
4752- , m_bottomEdge(qobject_cast<UCBottomEdge*>(parent))
4753- , m_component(Q_NULLPTR)
4754- , m_urlBackup(Q_NULLPTR)
4755- , m_componentBackup(Q_NULLPTR)
4756- , m_from(0.0)
4757- , m_to(-1.0)
4758- , m_enabled(true)
4759-{
4760-}
4761-
4762-void UCBottomEdgeRegion::attachToBottomEdge(UCBottomEdge *bottomEdge)
4763-{
4764- QQml_setParent_noEvent(this, bottomEdge);
4765- m_bottomEdge = bottomEdge;
4766+ : QObject(*(new UCBottomEdgeRegionPrivate), parent)
4767+{
4768+ d_func()->init();
4769+}
4770+
4771+UCBottomEdgeRegion::UCBottomEdgeRegion(UCBottomEdgeRegionPrivate &dd, QObject *parent)
4772+ : QObject(dd, parent)
4773+{
4774+ d_func()->init();
4775+}
4776+
4777+void UCBottomEdgeRegionPrivate::attachToBottomEdge(UCBottomEdge *bottomEdge)
4778+{
4779+ Q_Q(UCBottomEdgeRegion);
4780+ QQml_setParent_noEvent(q, bottomEdge);
4781+ this->bottomEdge = bottomEdge;
4782 // adjust to property value if not set yet
4783- if (m_to <= 0.0) {
4784- m_to = 1.0;
4785- Q_EMIT toChanged();
4786+ if (to <= 0.0) {
4787+ to = 1.0;
4788+ Q_EMIT q->toChanged();
4789+ }
4790+
4791+ // if preload is set, load content
4792+ if (bottomEdge->preloadContent()) {
4793+ loadRegionContent();
4794 }
4795 }
4796
4797 bool UCBottomEdgeRegion::contains(qreal dragRatio)
4798 {
4799- return (m_enabled && (m_from < m_to) && dragRatio >= m_from && dragRatio <= m_to);
4800+ Q_D(UCBottomEdgeRegion);
4801+ return (d->enabled && (d->from < d->to) && dragRatio >= d->from && dragRatio <= d->to);
4802+}
4803+
4804+// Called when drag ends to check whether content can be committed. The default
4805+// implementation returns true.
4806+bool UCBottomEdgeRegion::canCommit(qreal dragRatio)
4807+{
4808+ Q_UNUSED(dragRatio);
4809+ return true;
4810 }
4811
4812 void UCBottomEdgeRegion::enter()
4813 {
4814+ Q_D(UCBottomEdgeRegion);
4815+ d->active = true;
4816 Q_EMIT entered();
4817- // backup url
4818- if (m_url.isValid()) {
4819- m_urlBackup = new PropertyChange(m_bottomEdge, "contentUrl");
4820- QQmlProperty property(this, "contentUrl", qmlContext(this));
4821- QQmlAbstractBinding *binding = QQmlPropertyPrivate::binding(property);
4822- if (binding) {
4823- PropertyChange::setBinding(m_urlBackup, binding);
4824- } else {
4825- PropertyChange::setValue(m_urlBackup, m_url);
4826- }
4827- }
4828- if (m_component) {
4829- m_componentBackup = new PropertyChange(m_bottomEdge, "contentComponent");
4830- QQmlProperty property(this, "contentComponent", qmlContext(this));
4831- QQmlAbstractBinding *binding = QQmlPropertyPrivate::binding(property);
4832- if (binding) {
4833- PropertyChange::setBinding(m_componentBackup, binding);
4834- } else {
4835- PropertyChange::setValue(m_componentBackup, QVariant::fromValue<QQmlComponent*>(m_component));
4836- }
4837+
4838+ LOG << "ENTER REGION" << objectName();
4839+ // if preloaded, or default(?), set the content
4840+ if (d->bottomEdge->preloadContent()) {
4841+ if (d->loader.status() == UbuntuToolkit::AsyncLoader::Ready) {
4842+ LOG << "SET REGION CONTENT" << objectName();
4843+ UCBottomEdgePrivate::get(d->bottomEdge)->setCurrentContent();
4844+ }
4845+ } else {
4846+ // initiate loading, component has priority
4847+ d->loadRegionContent();
4848 }
4849 }
4850
4851 void UCBottomEdgeRegion::exit()
4852 {
4853- if (m_componentBackup) {
4854- delete m_componentBackup;
4855- m_componentBackup = Q_NULLPTR;
4856- }
4857- if (m_urlBackup) {
4858- delete m_urlBackup;
4859- m_urlBackup = Q_NULLPTR;
4860- }
4861+ Q_D(UCBottomEdgeRegion);
4862+ d->active = false;
4863 Q_EMIT exited();
4864+
4865+ // detach content from BottomEdge
4866+ LOG << "EXIT REGION" << objectName();
4867+ UCBottomEdgePrivate::get(d->bottomEdge)->resetCurrentContent(nullptr);
4868+
4869+ // then cleanup
4870+ if (!d->contentItem) {
4871+ return;
4872+ }
4873+ LOG << "RESET REGION CONTENT" << objectName();
4874+ if (!d->bottomEdge->preloadContent()) {
4875+ LOG << "DISCARD REGION CONTENT" << objectName();
4876+ d->discardRegionContent();
4877+ }
4878 }
4879
4880 const QRectF UCBottomEdgeRegion::rect(const QRectF &bottomEdgeRect)
4881 {
4882+ Q_D(UCBottomEdgeRegion);
4883 QRectF regionRect(
4884- bottomEdgeRect.topLeft() + QPointF(0, bottomEdgeRect.height() * (1.0 - m_to)),
4885- QSizeF(bottomEdgeRect.width(), bottomEdgeRect.height() * (m_to - m_from)));
4886+ bottomEdgeRect.topLeft() + QPointF(0, bottomEdgeRect.height() * (1.0 - d->to)),
4887+ QSizeF(bottomEdgeRect.width(), bottomEdgeRect.height() * (d->to - d->from)));
4888 return regionRect;
4889 }
4890
4891+void UCBottomEdgeRegionPrivate::loadRegionContent()
4892+{
4893+ if (!enabled) {
4894+ return;
4895+ }
4896+ LOG << "LOAD REGION CONTENT" << q_func()->objectName() << contentItem;
4897+ if (component) {
4898+ loadContent(LoadingComponent);
4899+ } else if (url.isValid()) {
4900+ loadContent(LoadingUrl);
4901+ }
4902+}
4903+
4904+void UCBottomEdgeRegionPrivate::loadContent(LoadingType type)
4905+{
4906+ // we must delete the previous content before we (re)initiate loading
4907+ if (contentItem) {
4908+ contentItem->deleteLater();;
4909+ contentItem = nullptr;
4910+ }
4911+ // no need to create new context as we do not set any context properties
4912+ // for which we would need one
4913+ switch (type) {
4914+ case LoadingUrl:
4915+ loader.load(url, qmlContext(bottomEdge));
4916+ return;
4917+ case LoadingComponent:
4918+ loader.load(component, qmlContext(bottomEdge));
4919+ return;
4920+ }
4921+}
4922+
4923+void UCBottomEdgeRegionPrivate::discardRegionContent()
4924+{
4925+ loader.reset();
4926+ if (contentItem) {
4927+ LOG << "DISCARD CONTENT" << q_func()->objectName();
4928+ contentItem->deleteLater();
4929+ }
4930+ contentItem = nullptr;
4931+}
4932+
4933+void UCBottomEdgeRegionPrivate::onLoaderStatusChanged(AsyncLoader::LoadingStatus status, QObject *object)
4934+{
4935+ bool emitChange = false;
4936+ LOG << "STATUS" << status << object;
4937+ if (status == UbuntuToolkit::AsyncLoader::Ready) {
4938+ // if we are no longer active, no need to continue, and discard content
4939+ // this may occur when the component was still in Compiling state while
4940+ // the region was exited, therefore reset() could not cancel the operation.
4941+ if (!active && !bottomEdge->preloadContent()) {
4942+ LOG << "DELETE REGION CONTENT" << q_func()->objectName();
4943+ object->deleteLater();
4944+ return;
4945+ }
4946+ contentItem = qobject_cast<QQuickItem*>(object);
4947+ emitChange = active;
4948+ }
4949+
4950+ if (status == UbuntuToolkit::AsyncLoader::Reset) {
4951+ // de-parent first
4952+ if (contentItem) {
4953+ contentItem->setParentItem(nullptr);
4954+ LOG << "RESET CONTENT" << q_func()->objectName();
4955+ contentItem->deleteLater();
4956+ }
4957+ contentItem = nullptr;
4958+ emitChange = true;
4959+ }
4960+
4961+ if (emitChange && bottomEdge && active) {
4962+ UCBottomEdgePrivate::get(bottomEdge)->setCurrentContent();
4963+ }
4964+}
4965+
4966 /*!
4967 * \qmlproperty bool BottomEdgeRegion::enabled
4968 * Enables the section. Disabled sections do not trigger nor change the BottomEdge
4969 * content. Defaults to false.
4970 */
4971+bool UCBottomEdgeRegion::enabled() const
4972+{
4973+ Q_D(const UCBottomEdgeRegion);
4974+ return d->enabled;
4975+}
4976 void UCBottomEdgeRegion::setEnabled(bool enabled)
4977 {
4978- if (enabled == m_enabled) {
4979+ Q_D(UCBottomEdgeRegion);
4980+ if (enabled == d->enabled) {
4981 return;
4982 }
4983- m_enabled = enabled;
4984- if (m_bottomEdge) {
4985- UCBottomEdgePrivate::get(m_bottomEdge)->validateRegion(this);
4986+ d->enabled = enabled;
4987+ if (d->bottomEdge) {
4988+ UCBottomEdgePrivate::get(d->bottomEdge)->validateRegion(this);
4989+ // load content if preload is set
4990+ if (d->bottomEdge->preloadContent()) {
4991+ if (!d->enabled) {
4992+ d->discardRegionContent();
4993+ } else {
4994+ d->loadRegionContent();
4995+ }
4996+ }
4997 }
4998+
4999 Q_EMIT enabledChanged();
5000 }
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches

to status/vote changes: