on xenial help sign in
Qt 5.0 crashes if we release the items just after itemCreated

so we're releasing them on the next updatePolish, that seems to workatound the crash

commit57fa3efdbd17ab58ccc769f2138d380bca96f188 authorAlbert Astals <albert.astals@canonical.com> dateFri 21 Jun 2013, 13:43 (13 years ago) parent534d7d4
2 files changed+15−1
plugins/ListViewWithPageHeader/listviewwithpageheader.cpp+10−1 plugins/ListViewWithPageHeader/listviewwithpageheader.h+5
plugins/ListViewWithPageHeader/listviewwithpageheader.cpp+10−1
@@ -493,7 +493,7 @@ bool ListViewWithPageHeader::addVisibleItems(qreal fillFrom, qreal fillTo, bool
493493 return changed;
494494}
495495
496−void ListViewWithPageHeader::releaseItem(ListItem *listItem)
496+void ListViewWithPageHeader::reallyReleaseItem(ListItem *listItem)
497497{
498498 QQuickItem *item = listItem->m_item;
499499 QQuickItemPrivate *itemPrivate = QQuickItemPrivate::get(item);
@@ -506,6 +506,11 @@ void ListViewWithPageHeader::releaseItem(ListItem *listItem)
506506 delete listItem;
507507}
508508
509+void ListViewWithPageHeader::releaseItem(ListItem *listItem)
510+{
511+ m_itemsToRelease << listItem;
512+}
513+
509514void ListViewWithPageHeader::updateWatchedRoles()
510515{
511516 if (m_delegateModel) {
@@ -967,6 +972,10 @@ void ListViewWithPageHeader::layout()
967972
968973void ListViewWithPageHeader::updatePolish()
969974{
975+ Q_FOREACH(ListItem *item, m_itemsToRelease)
976+ reallyReleaseItem(item);
977+ m_itemsToRelease.clear();
978+
970979 if (!model())
971980 return;
972981
plugins/ListViewWithPageHeader/listviewwithpageheader.h+5
@@ -114,6 +114,7 @@ private:
114114 void headerHeightChanged(qreal newHeaderHeight, qreal oldHeaderHeight, qreal oldHeaderY);
115115 ListItem *itemAtIndex(int modelIndex) const; // Returns the item at modelIndex if has been created
116116 void releaseItem(ListItem *item);
117+ void reallyReleaseItem(ListItem *item);
117118 void updateWatchedRoles();
118119 QQuickItem *getSectionItem(int modelIndex, bool alreadyInserted);
119120 QQuickItem *getSectionItem(const QString &sectionText);
@@ -149,6 +150,10 @@ private:
149150 QQuickItem *m_topSectionItem;
150151
151152 bool m_forceNoClip;
153+
154+ // Qt 5.0 doesn't like releasing the items just after itemCreated
155+ // so we delay the releasing until the next updatePolish
156+ QList<ListItem *> m_itemsToRelease;
152157};
153158
154159