<table><tr><td style="">leinir created this revision.<br />Herald added a project: Frameworks.<br />Herald added a subscriber: kde-frameworks-devel.<br />leinir requested review of this revision.
</td><a style="text-decoration: none; padding: 4px 8px; margin: 0 8px 8px; float: right; color: #464C5C; font-weight: bold; border-radius: 3px; background-color: #F7F7F9; background-image: linear-gradient(to bottom,#fff,#f1f0f1); display: inline-block; border: 1px solid rgba(71,87,120,.2);" href="https://phabricator.kde.org/D26543">View Revision</a></tr></table><br /><div><strong>REVISION SUMMARY</strong><div><p>This patch changes the previous naive approach to a more elaborate,<br />
QQmlListProperty based one. It further introduces a QObject based<br />
wrapper EntryInternal, in preparation for refactoring for KF6.</p>

<p>The rationale for this approach (rather than e.g. using a model)<br />
is that the approach makes for the simplest possible porting from<br />
the QWidget based methods.</p>

<p>Add a QObject wrapper for EntryInternal</p>

<p>We can't reasonably change EntryInternal to a QObject at the moment,<br />
as that would make the assumptions about how it's used throughout<br />
the codebase not quite correct, so until breakage is allowed, add<br />
a class which wraps up an object and which works more like one would<br />
expect a QObject to behave.</p>

<p>Register the wrapper with QtQuick (and clean the plugin a tiny bit)</p>

<p>Switch to a QQmlListProperty</p>

<p>The issue with the previous approach is that KNSCore::EntryInternal<br />
is not a QObject, and so the list can't be used verbatim. This<br />
allows us to do things a little bit roundabout, but also reasonably<br />
simply.</p>

<p>Using an alias turns out to be fragile when digging through layers</p>

<p>Previously, the property would fail to resolve on the first try,<br />
and consequently would just stop attempting the resolution entirely.<br />
This binding, while suboptimal compared to aliasing, at least<br />
forwards the data correctly.</p></div></div><br /><div><strong>TEST PLAN</strong><div><p>Without this patch, changedEntries cannot be read by any user of the code<br />
With it, changedEntries can be passed through to any C++ consumer, and read out using the standard QQmlListReference method</p></div></div><br /><div><strong>REPOSITORY</strong><div><div>R304 KNewStuff</div></div></div><br /><div><strong>BRANCH</strong><div><div>unbreak-changedentries-in-qtquick (branched from master)</div></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D26543">https://phabricator.kde.org/D26543</a></div></div><br /><div><strong>AFFECTED FILES</strong><div><div>src/core/CMakeLists.txt<br />
src/core/entrywrapper.cpp<br />
src/core/entrywrapper.h<br />
src/qtquick/qml/Button.qml<br />
src/qtquick/qmlplugin.cpp<br />
src/qtquick/quickengine.cpp<br />
src/qtquick/quickengine.h</div></div></div><br /><div><strong>To: </strong>leinir<br /><strong>Cc: </strong>kde-frameworks-devel, LeGast00n, GB_2, michaelh, ngraham, bruns<br /></div>