Merge lp:~ubuntu-sdk-team/ubuntu-ui-toolkit/visualRoot into lp:ubuntu-ui-toolkit/staging
- visualRoot
- Merge into staging
Status: | Merged |
---|---|
Approved by: | Tim Peeters |
Approved revision: | 2070 |
Merged at revision: | 2159 |
Proposed branch: | lp:~ubuntu-sdk-team/ubuntu-ui-toolkit/visualRoot |
Merge into: | lp:ubuntu-ui-toolkit/staging |
Prerequisite: | lp:~ubuntu-sdk-team/ubuntu-ui-toolkit/outTheWindow |
Diff against target: |
218 lines (+99/-2) 7 files modified
src/UbuntuToolkit/quickutils.cpp (+9/-0) src/UbuntuToolkit/ucmainwindow.cpp (+26/-0) src/UbuntuToolkit/ucmainwindow_p.h (+7/-0) src/UbuntuToolkit/ucmainwindow_p_p.h (+1/-0) src/imports/Components/Popups/1.3/popupUtils.js (+6/-1) tests/unit/mainwindow/VisualRoot.qml (+36/-0) tests/unit/mainwindow/tst_mainwindow.cpp (+14/-1) |
To merge this branch: | bzr merge lp:~ubuntu-sdk-team/ubuntu-ui-toolkit/visualRoot |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
ubuntu-sdk-build-bot | continuous-integration | Approve | |
Tim Peeters | Approve | ||
Zsombor Egri | Needs Information | ||
Review via email: mp+314684@code.launchpad.net |
Commit message
Add visualRoot property to MainWindow
Description of the change
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
FAILED: Continuous integration, rev:2066
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
FAILED: Continuous integration, rev:2066
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
FAILED: Continuous integration, rev:2066
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
FAILED: Continuous integration, rev:2066
https:/
Executed test runs:
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
None: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
Click here to trigger a rebuild:
https:/
Tim Peeters (tpeeters) wrote : | # |
Let's add documentation in PopupUtils and the popup components on how to change the root item. Also an example/use case would be useful.
- 2067. By Cris Dywan
- 2068. By Cris Dywan
-
Document the role of visualRoot in QuickUtils and popupUtils
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
FAILED: Continuous integration, rev:2068
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
FAILED: Continuous integration, rev:2068
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
FAILED: Continuous integration, rev:2068
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
FAILED: Continuous integration, rev:2068
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
FAILED: Continuous integration, rev:2068
https:/
Executed test runs:
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
None: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
Click here to trigger a rebuild:
https:/
- 2069. By Cris Dywan
-
Tweak quickutils header include in tst_mainwindow
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
PASSED: Continuous integration, rev:2069
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
PASSED: Continuous integration, rev:2069
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
PASSED: Continuous integration, rev:2069
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
PASSED: Continuous integration, rev:2069
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
PASSED: Continuous integration, rev:2069
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
None: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
Click here to trigger a rebuild:
https:/
Tim Peeters (tpeeters) wrote : | # |
some small suggestions for the docs in the inline comments below.
- 2070. By Cris Dywan
-
Reword documentation of visualRoot for clarity
Cris Dywan (kalikiana) wrote : | # |
> > The property holds the window's visual root,
> > as opposed to the root item.
> Should we prepend this sentence with 'If set,'?
> To make it clear that visualRoot is ignored
> when it is null? Or say 'set to null in order
> to use the root item....'.
I moved the If to the start of the sentence.
> > If set, popups (popovers, dialogs, menus) will
> > reparent to it when opened via
> They won't be reparented, they will be created
> as children of visualRoot (as you say in the
> docs of popupUtils).
Yes and no. popupUtils.open creates them initially with the parent. show() on the other hand does reparent after the fact if reparentToRootItem is true.
I made this more explicit now.
> > - QQuickItem *testItem(
> > + QQuickItem *testItem(QObject *that, const QString &identifier)
> why does this have to be changed?
A QQuickWindow is not a QQuickItem. Properties and children are however implemented in QObject and aren't specific to items at all. So we can use them with a window just fine, so long as we don't try to cast it to something unrelated that it isn't.
Zsombor Egri (zsombi) wrote : | # |
A small comment about the property, perhaps we would want to use the QQC2 ApplicationWindow's contentItem as property name?
http://
Cris Dywan (kalikiana) wrote : | # |
> A small comment about the property, perhaps we would want to use the QQC2
> ApplicationWindow's contentItem as property name?
>
> http://
> #contentItem-prop
QQuickWindow already has a contentItem property and it's not the same as what we want for the visualItem to be.
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
PASSED: Continuous integration, rev:2070
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
PASSED: Continuous integration, rev:2070
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
PASSED: Continuous integration, rev:2070
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
Tim Peeters (tpeeters) wrote : | # |
Looks good, thanks!
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
PASSED: Continuous integration, rev:2070
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
PASSED: Continuous integration, rev:2070
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
None: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
Click here to trigger a rebuild:
https:/
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
PASSED: Continuous integration, rev:2070
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
PASSED: Continuous integration, rev:2070
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
PASSED: Continuous integration, rev:2070
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
PASSED: Continuous integration, rev:2070
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
Preview Diff
1 | === modified file 'src/UbuntuToolkit/quickutils.cpp' |
2 | --- src/UbuntuToolkit/quickutils.cpp 2016-11-11 06:57:56 +0000 |
3 | +++ src/UbuntuToolkit/quickutils.cpp 2017-01-18 15:22:13 +0000 |
4 | @@ -29,6 +29,8 @@ |
5 | #include <QtQuick/private/qquicktextedit_p.h> |
6 | #include <QtSystemInfo/QInputInfoManager> |
7 | |
8 | +#include <UbuntuToolkit/private/ucmainwindow_p.h> |
9 | + |
10 | UT_NAMESPACE_BEGIN |
11 | |
12 | QuickUtils *QuickUtils::m_instance = nullptr; |
13 | @@ -170,11 +172,18 @@ |
14 | * \internal |
15 | * Returns the root item of a given item. In case there is a QQuickWindow (Window) |
16 | * found in the hierarchy, the function will return the contentItem of the window. |
17 | + * If the root item is a \b MainWindow, the visualRoot property will be respected. |
18 | */ |
19 | QQuickItem *QuickUtils::rootItem(QObject *object) |
20 | { |
21 | // make sure we have the m_rootView updated |
22 | lookupQuickView(); |
23 | + |
24 | + UCMainWindow *mainWindow(qobject_cast<UCMainWindow*>(m_rootWindow)); |
25 | + if (mainWindow && mainWindow->visualRoot()) { |
26 | + return mainWindow->visualRoot(); |
27 | + } |
28 | + |
29 | if (!object) { |
30 | return m_rootView ? m_rootView->rootObject() : (m_rootWindow ? m_rootWindow->contentItem() : 0); |
31 | } |
32 | |
33 | === modified file 'src/UbuntuToolkit/ucmainwindow.cpp' |
34 | --- src/UbuntuToolkit/ucmainwindow.cpp 2017-01-17 08:50:14 +0000 |
35 | +++ src/UbuntuToolkit/ucmainwindow.cpp 2017-01-18 15:22:13 +0000 |
36 | @@ -238,6 +238,32 @@ |
37 | return d_func()->m_actionContext; |
38 | } |
39 | |
40 | +/*! |
41 | + \qmlproperty Item MainWindow::visualRoot |
42 | + |
43 | + If set, the property holds the window's visual root, as opposed to root item |
44 | + of the scene. |
45 | + Popups (popovers, dialogs, menus) opened with popupUtils.open() will be |
46 | + children of the visual root, or the root item otherwise. |
47 | + Popups shown via show() may respectively reparent to the visual root, if it |
48 | + is set, or the root item otherwise, if reparentToRootItem is set. |
49 | +*/ |
50 | +QQuickItem *UCMainWindow::visualRoot() const |
51 | +{ |
52 | + return d_func()->m_visualRoot; |
53 | +} |
54 | + |
55 | +void UCMainWindow::setVisualRoot(QQuickItem *visualRoot) |
56 | +{ |
57 | + Q_D(UCMainWindow); |
58 | + |
59 | + if (d->m_visualRoot == visualRoot) |
60 | + return; |
61 | + |
62 | + d->m_visualRoot = visualRoot; |
63 | + Q_EMIT visualRootChanged(visualRoot); |
64 | +} |
65 | + |
66 | UT_NAMESPACE_END |
67 | |
68 | #include "moc_ucmainwindow_p.cpp" |
69 | |
70 | === modified file 'src/UbuntuToolkit/ucmainwindow_p.h' |
71 | --- src/UbuntuToolkit/ucmainwindow_p.h 2017-01-12 15:20:31 +0000 |
72 | +++ src/UbuntuToolkit/ucmainwindow_p.h 2017-01-18 15:22:13 +0000 |
73 | @@ -37,10 +37,12 @@ |
74 | Q_PROPERTY(UT_PREPEND_NAMESPACE(UCUnits)* units READ units NOTIFY unitsChanged) |
75 | Q_PROPERTY(UT_PREPEND_NAMESPACE(UbuntuI18n)* i18n READ i18n NOTIFY i18nChanged) |
76 | Q_PROPERTY(UT_PREPEND_NAMESPACE(UCPopupContext)* actionContext READ actionContext NOTIFY actionContextChanged) |
77 | + Q_PROPERTY(UT_PREPEND_NAMESPACE(QQuickItem)* visualRoot READ visualRoot WRITE setVisualRoot NOTIFY visualRootChanged) |
78 | #else |
79 | Q_PROPERTY(UCUnits* units READ units NOTIFY unitsChanged) |
80 | Q_PROPERTY(UbuntuI18n* i18n READ i18n NOTIFY i18nChanged) |
81 | Q_PROPERTY(UCPopupContext* actionContext READ actionContext NOTIFY actionContextChanged) |
82 | + Q_PROPERTY(QQuickItem* visualRoot READ visualRoot WRITE setVisualRoot NOTIFY visualRootChanged) |
83 | #endif |
84 | |
85 | public: |
86 | @@ -57,6 +59,9 @@ |
87 | |
88 | UCPopupContext* actionContext() const; |
89 | |
90 | + QQuickItem* visualRoot() const; |
91 | + void setVisualRoot(QQuickItem*); |
92 | + |
93 | Q_SIGNALS: |
94 | void applicationNameChanged(QString applicationName); |
95 | void organizationNameChanged(QString applicationName); |
96 | @@ -64,8 +69,10 @@ |
97 | void unitsChanged(); |
98 | #ifndef Q_QDOC |
99 | void actionContextChanged(UT_PREPEND_NAMESPACE(UCPopupContext)* actionContext); |
100 | + void visualRootChanged(UT_PREPEND_NAMESPACE(QQuickItem)* visualRoot); |
101 | #else |
102 | void actionContextChanged(UCPopupContext* actionContext); |
103 | + void visualRootChanged(QQuickItem* visualRoot); |
104 | #endif |
105 | |
106 | private: |
107 | |
108 | === modified file 'src/UbuntuToolkit/ucmainwindow_p_p.h' |
109 | --- src/UbuntuToolkit/ucmainwindow_p_p.h 2017-01-12 15:20:31 +0000 |
110 | +++ src/UbuntuToolkit/ucmainwindow_p_p.h 2017-01-18 15:22:13 +0000 |
111 | @@ -40,6 +40,7 @@ |
112 | QString m_organizationName; |
113 | UCPopupContext* m_actionContext = nullptr; |
114 | UCUnits* m_units = nullptr; |
115 | + QQuickItem* m_visualRoot = nullptr; |
116 | |
117 | }; |
118 | |
119 | |
120 | === modified file 'src/imports/Components/Popups/1.3/popupUtils.js' |
121 | --- src/imports/Components/Popups/1.3/popupUtils.js 2017-01-05 14:11:37 +0000 |
122 | +++ src/imports/Components/Popups/1.3/popupUtils.js 2017-01-18 15:22:13 +0000 |
123 | @@ -32,7 +32,12 @@ |
124 | \a caller should be given when a \l ComposerSheet or \l Dialog is specified using a URL |
125 | and opened inside a \b Window. If not, the application's root item will be the dismiss area. |
126 | |
127 | - Returns a popop object, which can be closed using \l close. |
128 | + Returns a popup object, which can be closed using \l close. |
129 | + |
130 | + Note that popups created from a file or component will be created as children |
131 | + of the root item. If that's not a good choice, a \b MainWindow used as the |
132 | + root item can set the \b visualRoot property an arbitrary \b Item that acts |
133 | + as the parent of all popups. |
134 | |
135 | \qml |
136 | import Ubuntu.Components 1.3 |
137 | |
138 | === added file 'tests/unit/mainwindow/VisualRoot.qml' |
139 | --- tests/unit/mainwindow/VisualRoot.qml 1970-01-01 00:00:00 +0000 |
140 | +++ tests/unit/mainwindow/VisualRoot.qml 2017-01-18 15:22:13 +0000 |
141 | @@ -0,0 +1,36 @@ |
142 | +/* |
143 | + * Copyright 2013-2017 Canonical Ltd. |
144 | + * |
145 | + * This program is free software; you can redistribute it and/or modify |
146 | + * it under the terms of the GNU Lesser General Public License as published by |
147 | + * the Free Software Foundation; version 3. |
148 | + * |
149 | + * This program is distributed in the hope that it will be useful, |
150 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
151 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
152 | + * GNU Lesser General Public License for more details. |
153 | + * |
154 | + * You should have received a copy of the GNU Lesser General Public License |
155 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
156 | + */ |
157 | + |
158 | +import QtQuick 2.4 |
159 | +import Ubuntu.Components 1.3 |
160 | +import Ubuntu.Components.Labs 1.0 |
161 | + |
162 | +MainWindow { |
163 | + objectName: "visualRoot" |
164 | + applicationName: "org.gnu.wildebeest" |
165 | + visualRoot: myRoot |
166 | + |
167 | + Rectangle { |
168 | + id: myRoot |
169 | + objectName: "myRoot" |
170 | + anchors.fill: parent |
171 | + |
172 | + Label { |
173 | + objectName: "myLabel" |
174 | + text: "Lorem ipsum dolor sit amet" |
175 | + } |
176 | + } |
177 | +} |
178 | |
179 | === modified file 'tests/unit/mainwindow/tst_mainwindow.cpp' |
180 | --- tests/unit/mainwindow/tst_mainwindow.cpp 2017-01-12 15:20:31 +0000 |
181 | +++ tests/unit/mainwindow/tst_mainwindow.cpp 2017-01-18 15:22:13 +0000 |
182 | @@ -41,7 +41,9 @@ |
183 | #include <QtQml/QQmlComponent> |
184 | |
185 | #include <UbuntuToolkit/ubuntutoolkitmodule.h> |
186 | +#include <UbuntuToolkit/private/quickutils_p.h> |
187 | #include <UbuntuToolkit/private/ucapplication_p.h> |
188 | +#include <UbuntuToolkit/private/ucmainwindow_p.h> |
189 | #include <UbuntuToolkit/private/ucunits_p.h> |
190 | |
191 | UT_USE_NAMESPACE |
192 | @@ -90,7 +92,7 @@ |
193 | return window; |
194 | } |
195 | |
196 | - QQuickItem *testItem(QQuickItem *that, const QString &identifier) |
197 | + QQuickItem *testItem(QObject *that, const QString &identifier) |
198 | { |
199 | if (that->property(identifier.toLocal8Bit()).isValid()) |
200 | return that->property(identifier.toLocal8Bit()).value<QQuickItem*>(); |
201 | @@ -132,6 +134,17 @@ |
202 | QCOMPARE(organizationName, mainWindow->property("organizationName").toString()); |
203 | QCOMPARE(organizationName, QCoreApplication::organizationName()); |
204 | } |
205 | + |
206 | + void testCase_VisualRoot() |
207 | + { |
208 | + QString applicationName("tv.island.pacific"); |
209 | + QQuickWindow *mainWindow(loadTest("VisualRoot.qml")); |
210 | + QVERIFY(mainWindow); |
211 | + QQuickItem* myLabel(testItem(mainWindow, "myLabel")); |
212 | + QQuickItem* visualRoot(QuickUtils::instance()->rootItem(myLabel)); |
213 | + QQuickItem* myRoot(testItem(mainWindow, "myRoot")); |
214 | + QCOMPARE(visualRoot, myRoot); |
215 | + } |
216 | }; |
217 | |
218 | QTEST_MAIN(tst_MainWindow) |
FAILED: Continuous integration, rev:2066 /jenkins. ubuntu. com/ubuntu- sdk/job/ ubuntu- ui-toolkit- ci-amd64- stable/ 1608/ /jenkins. ubuntu. com/ubuntu- sdk/job/ generic- update- mp/7421/ console
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild: /jenkins. ubuntu. com/ubuntu- sdk/job/ ubuntu- ui-toolkit- ci-amd64- stable/ 1608/rebuild
https:/