on xenial help sign in
Don't do stuff if our parent context is gone

We'll be gone soon too (and crash probably) so don't do anything. This looks a bit like a workaround, wait for 5.2 better painting/dispatching loop to see if this is not needed anymore, we find a better way to do it, or we decide this is fine. Approved by PS Jenkins bot, Nick Dedekind.

commitc15bc467bd51e1ff7b9138ccf45902e5002ef69c authorAlbert Astals <albert.astals@canonical.com> dateThu 21 Nov 2013, 15:39 (13 years ago) parent16cade21066315
3 files changed+36−13
plugins/ListViewWithPageHeader/listviewwithpageheader.cpp+17 tests/qmltests/Dash/tst_Dash.qml+5−1 tests/qmltests/Dash/tst_DashContent.qml+14−12
plugins/ListViewWithPageHeader/listviewwithpageheader.cpp+17
@@ -479,6 +479,12 @@ void ListViewWithPageHeader::componentComplete()
479479
480480void ListViewWithPageHeader::viewportMoved(Qt::Orientations orient)
481481{
482+ // Check we are not being taken down and don't paint anything
483+ // TODO Check if we still need this in 5.2
484+ // For reproduction just inifnite loop testDash or testDashContent
485+ if (!QQmlEngine::contextForObject(this)->parentContext())
486+ return;
487+
482488 QQuickFlickable::viewportMoved(orient);
483489// qDebug() << "ListViewWithPageHeader::viewportMoved" << contentY();
484490 qreal diff = m_previousContentY - contentY();
@@ -855,6 +861,11 @@ void ListViewWithPageHeader::itemCreated(int modelIndex, QObject *object)
855861 }
856862#endif
857863// qDebug() << "ListViewWithPageHeader::itemCreated" << modelIndex << item;
864+ // Check we are not being taken down and don't paint anything
865+ // TODO Check if we still need this in 5.2
866+ // For reproduction just inifnite loop testDash or testDashContent
867+ if (!QQmlEngine::contextForObject(this)->parentContext())
868+ return;
858869
859870 item->setParentItem(m_clipItem);
860871 QQmlContext *context = QQmlEngine::contextForObject(item)->parentContext();
@@ -1235,6 +1246,12 @@ void ListViewWithPageHeader::layout()
12351246
12361247void ListViewWithPageHeader::updatePolish()
12371248{
1249+ // Check we are not being taken down and don't paint anything
1250+ // TODO Check if we still need this in 5.2
1251+ // For reproduction just inifnite loop testDash or testDashContent
1252+ if (!QQmlEngine::contextForObject(this)->parentContext())
1253+ return;
1254+
12381255 Q_FOREACH(ListItem *item, m_itemsToRelease)
12391256 reallyReleaseItem(item);
12401257 m_itemsToRelease.clear();
tests/qmltests/Dash/tst_Dash.qml+5−1
@@ -102,11 +102,15 @@ Item {
102102 console.log("Not testing " + data.tag + ": not visible");
103103 return;
104104 }
105+ var dashContentList = findChild(dash, "dashContentList");
106+
105107 dash.showScopeOnLoaded = data.tag
106108 scopes.clear();
109+ tryCompare(dashContentList, "count", 0);
107110 scopes.load();
111+ tryCompare(scopes, "loaded", true);
112+ tryCompare(dashContentList, "count", 4);
108113
109− var dashContentList = findChild(dash, "dashContentList");
110114 verify(dashContentList != undefined);
111115 tryCompare(dashContentList, "currentIndex", data.visualIndex);
112116 }
tests/qmltests/Dash/tst_DashContent.qml+14−12
@@ -124,13 +124,6 @@ Item {
124124
125125 var dashContentList = findChild(dashContent, "dashContentList");
126126 verify(dashContentList != undefined);
127− // TODO For Qt 5.2 remove this wait
128− // and the tryCompare and see if it still crashes when
129− // looping the test
130− wait(1000);
131− if (dashContentList.currentItem !== null) {
132− tryCompare(dashContentList.currentItem, "moving", false);
133− }
134127 scopesModel.clear();
135128 // wait for dash to empty scopes.
136129 tryCompare(dashContentList, "count", 0);
@@ -248,18 +241,27 @@ Item {
248241 tryCompare(scopesModel.get(2), "isActive", data.active2);
249242 }
250243
251− function test_hswipe_disabled_vswipe() {
244+ function checkFlickMovingAndNotInteractive()
245+ {
252246 var dashContentList = findChild(dashContent, "dashContentList");
253247
254− tryCompare(dashContentList, "interactive", true);
248+ if (dashContentList.currentItem.moving && !dashContentList.interactive)
249+ return true;
255250
256251 var startX = dashContentList.width/2;
257252 var startY = dashContentList.height/2;
258− touchFlick(dashContentList, startX, startY, startX, startY - units.gu(80));
253+ touchFlick(dashContentList, startX, startY, startX, startY - units.gu(40));
254+
255+ return dashContentList.currentItem.moving && !dashContentList.interactive;
256+ }
259257
260− tryCompare(dashContentList.currentItem, "moving", true);
261258
262− compare(dashContentList.interactive, false);
259+ function test_hswipe_disabled_vswipe() {
260+ var dashContentList = findChild(dashContent, "dashContentList");
261+
262+ tryCompare(dashContentList, "interactive", true);
263+
264+ tryCompareFunction(checkFlickMovingAndNotInteractive, true);
263265 }
264266 }
265267}