diff -Nru qtdeclarative-opensource-src-5.5.1/debian/changelog qtdeclarative-opensource-src-5.5.1/debian/changelog --- qtdeclarative-opensource-src-5.5.1/debian/changelog 2016-04-16 15:36:37.000000000 +0000 +++ qtdeclarative-opensource-src-5.5.1/debian/changelog 2018-04-03 15:24:35.000000000 +0000 @@ -1,22 +1,94 @@ -qtdeclarative-opensource-src (5.5.1-3.1ppa1~trusty1) trusty; urgency=medium +qtdeclarative-opensource-src (5.5.1-2ubuntu6~ppa1404+2) trusty; urgency=medium - * Automated backport upload; no source changes. + * Upload to trusty PPA - -- Alexander Pozdnyakov Sat, 16 Apr 2016 18:36:37 +0300 + -- Thorsten Glaser Tue, 03 Apr 2018 17:24:35 +0200 -qtdeclarative-opensource-src (5.5.1-3.1) unstable; urgency=medium +qtdeclarative-opensource-src (5.5.1-2ubuntu6~ppa1204+2) precise; urgency=medium - * Non-maintainer upload. - * Remove dbg package + [ immerrr ] + * debian/control: add libgl1-mesa-dri dependency to fix GLX-related + test failures - -- Alexander Pozdnyakov Sat, 16 Apr 2016 18:09:08 +0300 + [ Thorsten Glaser ] + * debian/libqt5qml5.symbols: build log update (make one symbol optional) -qtdeclarative-opensource-src (5.5.1-3) unstable; urgency=medium + -- Thorsten Glaser Tue, 03 Apr 2018 16:28:05 +0200 - * Upload to unstable. - * Update symbols files with buildds' logs. +qtdeclarative-opensource-src (5.5.1-2ubuntu6~ppa1204+1) precise; urgency=medium + + * Upload to precise PPA + + -- Thorsten Glaser Tue, 03 Apr 2018 14:15:34 +0200 + +qtdeclarative-opensource-src (5.5.1-2ubuntu6) xenial; urgency=medium + + * debian/patches/Fix-crash-in-hasAtlasTexture.patch: + - Backport patch from Qt 5.6 (LP: #1563320) + + -- Timo Jyrinki Tue, 12 Apr 2016 10:44:18 +0000 + +qtdeclarative-opensource-src (5.5.1-2ubuntu5) xenial; urgency=medium + + * Update symbols from build logs. + * QQuickItemView-forceLayout-Also-call-layout-when-d-f.patch: + - Backport patch from Qt 5.7 to call forceLayout more often (LP: #1556842) + * debian/patches/qml-preserve-composite-singleton-types.patch: + - Fix broken qml type description files (LP: #1541346) + + -- Timo Jyrinki Mon, 01 Feb 2016 14:39:12 +0000 + +qtdeclarative-opensource-src (5.5.1-2ubuntu4) xenial; urgency=medium + + * debian/patches/Add-isTabFence-private-flag.patch: + - Tab should not leave dialog/popover/menu (LP: #1526208) + * debian/patches/QQuickItem-fix-an-infinite-loop-nextItemInFocusChain.patch + debian/patches/QQuickItem-fix-another-infinite-loop-in-nextItemInFo.patch: + - Refine the previous patch (LP: #1526208) + + -- Timo Jyrinki Sat, 30 Jan 2016 14:06:58 +0000 + +qtdeclarative-opensource-src (5.5.1-2ubuntu3) xenial; urgency=medium + + * debian/patches/Flickable-avoid-perturbing-the-timeline-further-whil.patch: + - Avoid infinite velocity during release, after a drag. (LP: #1521917) + * debian/patches/MultiPointTouchArea-Fixed-released-duplication-on-mo.patch: + - Fix every key being pressed twice on desktop (LP: #1451554) - -- Lisandro Damián Nicanor Pérez Meyer Wed, 21 Oct 2015 15:55:25 -0300 + -- Timo Jyrinki Mon, 14 Dec 2015 07:02:00 +0000 + +qtdeclarative-opensource-src (5.5.1-2ubuntu2) xenial; urgency=high + + * Fix symbols for s390x. + + -- Dimitri John Ledkov Wed, 09 Dec 2015 13:14:34 +0000 + +qtdeclarative-opensource-src (5.5.1-2ubuntu1) xenial; urgency=medium + + * New upstream release. (LP: #1502883) + * Remove patches no longer needed: + - debian/patches/High-dpi-SVG-and-QQuickImageProvider-Images.patch + - debian/patches/aarch64.patch + - debian/patches/check_system_double-conversion.patch + - debian/patches/ppc64el.patch + * Rebase patches: + - debian/patches/Add-QQuickAsyncImageProvider.patch + - debian/patches/disable_failing_tests.patch + - debian/patches/QML-Compilation-unit-caching-and-JIT-changes.patch + (LP: #1437320) + * Drop upstreamed patches: + - debian/patches/Fix-memory-leak-when-QQuickPixmapReply-Event-is-dele.patch + * Update .install files. + * Skip tests also on ppc64el, they are flaky. + * Update symbols and mark/unmark private ones. + * Bump ABI version to 5-5-0. + * Bump build dependencies. + * Build dep on libqt5xcbqpa5 to be able to run the tests under xvfb. + * Update Vcs url:s to Debian git. + * Add qmlplugindump-Don-t-try-to-import-Qt.test.qtestroot.patch + (LP: #1473976) + + -- Timo Jyrinki Tue, 01 Dec 2015 08:12:31 +0000 qtdeclarative-opensource-src (5.5.1-2) experimental; urgency=medium @@ -94,6 +166,65 @@ -- Lisandro Damián Nicanor Pérez Meyer Tue, 23 Jun 2015 10:40:41 -0300 +qtdeclarative-opensource-src (5.4.2-1ubuntu7) xenial; urgency=medium + + * debian/patches/Don-t-make-currentIndex-skip-an-extra-item-on-remova.patch: + - Fix jumping several scopes on unstarring (LP: #1508260) + * debian/patches/Image-fix-crash-when-switching-between-multiple-scre.patch: + - Fix a crasher when switching between multiple screens. + + -- Timo Jyrinki Fri, 13 Nov 2015 08:06:56 +0000 + +qtdeclarative-opensource-src (5.4.2-1ubuntu6) wily; urgency=medium + + * debian/patches/Fix-memory-leak-when-QQuickPixmapReply-Event-is-dele.patch + debian/patches/Fix-memory-leak-when-using-async-image-providers.patch: + - Fix memory leaks (LP: #1484914) + + -- Timo Jyrinki Tue, 01 Sep 2015 12:02:43 +0000 + +qtdeclarative-opensource-src (5.4.2-1ubuntu5) wily; urgency=medium + + * debian/patches/Don-t-change-the-currentItem-after-a-viewport-resize.patch: + - Fix ListView's currentIndex changing when view is resized (LP: #1433442) + + -- Timo Jyrinki Thu, 13 Aug 2015 12:30:49 +0300 + +qtdeclarative-opensource-src (5.4.2-1ubuntu4) wily; urgency=medium + + * Rebuild for GCC5 transition. + * Update symbols. + + -- Timo Jyrinki Fri, 10 Jul 2015 09:24:02 +0300 + +qtdeclarative-opensource-src (5.4.2-1ubuntu3) wily; urgency=medium + + * debian/patches/Fix-implicitHeight-for-Text-items-bindings-dependent.patch: + - Fix character overlapping (LP: #1468403) + + -- Timo Jyrinki Thu, 16 Jul 2015 12:24:04 +0000 + +qtdeclarative-opensource-src (5.4.2-1ubuntu2) wily; urgency=medium + + * debian/patches/Add-QQuickAsyncImageProvider.patch: + - Fix segfault by importing https://codereview.qt-project.org/#/c/115522/ + and https://codereview.qt-project.org/#/c/120638/ + (LP: #1469611) + + -- Timo Jyrinki Wed, 08 Jul 2015 05:20:41 +0000 + +qtdeclarative-opensource-src (5.4.2-1ubuntu1) wily; urgency=medium + + * New upstream release. + * Drop patches merged upstream: + - Fix-regression-where-QQuickScreenAttached-overwrites.patch + - Fix-crash-in-overdraw-and-change-visualizers.patch + - Protect-the-RegExp-against-early-garbage-collection.patch + * Refresh Add-QQuickAsyncImageProvider.patch to apply + * Skip a few pixmapcache tests that fail on half of the builders + + -- Timo Jyrinki Thu, 11 Jun 2015 05:01:53 +0000 + qtdeclarative-opensource-src (5.4.2-1) experimental; urgency=medium [ Dmitry Shachnev ] @@ -114,6 +245,50 @@ -- Lisandro Damián Nicanor Pérez Meyer Tue, 02 Jun 2015 17:29:00 -0300 +qtdeclarative-opensource-src (5.4.1-1ubuntu7) vivid; urgency=medium + + * debian/patches/Add-QQuickAsyncImageProvider.patch: + - Backport QQuickAsyncImageProvider (LP: #1439263) (LP: #1425043) + * debian/patches/Always-remove-reply-from-replies-when-processing-can.patch: + - Drop, replaced by the new patch. + + -- Timo Jyrinki Tue, 28 Apr 2015 08:50:56 +0000 + +qtdeclarative-opensource-src (5.4.1-1ubuntu6) vivid; urgency=medium + + * debian/patches/Make-sure-we-stop-animators-if-they-are-yet-to-be-st.patch + - Pick from upstream (LP: #1441822) + + -- Timo Jyrinki Mon, 20 Apr 2015 08:39:58 +0000 + +qtdeclarative-opensource-src (5.4.1-1ubuntu5) vivid; urgency=medium + + * debian/patches/Protect-the-RegExp-against-early-garbage-collection.patch + - Fix a potential random crasher with a fix from upstream (LP: #1443981) + + -- Timo Jyrinki Wed, 15 Apr 2015 07:19:34 +0000 + +qtdeclarative-opensource-src (5.4.1-1ubuntu4) vivid; urgency=medium + + * debian/patches/Always-remove-reply-from-replies-when-processing-can.patch: + - Fix a crash when switching scopes (LP: #1431798) + + -- Timo Jyrinki Fri, 20 Mar 2015 13:26:18 +0000 + +qtdeclarative-opensource-src (5.4.1-1ubuntu3) vivid; urgency=medium + + * New upstream release. + * Drop patches, fixed upstream: + - Support-RFC2822Date-date-format-similar-to-V8.patch + * Merge with Debian 5.4.1-1, bringing better private symbols marking + (LP: #1426314) + * debian/patches/Fix-crash-in-overdraw-and-change-visualizers.patch: + - Fix a potential crasher (LP: #1430337) + * debian/patches/High-dpi-SVG-and-QQuickImageProvider-Images.patch: + - Fix scaling of source size if devicepixelratio is set + + -- Timo Jyrinki Wed, 11 Mar 2015 10:56:54 +0000 + qtdeclarative-opensource-src (5.4.1-1) experimental; urgency=medium * New upstream release. @@ -144,6 +319,36 @@ -- Lisandro Damián Nicanor Pérez Meyer Wed, 18 Feb 2015 16:52:44 -0300 +qtdeclarative-opensource-src (5.4.0-4ubuntu2) vivid; urgency=medium + + * debian/patches/QML-Compilation-unit-caching-and-JIT-changes.patch: + - [regression] Re-enable the opt-in QML cache patch (LP: #1418060) + * Update symbols from build logs. + * Don't run unit tests on 32-bit powerpc, those fail more often + than not. Other archs not affected. + + -- Timo Jyrinki Tue, 24 Feb 2015 14:01:39 +0000 + +qtdeclarative-opensource-src (5.4.0-4ubuntu1) vivid; urgency=medium + + * New upstream release. + * Switch to using xvfb-run for tests + * Bump dependencies + * Drop patches: + - freebsd_registers.diff + - Avoid-race-condition-in-QQmlEngine-on-shutdown.patch + - Fix-crashes-when-calling-Array.sort-with-imperfect-s.patch + * Update symbols and mark private ones + * Sync with Debian 5.4.0-4 + - Keep gles packages support, transitional packages, tests enablement + and additional patches + * debian/patches/Fix-regression-where-QQuickScreenAttached-overwrites.patch: + - Fix orientation not working (LP: #1418370) + * debian/patches/QML-Compilation-unit-caching-and-JIT-changes.patch: + - Comment out, needs rebasing. + + -- Timo Jyrinki Fri, 13 Feb 2015 06:17:15 +0000 + qtdeclarative-opensource-src (5.4.0-4) experimental; urgency=medium * Update symbols files with buildds’ logs. @@ -192,6 +397,50 @@ -- Lisandro Damián Nicanor Pérez Meyer Wed, 24 Sep 2014 23:22:11 -0300 +qtdeclarative-opensource-src (5.3.2-3ubuntu3) vivid; urgency=medium + + [ Ricardo Mendoza ] + * debian/patches/QML-Compilation-unit-caching-and-JIT-changes.patch + - Implement QV4 JIT cache to reduce application startup speed by + removing unnecessary compiler/assembler runs. This can be enabled + by exporting QV4_ENABLE_JIT_CACHE=1. + + [ Timo Jyrinki ] + * Update symbols + + -- Ricardo Mendoza Tue, 03 Feb 2015 14:51:20 +0100 + +qtdeclarative-opensource-src (5.3.2-3ubuntu2) vivid; urgency=medium + + * debian/patches/Avoid-race-condition-in-QQmlEngine-on-shutdown.patch + - Cherry-pick an app shutdown crash fix (LP: #1373039) + * debian/patches/Fix-crashes-when-calling-Array.sort-with-imperfect-s.patch + - Cherry-pick a fix for a crasher in Array.sort (LP: #1295119) + + -- Timo Jyrinki Wed, 03 Dec 2014 08:32:46 +0000 + +qtdeclarative-opensource-src (5.3.2-3ubuntu1) vivid; urgency=medium + + * New upstream release. + * Drop patches merged upstream: + - Make-ItemViews-displayMargin-work-correctly-when-set.patch + - v4_yarr_jit_push_pop_addressTempRegister.patch + - fix_qqmlobjectcreator.patch + - Implement-proper-support-for-layoutChange-in-QQmlDel.patch + - Fix-crash-with-running-animators-on-re-shown-windows.patch + - Fix-crash-when-deleting-component-in-Component.onCom.patch + - Fix-interaction-of-garbage-collector-with-JS-objects.patch + - 8454a21b-Flickable-Cancel-interaction-on-interactive-changes.patch + - Avoid-double-deletion-when-deleting-an-incubating-co.patch + - Fix-bindings-to-when-property-of-States-not-always-w.patch + - Fix-crash-in-QObjectWrapper.patch + * Sync with Debian 5.3.2-3 + - Keep gles packages support, transitional packages, tests enablement + and additional patches + * Update symbols and mark private ones. + + -- Timo Jyrinki Mon, 27 Oct 2014 05:56:48 +0000 + qtdeclarative-opensource-src (5.3.2-3) unstable; urgency=medium * Upload to unstable. @@ -307,6 +556,137 @@ -- Lisandro Damián Nicanor Pérez Meyer Thu, 05 Jun 2014 19:01:51 -0300 +qtdeclarative-opensource-src (5.3.0-3ubuntu12) utopic; urgency=medium + + * debian/patches/Fix-crash-in-QObjectWrapper.patch: + - Cherry-pick a fix for a crash happening in some new code (LP: #1369930) + + -- Timo Jyrinki Tue, 16 Sep 2014 08:45:09 +0000 + +qtdeclarative-opensource-src (5.3.0-3ubuntu11) utopic; urgency=medium + + * debian/patches/Fix-bindings-to-when-property-of-States-not-always-w.patch: + - Cherry-pick a fix for occasional Unity8 test errors (LP: #1368019) + + -- Timo Jyrinki Thu, 11 Sep 2014 05:06:20 +0000 + +qtdeclarative-opensource-src (5.3.0-3ubuntu10) utopic; urgency=medium + + * debian/patches/Avoid-double-deletion-when-deleting-an-incubating-co.patch: + - Cherry-pick a fix to double deletion (LP: #1358169) + + -- Timo Jyrinki Mon, 18 Aug 2014 11:13:41 +0000 + +qtdeclarative-opensource-src (5.3.0-3ubuntu9) utopic; urgency=medium + + * debian/patches/Fix-crash-with-running-animators-on-re-shown-windows.patch: + - Cherry-pick a fix from Qt 5.3.1 to fix crash in RotationAnimator + (LP: #1356279) + + -- Timo Jyrinki Wed, 13 Aug 2014 12:18:47 +0000 + +qtdeclarative-opensource-src (5.3.0-3ubuntu8) utopic; urgency=medium + + [ Michał Sawicz ] + * debian/patches/8454a21b-Flickable-Cancel-interaction-on-interactive-changes.patch + - Fix flickable interaction (LP: #1349705) + * debian/control + * debian/rules + - Force gcc-4.8 to avoid symbols changes + + [ Timo Jyrinki ] + * debian/patches/parenttosubcreator_qqmlobjectcreator.patch: + - Drop, rejected by upstream + * debian/patches/Fix-crash-when-deleting-component-in-Component.onCom.patch + debian/patches/Fix-interaction-of-garbage-collector-with-JS-objects.patch: + - Replace the old patch with accepted upstream approach (LP: #1349297) + + -- Timo Jyrinki Mon, 04 Aug 2014 10:58:28 +0000 + +qtdeclarative-opensource-src (5.3.0-3ubuntu7) utopic; urgency=medium + + * debian/patches/Support-RFC2822Date-date-format-similar-to-V8.patch + - Support RFC 2822 format (LP: #1298978) + + -- Zoltán Balogh Thu, 03 Jul 2014 15:52:17 +0300 + +qtdeclarative-opensource-src (5.3.0-3ubuntu6) utopic; urgency=medium + + * QQMLObjectCreator: Pass down parent to subCreator + + -- Albert Astals Cid Tue, 01 Jul 2014 10:17:13 +0200 + +qtdeclarative-opensource-src (5.3.0-3ubuntu5) utopic; urgency=medium + + * debian/patches/Implement-proper-support-for-layoutChange-in-QQmlDel.patch: + - Fix a performance hit when editing sorted lists (LP: #1303746) + - update symbols + + -- Michael Zanetti Wed, 25 Jun 2014 19:27:13 +0200 + +qtdeclarative-opensource-src (5.3.0-3ubuntu4) utopic; urgency=medium + + [ Ricardo Salveti de Araujo ] + * debian/control: + - Updating dependencies as we now also have libqt5quickwidgets5-gles + * libqt5quickwidgets5.symbols: updating to allow gles variant + + [ Timo Jyrinki ] + * Update libqt5quickparticles5.symbols from build logs + + -- Ricardo Salveti de Araujo Thu, 19 Jun 2014 02:39:21 -0300 + +qtdeclarative-opensource-src (5.3.0-3ubuntu3) utopic; urgency=medium + + * fix_qqmlobjectcreator.patch: + - Tentative patch for Qt crashes in Unity 8 (LP: #1328485) + + -- Timo Jyrinki Tue, 17 Jun 2014 10:41:09 +0000 + +qtdeclarative-opensource-src (5.3.0-3ubuntu2) utopic; urgency=medium + + * v4_yarr_jit_push_pop_addressTempRegister.patch: + - Fix from upstream for arm crasher bug (LP: #1323997) + + -- Timo Jyrinki Fri, 06 Jun 2014 05:49:55 +0000 + +qtdeclarative-opensource-src (5.3.0-3ubuntu1) utopic; urgency=medium + + * New upstream release + * Drop patches that were submitted to or backports from upstream, now + in 5.3.0: + - correct_geometry_for_2x_pixmaps.patch + - fix_qtbug_32004.patch + - qtquick_delegate_creation_range_itemviews.patch + - Do-not-crash-if-proc-is-not-mounted.patch + - Make-sure-the-test-window-has-focus.patch + - V4-Array.push-on-QStringList-should-invoke-putIndexe.patch + - Guarantee-event-s-default-state-as-not-accepted.patch + - Fix-crash-when-accessing-var-properties-in-objects-w.patch + - clean_chain_of_incubated_objects.patch + - Fix-crash-when-appending-arrays-to-sub-models-in-lis.patch + - Don-t-crash-on-Runtime-getQmlImportedScripts.patch + - Fix-global-object-handling-in-worker-script-JS-files.patch + - V4-JIT-save-restore-ebx-GOT-ptr-on-linux-x86.patch + - V4-fix-range-sorting.patch + - V4-regalloc-fix-interval-splitting-when-register-pre.patch + - 0001-Call-tzset-from-getLocalTZA-so-we-learn-about-tz-cha.patch + - Support-RFC2822Date-date-format-similar-to-V8.patch + - Fix-marking-of-prototype-objects-in-chain.patch + - QQuickItemView-QQuickPathView-Fix-creation-of-delega.patch + - Implement-proper-support-for-layoutChange-in-QQmlDel.patch + - V4-regalloc-fix-register-spill-choice-under-high-pre.patch + * Drop patch that is unneeded and resolved upstream in a different way: + - Fix_QSmoothedAnimation_sometimes_getting_stuck.patch + * debian/patches/Make-ItemViews-displayMargin-work-correctly-when-set.patch: + - Cherry-pick from https://codereview.qt-project.org/#change,85437 + - Needs also Unity8 update + * Update symbols files + * Bump abi + * Sync with Debian 5.3.0-3 + + -- Timo Jyrinki Thu, 05 Jun 2014 08:41:25 +0000 + qtdeclarative-opensource-src (5.3.0-3) experimental; urgency=medium * Add libqt5quickwidgets5 to qtdeclarative5-dev. @@ -352,6 +732,54 @@ -- Lisandro Damián Nicanor Pérez Meyer Thu, 22 May 2014 02:03:52 -0300 +qtdeclarative-opensource-src (5.2.1-5ubuntu5) utopic; urgency=medium + + * Tweak the Replaces to work on Ubuntu + + -- Timo Jyrinki Thu, 22 May 2014 13:12:34 +0000 + +qtdeclarative-opensource-src (5.2.1-5ubuntu4) utopic; urgency=medium + + [ Lisandro Damián Nicanor Pérez Meyer ] + * qml-model-qtqml-models2 should have been named qml-module-qtqml-models2. + Create qml-module-qtqml-models2 and make qml-model-qtqml-models2 a + transitional dummy package. + + -- Timo Jyrinki Thu, 22 May 2014 07:03:25 +0000 + +qtdeclarative-opensource-src (5.2.1-5ubuntu3) utopic; urgency=medium + + * qtquick_delegate_creation_range_itemviews.patch: + - Update the patch to be more forward compatible (LP: #1319777) + + -- Timo Jyrinki Thu, 15 May 2014 11:27:00 +0000 + +qtdeclarative-opensource-src (5.2.1-5ubuntu2) utopic; urgency=medium + + * Make transitional packages arch: any and multi-arch: same to prevent + problems in cross-building package installation with the old package + names. + + -- Timo Jyrinki Wed, 07 May 2014 07:54:19 +0000 + +qtdeclarative-opensource-src (5.2.1-5ubuntu1) utopic; urgency=medium + + * Resync with Debian including renamed QML packages (LP: #1313547) + * Depend conditionally on libgl1 (LP: #1278871) + * debian/patches/Fix-marking-of-prototype-objects-in-chain.patch + - Fix a crasher with deleted QQmlCompiledData as suggested by upstream + (LP: #1304248) + * debian/patches/QQuickItemView-QQuickPathView-Fix-creation-of-delega.patch: + - Fix "Carousel doesn't re-render properly after scrolling" + (LP: #1307578) + * debian/patches/Implement-proper-support-for-layoutChange-in-QQmlDel.patch: + - Fix a performance hit when editing sorted lists (LP: #1303746) + * debian/patches/V4-regalloc-fix-register-spill-choice-under-high-pre.patch: + - Fix differing JS results on AMD64/i386 (LP: #1312571) + * Updated symbols + + -- Timo Jyrinki Mon, 28 Apr 2014 07:35:22 +0000 + qtdeclarative-opensource-src (5.2.1-5) unstable; urgency=medium * Rename QML modules as such, creating the proper transitional packages and @@ -384,6 +812,186 @@ -- Lisandro Damián Nicanor Pérez Meyer Mon, 24 Mar 2014 21:45:21 -0300 +qtdeclarative-opensource-src (5.2.1-3ubuntu15) trusty; urgency=medium + + * Fix_QSmoothedAnimation_sometimes_getting_stuck.patch + - Fix SmoothedAnimation getting stuck (LP: #1305015) (LP: #1300326) + + -- Timo Jyrinki Thu, 10 Apr 2014 09:00:28 +0300 + +qtdeclarative-opensource-src (5.2.1-3ubuntu14) trusty; urgency=medium + + * libqt5quick5.symbols, libqt5quicktest5.symbols: adding dep alternatives + for the version compatible with OpenGLES (provided by another src pkg) + * debian/control: changing qtdeclarative5-dev deps so it can also be used + together with the ones built with the OpenGLES backend by default + + -- Ricardo Salveti de Araujo Thu, 10 Apr 2014 00:33:21 -0300 + +qtdeclarative-opensource-src (5.2.1-3ubuntu13) trusty; urgency=medium + + * debian/patches/Support-RFC2822Date-date-format-similar-to-V8.patch + - Support RFC 2822 format (LP: #1298978) + + -- Timo Jyrinki Thu, 03 Apr 2014 05:55:24 +0000 + +qtdeclarative-opensource-src (5.2.1-3ubuntu12) trusty; urgency=medium + + * 0001-Call-tzset-from-getLocalTZA-so-we-learn-about-tz-cha.patch: Call + tzset() from getLocalTZA() so we learn about tz changes. Cherry-pick from + upstream stable branch (LP: #1295550) + + -- Iain Lane Mon, 31 Mar 2014 12:05:28 +0100 + +qtdeclarative-opensource-src (5.2.1-3ubuntu11) trusty; urgency=medium + + * debian/patches/Don-t-crash-on-Runtime-getQmlImportedScripts.patch + - Backport from upstream code submittal (LP: #1294181) + * debian/patches/Fix-global-object-handling-in-worker-script-JS-files.patch + - Backport a fix from upstream (LP: #1294019) + * debian/patches/V4-JIT-save-restore-ebx-GOT-ptr-on-linux-x86.patch + debian/patches/V4-fix-range-sorting.patch + debian/patches/V4-regalloc-fix-interval-splitting-when-register-pre.patch + - Replace Don-t-use-ebx-in-the-x86-register-allocator.patch with a newer + set of fixes from upstream (LP: #1271033) + + -- Timo Jyrinki Mon, 24 Mar 2014 06:27:18 +0000 + +qtdeclarative-opensource-src (5.2.1-3ubuntu10) trusty; urgency=medium + + * debian/patches/Fix-crash-when-appending-arrays-to-sub-models-in-lis.patch + - Backport from upstream https://codereview.qt-project.org/#change,80934 + (LP: #1291602) + + -- Timo Jyrinki Fri, 14 Mar 2014 09:37:56 +0000 + +qtdeclarative-opensource-src (5.2.1-3ubuntu9) trusty; urgency=medium + + * debian/patches/clean_chain_of_incubated_objects.patch: + - Backport from upstream https://codereview.qt-project.org/#change,80893 + + -- Timo Jyrinki Fri, 14 Mar 2014 07:56:15 +0000 + +qtdeclarative-opensource-src (5.2.1-3ubuntu8) trusty; urgency=medium + + * debian/libqt5qml5.symbols: + - Update arm64 symbols from build logs + + -- Timo Jyrinki Mon, 10 Mar 2014 16:35:51 +0000 + +qtdeclarative-opensource-src (5.2.1-3ubuntu7) trusty; urgency=medium + + [ Colin Watson ] + * debian/patches/aarch64.patch: + - Update to fix FTBFS + + -- Timo Jyrinki Mon, 10 Mar 2014 15:39:52 +0000 + +qtdeclarative-opensource-src (5.2.1-3ubuntu6) trusty; urgency=medium + + * debian/libqt5qml5.symbols: + - Update another symbol from build logs + + -- Timo Jyrinki Sat, 08 Mar 2014 15:13:51 +0000 + +qtdeclarative-opensource-src (5.2.1-3ubuntu5) trusty; urgency=medium + + [ Colin Watson ] + * debian/patches/aarch64.patch: + - Add support for arm64. (Ported from webkitgtk.) + * debian/patches/ppc64el.patch: + - Handle little-endian mode for PowerPC. + * debian/libqtqml5.symbols: + - Mark MASM symbols as "amd64 armel armhf i386 mips mipsel" rather than + "!powerpc", corresponding to architectures where the assembler is + enabled. + - Apply some other miscellaneous symbols adjustments for ppc64el. + + -- Timo Jyrinki Sat, 08 Mar 2014 10:04:10 +0200 + +qtdeclarative-opensource-src (5.2.1-3ubuntu4) trusty; urgency=medium + + * debian/patches/Fix-crash-when-accessing-var-properties-in-objects-w.patch: + - Cherry-pick from upstream https://codereview.qt-project.org/#change,79857 + (LP: #1277206) + + -- Timo Jyrinki Tue, 04 Mar 2014 17:08:07 +0000 + +qtdeclarative-opensource-src (5.2.1-3ubuntu3) trusty; urgency=medium + + * Update powerpc symbols from build logs and Debian + + -- Timo Jyrinki Fri, 28 Feb 2014 05:43:37 +0000 + +qtdeclarative-opensource-src (5.2.1-3ubuntu2) trusty; urgency=medium + + * Update symbols from build logs + + -- Timo Jyrinki Thu, 27 Feb 2014 16:30:51 +0000 + +qtdeclarative-opensource-src (5.2.1-3ubuntu1) trusty; urgency=low + + [ Timo Jyrinki ] + * New upstream release. (LP: #1253603) (LP: #1242629) + * Bump build deps to 5.2.1 + * Drop a patch that upstream has fixed in another way: + - rendering_performance_fix_lp1092358.patch + * Drop patches submitted and merged upstream: + - 0001-Fallback-to-QMetaObject-for-properties-not-in-QQmlPr.patch + - 8a3d48915c29484c9ffb2fb8f0e3b569a9fe9b44_backport.patch + - 03_51665a9ecaebaef2382c1e76ebedfeffacb4b3de_backport.patch + - 04_9d6cd72353e4862592c016951810abf9a7ab8079_backport.patch + - fix_1236765.patch + - qml_type_loading.patch + * Drop other backported patches: + - 0b190b7114c816689eeb8478ea5151732bc7a5de_backport.patch + - 81a9dd71b9ce60ab4cae629b67d6f26ebdeb19db_backport.patch + - 01_8563adb737cec5d440197ddbd514fe201c5f18ff_backport.patch + - 02_53e317468626284fe26877659dff551ce3bc0e55_backport.patch + * Update *.install + * Add new packages qtdeclarative5-dialogs-plugin, + qtdeclarative5-models-plugin and qtdeclarative5-privatewidgets-plugin + * Add debian/patches/correct_geometry_for_2x_pixmaps.patch + (LP: #1214374) + * Update symbols + * 0001-Reset-on-model-layout-changed.patch was merged upstream (LP: #1242629) + * Add qtdeclarative5-settings-plugin package + * Add new binaries like v4, qml, and update otherwise .install files + * Temporarily compile with CONFIG+=debug + * Resync with Debian 5.2.1-3 + * Update to a new stable branch release (LP: #1259145) (LP: #1257322) + (LP: #1258057) + * Temporarily lower pkg-kde-tools dependency until it's synced + * Add debian/patches/Do-not-crash-if-proc-is-not-mounted.patch + - Cherry-pick a patch from upstream (LP: #1268507) + * Add debian/patches/Make-sure-the-test-window-has-focus.patch + - Cherry-pick a patch, should help with xvfb test runs + * Add Don-t-use-ebx-in-the-x86-register-allocator.patch + - Cherry-pick a patch (LP: #1271033) + * Add V4-Array.push-on-QStringList-should-invoke-putIndexe.patch + - Cherry-pick a patch (LP: #1273684) + + [ Daniel d'Andrada ] + * Add debian/patches/fix_qtbug_32004.patch (LP: #1252709) + + [ Michał Sawicz ] + * Final 5.2 release. + * Refresh debian/patches/fix_qtbug_32004.patch + + [ Dmitry Shachnev ] + * Merge with Debian up to 5.2.0-5: + - Now qtdeclarative5-examples depends on all needed plugins + (LP: #1260457). + + [ Omer Akram ] + * Run unittests during build (LP: #1193370) + + [ Arthur Mello ] + * Add Guarantee-event-s-default-state-as-not-accepted.patch + - Cherry-pick a patch from upstream + + -- Timo Jyrinki Thu, 27 Feb 2014 14:29:04 +0000 + qtdeclarative-opensource-src (5.2.1-3) experimental; urgency=medium [ Dmitry Shachnev ] @@ -561,6 +1169,64 @@ -- Lisandro Damián Nicanor Pérez Meyer Thu, 11 Jul 2013 13:39:12 -0300 +qtdeclarative-opensource-src (5.0.2-6ubuntu6) trusty; urgency=low + + [ Albert Astals Cid ] + * Improve the delegate range patch (LP: #1281188). + + -- Dmitry Shachnev Tue, 18 Feb 2014 18:28:19 +0400 + +qtdeclarative-opensource-src (5.0.2-6ubuntu5) trusty; urgency=low + + [ Timo Jyrinki ] + * Make private headers depend on libqt5v8-5-private-dev, so that packages + building against Qt 5.2 can drop the explicit dependency. + + [ Daniel d'Andrada ] + * debian/patches/fix_qtbug_32004.patch: + - Backport fix for QTBUG-32004 which is slated for Qt 5.3 (LP: #1252709) + + -- Timo Jyrinki Tue, 03 Dec 2013 12:24:05 +0200 + +qtdeclarative-opensource-src (5.0.2-6ubuntu4) saucy; urgency=low + + * debian/patches/fix_1236765.patch: + - Fix infinite loop QQmlIncubator::forceCompletion (LP: #1236765) + + -- Timo Jyrinki Tue, 08 Oct 2013 13:20:40 +0300 + +qtdeclarative-opensource-src (5.0.2-6ubuntu3) saucy; urgency=low + + * debian/patches/qml_type_loading.patch + - Workaround for (LP: #1233705) + + -- Timo Jyrinki Wed, 02 Oct 2013 18:19:11 +0300 + +qtdeclarative-opensource-src (5.0.2-6ubuntu2) saucy; urgency=low + + * Add qtquick_delegate_creation_range_itemviews.patch to patchset. + (LP: #1217924) + + -- Michał Sawicz Wed, 11 Sep 2013 14:03:31 +0200 + +qtdeclarative-opensource-src (5.0.2-6ubuntu1) saucy; urgency=low + + [ Timo Jyrinki ] + * Resync with Debian, remaining changes: + - Keep cherry-picked patches, and symbols + - Keep debian/patches/rendering_performance_fix_lp1092358.patch + - Add Vcs-Bzr field + * Fix https://bugreports.qt-project.org/browse/QTBUG-30246 (LP: #1198830) + - debian/patches/0b190b7114c816689eeb8478ea5151732bc7a5de_backport.patch + - debian/patches/81a9dd71b9ce60ab4cae629b67d6f26ebdeb19db_backport.patch + + [ Dmitry Shachnev ] + * Merge with Debian 5.0.2-6 to bring in documentation packages. + * Note: architecture restrictions have been dropped from this upload, + as requested by the Release Team. + + -- Timo Jyrinki Mon, 08 Jul 2013 07:51:02 +0300 + qtdeclarative-opensource-src (5.0.2-6) experimental; urgency=low * Update symbols files. @@ -626,8 +1292,73 @@ -- Lisandro Damián Nicanor Pérez Meyer Tue, 30 Apr 2013 20:45:49 -0300 +qtdeclarative-opensource-src (5.0.2-1ubuntu2) saucy; urgency=low + + [ Timo Jyrinki ] + * debian/patches/8a3d48915c29484c9ffb2fb8f0e3b569a9fe9b44_backport.patch: + - Cherry-pick from upstream + https://codereview.qt-project.org/#change,56583 (LP: #1183350) + * debian/patches/0001-Fallback-to-QMetaObject-for-properties-not-in-QQmlPr.patch: + - Cherry-pick from upstream + https://codereview.qt-project.org/#change,57392 (LP: #1187746) + + -- Ken VanDine Thu, 20 Jun 2013 15:24:17 -0400 + +qtdeclarative-opensource-src (5.0.2-1ubuntu1) saucy; urgency=low + + [ Timo Jyrinki ] + * debian/patches/we_do_want_the_mouse_event_to_ourselves.patch: + - Drop, merged upstream + * debian/patches/fix_lp1087643.patch: + - Drop, merged upstream + * Merge with Debian experimental, remaining changes: + - Keep architecture restrictions + - Keep debian/patches/rendering_performance_fix_lp1092358.patch + * Add libgl1-mesa-dri dependency for the quick2 plugin (LP: #1176199) + * Cherry-pick listview crasher fixes from upstream 5.1 branch (LP: #1176962): + - debian/patches/01_8563adb737cec5d440197ddbd514fe201c5f18ff_backport.patch + - debian/patches/02_53e317468626284fe26877659dff551ce3bc0e55_backport.patch + - debian/patches/03_51665a9ecaebaef2382c1e76ebedfeffacb4b3de_backport.patch + - debian/patches/04_9d6cd72353e4862592c016951810abf9a7ab8079_backport.patch + + [ Lisandro Damián Nicanor Pérez Meyer ] + * Fix wrong permissions of examples. + + -- Timo Jyrinki Mon, 29 Apr 2013 16:27:13 -0700 + qtdeclarative-opensource-src (5.0.2-1) experimental; urgency=low * Initial release. (Closes: #697509) -- Lisandro Damián Nicanor Pérez Meyer Sun, 21 Apr 2013 21:46:50 -0300 + +qtdeclarative-opensource-src (5.0.1-0ubuntu3) raring; urgency=low + + * Fix pkgconfig Libs.private path (LP: #1125156) + + -- Timo Jyrinki Thu, 21 Mar 2013 06:48:55 +0000 + +qtdeclarative-opensource-src (5.0.1-0ubuntu2) raring; urgency=low + + [ Ken VanDine ] + * debian/control + - libqt5v8-5-dev only supports amd64, i386 and armhf so setting + Architecture to just those + + -- Ken VanDine Wed, 20 Mar 2013 12:41:07 -0400 + +qtdeclarative-opensource-src (5.0.1-0ubuntu1) raring; urgency=low + + [ Timo Jyrinki ] + * New upstream release. + * Add patches: + - fix_lp1087643.patch + - rendering_performance_fix_lp1092358.patch + - we_do_want_the_mouse_event_to_ourselves.patch + * Cherry-pick from upstream: + - add_license_files.patch + + [ Didier Roche ] + * Misc minor fixes to lintian override and patch formats + + -- Timo Jyrinki Tue, 05 Feb 2013 14:17:19 +0000 diff -Nru qtdeclarative-opensource-src-5.5.1/debian/control qtdeclarative-opensource-src-5.5.1/debian/control --- qtdeclarative-opensource-src-5.5.1/debian/control 2016-04-16 15:08:25.000000000 +0000 +++ qtdeclarative-opensource-src-5.5.1/debian/control 2018-04-03 14:24:11.000000000 +0000 @@ -1,7 +1,8 @@ Source: qtdeclarative-opensource-src Section: libs Priority: optional -Maintainer: Debian Qt/KDE Maintainers +Maintainer: Ubuntu Developers +XSBC-Original-Maintainer: Debian Qt/KDE Maintainers Uploaders: Sune Vuorela , Pino Toscano , Lisandro Damián Nicanor Pérez Meyer , @@ -10,10 +11,13 @@ Build-Depends: debhelper (>= 9), dpkg-dev (>= 1.16.1), libdouble-conversion-dev, + libgl1-mesa-dri, libqt5xmlpatterns5-private-dev (>= 5.5.1~), pkg-kde-tools (>= 0.15.17~), python, - qtbase5-private-dev (>= 5.5.1+dfsg~) + qtbase5-private-dev (>= 5.5.1+dfsg~), + xauth, + xvfb Standards-Version: 3.9.6 Homepage: http://qt-project.org/ Vcs-Git: git://anonscm.debian.org/pkg-kde/qt/qtdeclarative.git @@ -25,7 +29,6 @@ Multi-Arch: same Pre-Depends: ${misc:Pre-Depends} Depends: ${misc:Depends}, ${shlibs:Depends} -Recommends: libgl1-mesa-glx Description: Qt 5 QML module Qt is a cross-platform C++ application framework. Qt's primary feature is its rich set of widgets that provide standard GUI functionality. @@ -83,6 +86,17 @@ . This package contains the Qt Quick Widgets library for QtDeclarative module. +Package: qtdeclarative5-folderlistmodel-plugin +Architecture: any +Multi-Arch: same +Section: oldlibs +Depends: qml-module-qt-labs-folderlistmodel, ${misc:Depends} +Description: transitional dummy package for Qt 5 folderlistmodel QML module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This is a transitional dummy package which can be safely removed. + Package: qml-module-qt-labs-folderlistmodel Architecture: any Multi-Arch: same @@ -96,6 +110,17 @@ . The FolderListModel provides a model of the contents of a file system folder. +Package: qtdeclarative5-localstorage-plugin +Architecture: any +Multi-Arch: same +Section: oldlibs +Depends: qml-module-qtquick-localstorage, ${misc:Depends} +Description: transitional dummy package for Qt 5 localstorage QML module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This is a transitional dummy package which can be safely removed. + Package: qml-module-qtquick-localstorage Architecture: any Multi-Arch: same @@ -109,15 +134,24 @@ . This is a singleton type for reading and writing to SQLite databases. +Package: qtdeclarative5-models-plugin +Architecture: any +Multi-Arch: same +Section: oldlibs +Depends: qml-module-qtqml-models2, ${misc:Depends} +Description: transitional dummy package for Qt 5 Models2 QML module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This is a transitional dummy package which can be safely removed. + Package: qml-module-qtqml-models2 Architecture: any Multi-Arch: same Pre-Depends: ${misc:Pre-Depends} Depends: ${misc:Depends}, ${shlibs:Depends} -Breaks: qml-model-qtqml-models2 (<< 5.3.0~), - qtdeclarative5-models-plugin (<< 5.2.1-5~) -Replaces: qml-model-qtqml-models2 (<< 5.3.0~), - qtdeclarative5-models-plugin (<< 5.2.1-5~) +Breaks: qtdeclarative5-models-plugin (<< 5.2.1-5~), qml-model-qtqml-models2 (<< 5.2.1-5ubuntu4~) +Replaces: qtdeclarative5-models-plugin (<< 5.2.1-5~), qml-model-qtqml-models2 (<< 5.2.1-5ubuntu4~) Description: Qt 5 Models2 QML module Qt is a cross-platform C++ application framework. Qt's primary feature is its rich set of widgets that provide standard GUI functionality. @@ -145,6 +179,17 @@ . This is a transitional dummy package which can be safely removed. +Package: qtdeclarative5-particles-plugin +Architecture: any +Multi-Arch: same +Section: oldlibs +Depends: qml-module-qtquick-particles2, ${misc:Depends} +Description: transitional dummy package for Qt 5 particles 2 QML module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This is a transitional dummy package which can be safely removed. + Package: qml-module-qtquick-particles2 Architecture: any Multi-Arch: same @@ -158,11 +203,22 @@ . This QML module contains a particle system for Qt Quick. +Package: qtdeclarative5-qtquick2-plugin +Architecture: any +Multi-Arch: same +Section: oldlibs +Depends: qml-module-qtquick2, ${misc:Depends} +Description: transitional dummy package Qt 5 Qt Quick 2 QML module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This is a transitional dummy package which can be safely removed. + Package: qml-module-qtquick2 Architecture: any Multi-Arch: same Pre-Depends: ${misc:Pre-Depends} -Depends: libgl1-mesa-dri, ${misc:Depends}, ${shlibs:Depends} +Depends: libgl1-mesa-dri | libgl1, ${misc:Depends}, ${shlibs:Depends} Breaks: qtdeclarative5-qtquick2-plugin (<< 5.2.1-5~) Replaces: qtdeclarative5-qtquick2-plugin (<< 5.2.1-5~) Description: Qt 5 Qt Quick 2 QML module @@ -171,6 +227,17 @@ . This package contains the Qt Quick 2 QML module for Qt declarative. +Package: qtdeclarative5-settings-plugin +Architecture: any +Multi-Arch: same +Section: oldlibs +Depends: qml-module-qt-labs-settings, ${misc:Depends} +Description: transitional dummy package for Qt 5 settings QML module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This is a transitional dummy package which can be safely removed. + Package: qml-module-qt-labs-settings Architecture: any Multi-Arch: same @@ -184,6 +251,17 @@ . This package contains the settings QML module for Qt declarative. +Package: qtdeclarative5-test-plugin +Architecture: any +Multi-Arch: same +Section: oldlibs +Depends: qml-module-qttest, ${misc:Depends} +Description: transitional dummy package for Qt 5 test QML module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This is a transitional dummy package which can be safely removed. + Package: qml-module-qttest Architecture: any Multi-Arch: same @@ -197,6 +275,17 @@ . This package contains the test QML module for Qt declarative. +Package: qtdeclarative5-window-plugin +Architecture: any +Multi-Arch: same +Section: oldlibs +Depends: qml-module-qtquick-window2, ${misc:Depends} +Description: transitional dummy package for Qt 5 window 2 QML module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This is a transitional dummy package which can be safely removed. + Package: qml-module-qtquick-window2 Architecture: any Multi-Arch: same @@ -211,6 +300,17 @@ This QML module contains types for creating top-level windows and accessing screen information. +Package: qtdeclarative5-xmllistmodel-plugin +Architecture: any +Multi-Arch: same +Section: oldlibs +Depends: qml-module-qtquick-xmllistmodel, ${misc:Depends} +Description: transitional dummy package for Qt 5 xmllistmodel QML module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This is a transitional dummy package which can be safely removed. + Package: qml-module-qtquick-xmllistmodel Architecture: any Multi-Arch: same @@ -229,10 +329,10 @@ Architecture: any Multi-Arch: same Depends: libqt5qml5 (= ${binary:Version}), - libqt5quick5 (= ${binary:Version}), - libqt5quickparticles5 (= ${binary:Version}), + libqt5quick5 (= ${binary:Version}) | libqt5quick5-gles, + libqt5quickparticles5 (= ${binary:Version}) | libqt5quickparticles5-gles, libqt5quicktest5 (= ${binary:Version}), - libqt5quickwidgets5 (= ${binary:Version}), + libqt5quickwidgets5 (= ${binary:Version}) | libqt5quickwidgets5-gles, qtbase5-dev, ${misc:Depends} Description: Qt 5 declarative development files @@ -247,8 +347,8 @@ Multi-Arch: same Section: libdevel Depends: qtdeclarative5-dev (= ${binary:Version}), ${misc:Depends} -Breaks: qtdeclarative5-dev (<< 5.3.0-4~) -Replaces: qtdeclarative5-dev (<< 5.3.0-4~) +Breaks: qtdeclarative5-dev (<< 5.2.0-5~) +Replaces: qtdeclarative5-dev (<< 5.2.0-5~) Description: Qt 5 declarative private development files Qt is a cross-platform C++ application framework. Qt's primary feature is its rich set of widgets that provide standard GUI functionality. @@ -315,6 +415,24 @@ . This package contains Qt 5 declarative examples. +Package: qtdeclarative5-dbg +Priority: extra +Architecture: any +Multi-Arch: same +Section: debug +Depends: libqt5qml5 (= ${binary:Version}), + libqt5quick5 (= ${binary:Version}), + libqt5quickparticles5 (= ${binary:Version}), + libqt5quicktest5 (= ${binary:Version}), + ${misc:Depends} +Recommends: qtbase5-dbg +Suggests: qtdeclarative5-examples (= ${binary:Version}) +Description: Qt 5 declarative libraries debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 5 declarative libraries. + Package: qtdeclarative5-doc-html Priority: extra Architecture: all diff -Nru qtdeclarative-opensource-src-5.5.1/debian/libqt5qml5.symbols qtdeclarative-opensource-src-5.5.1/debian/libqt5qml5.symbols --- qtdeclarative-opensource-src-5.5.1/debian/libqt5qml5.symbols 2015-10-21 18:53:32.000000000 +0000 +++ qtdeclarative-opensource-src-5.5.1/debian/libqt5qml5.symbols 2018-04-03 14:27:58.000000000 +0000 @@ -1,4 +1,4 @@ -# SymbolsHelper-Confirmed: 5.5.1 amd64 armel armhf hppa i386 powerpc +# SymbolsHelper-Confirmed: 5.5.1 amd64 arm64 armhf i386 powerpc ppc64el s390x libQt5Qml.so.5 libqt5qml5 #MINVER# | libqt5qml5 #MINVER#, qtdeclarative-abi-5-5-0 _Z10qmlContextPK7QObject@Base 5.0.2 @@ -581,7 +581,7 @@ _ZN17QQmlDelegateModel15_q_rowsInsertedERK11QModelIndexii@Base 5.1.0 1 _ZN17QQmlDelegateModel15setWatchedRolesE5QListI10QByteArrayE@Base 5.1.0 1 _ZN17QQmlDelegateModel16_q_itemsInsertedEii@Base 5.1.0 1 - _ZN17QQmlDelegateModel16_q_layoutChangedERK5QListI21QPersistentModelIndexEN18QAbstractItemModel16LayoutChangeHintE@Base 5.3.1 1 + _ZN17QQmlDelegateModel16_q_layoutChangedERK5QListI21QPersistentModelIndexEN18QAbstractItemModel16LayoutChangeHintE@Base 5.3.0 1 _ZN17QQmlDelegateModel16resetFilterGroupEv@Base 5.1.0 1 _ZN17QQmlDelegateModel16rootIndexChangedEv@Base 5.1.0 1 _ZN17QQmlDelegateModel16staticMetaObjectE@Base 5.1.0 1 @@ -590,7 +590,7 @@ _ZN17QQmlDelegateModel20defaultGroupsChangedEv@Base 5.1.0 1 _ZN17QQmlDelegateModel21qmlAttachedPropertiesEP7QObject@Base 5.1.0 1 _ZN17QQmlDelegateModel23_q_rowsAboutToBeRemovedERK11QModelIndexii@Base 5.1.0 1 - _ZN17QQmlDelegateModel25_q_layoutAboutToBeChangedERK5QListI21QPersistentModelIndexEN18QAbstractItemModel16LayoutChangeHintE@Base 5.3.1 1 + _ZN17QQmlDelegateModel25_q_layoutAboutToBeChangedERK5QListI21QPersistentModelIndexEN18QAbstractItemModel16LayoutChangeHintE@Base 5.3.0 1 _ZN17QQmlDelegateModel5eventEP6QEvent@Base 5.1.0 1 _ZN17QQmlDelegateModel5itemsEv@Base 5.1.0 1 _ZN17QQmlDelegateModel5partsEv@Base 5.1.0 1 @@ -1247,8 +1247,8 @@ _ZN3QV414ObjectIteratorC1ERNS_5ScopeEPNS_6ObjectEj@Base 5.4.0 _ZN3QV414ObjectIteratorC2EPNS_15ExecutionEngineEPNS_5ValueES4_PNS_6ObjectEj@Base 5.5.0 _ZN3QV414ObjectIteratorC2ERNS_5ScopeEPNS_6ObjectEj@Base 5.4.0 - _ZN3QV414QObjectWrapper11getPropertyEP7QObjectPNS_16ExecutionContextEP16QQmlPropertyDatab@Base 5.2.1 - _ZN3QV414QObjectWrapper11getPropertyEP7QObjectPNS_16ExecutionContextEib@Base 5.2.1 + _ZN3QV414QObjectWrapper11getPropertyEP7QObjectPNS_16ExecutionContextEP16QQmlPropertyDatab@Base 5.2.0+gitcb78684a + _ZN3QV414QObjectWrapper11getPropertyEP7QObjectPNS_16ExecutionContextEib@Base 5.2.0+gitcb78684a _ZN3QV414QObjectWrapper11markObjectsEPNS_4Heap4BaseEPNS_15ExecutionEngineE@Base 5.5.0 _ZN3QV414QObjectWrapper11markWrapperEP7QObjectPNS_15ExecutionEngineE@Base 5.5.0 _ZN3QV414QObjectWrapper11setPropertyEP7QObjectPNS_16ExecutionContextEP16QQmlPropertyDataRKNS_5ValueE@Base 5.5.0 @@ -1265,7 +1265,7 @@ _ZN3QV414QObjectWrapper3putEPNS_7ManagedEPNS_6StringERKNS_5ValueE@Base 5.5.0 1 _ZN3QV414QObjectWrapper4wrapEPNS_15ExecutionEngineEP7QObject@Base 5.2.0~beta1 _ZN3QV414QObjectWrapper5queryEPKNS_7ManagedEPNS_6StringE@Base 5.4.0 1 - _ZN3QV414QObjectWrapper6createEPNS_15ExecutionEngineEP7QObject@Base 5.2.1 + _ZN3QV414QObjectWrapper6createEPNS_15ExecutionEngineEP7QObject@Base 5.2.0+gitcb78684a _ZN3QV414QObjectWrapper7destroyEPNS_4Heap4BaseE@Base 5.5.0 _ZN3QV414QObjectWrapper9isEqualToEPNS_7ManagedES2_@Base 5.2.0~rc1 1 _ZN3QV414QmlListWrapper10getIndexedEPNS_7ManagedEjPb@Base 5.2.0~beta1 1 @@ -1404,7 +1404,7 @@ _ZN3QV416ExecutionContext11getPropertyEPNS_6StringE@Base 5.4.0 _ZN3QV416ExecutionContext11markObjectsEPNS_4Heap4BaseEPNS_15ExecutionEngineE@Base 5.5.0 _ZN3QV416ExecutionContext11setPropertyEPNS_6StringERKNS_5ValueE@Base 5.5.0 - _ZN3QV416ExecutionContext11static_vtblE@Base 5.2.1 + _ZN3QV416ExecutionContext11static_vtblE@Base 5.2.0+gitcb78684a _ZN3QV416ExecutionContext13newQmlContextEPNS_14FunctionObjectEPNS_6ObjectE@Base 5.4.0 _ZN3QV416ExecutionContext14deletePropertyEPNS_6StringE@Base 5.4.0 _ZN3QV416ExecutionContext14newCallContextEPNS_14FunctionObjectEPNS_8CallDataE@Base 5.2.0~beta1 @@ -1420,7 +1420,7 @@ _ZN3QV417QmlContextWrapper11markObjectsEPNS_4Heap4BaseEPNS_15ExecutionEngineE@Base 5.5.0 _ZN3QV417QmlContextWrapper11static_vtblE@Base 5.2.0~beta1 _ZN3QV417QmlContextWrapper14callingContextEPNS_15ExecutionEngineE@Base 5.2.0~beta1 - _ZN3QV417QmlContextWrapper14idObjectsArrayEv@Base 5.2.1 + _ZN3QV417QmlContextWrapper14idObjectsArrayEv@Base 5.2.0+gitcb78684a _ZN3QV417QmlContextWrapper19qmlSingletonWrapperEPNS_15ExecutionEngineEPNS_6StringE@Base 5.5.0 _ZN3QV417QmlContextWrapper20takeContextOwnershipERKNS_5ValueE@Base 5.5.0 _ZN3QV417QmlContextWrapper23registerQmlDependenciesEPNS_15ExecutionEngineEPKNS_12CompiledData8FunctionE@Base 5.2.0~rc1 @@ -1449,6 +1449,7 @@ _ZN3QV422PersistentValueStorageC2EPNS_15ExecutionEngineE@Base 5.5.0 _ZN3QV422PersistentValueStorageD1Ev@Base 5.5.0 _ZN3QV422PersistentValueStorageD2Ev@Base 5.5.0 + _ZN3QV424EvalInstructionSelection6runAllEb@Base 5.5.0 _ZN3QV424EvalInstructionSelection7compileEb@Base 5.3.0 1 _ZN3QV424EvalInstructionSelectionC1EPNS_19ExecutableAllocatorEPNS_2IR6ModuleEPNS_8Compiler15JSUnitGeneratorE@Base 5.3.0 1 _ZN3QV424EvalInstructionSelectionC2EPNS_19ExecutableAllocatorEPNS_2IR6ModuleEPNS_8Compiler15JSUnitGeneratorE@Base 5.3.0 1 @@ -1474,80 +1475,81 @@ (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection10getElementEPNS_2IR4ExprES4_S4_@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection10loadRegexpEPNS_2IR6RegExpEPNS2_4ExprE@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection10loadStringERK7QStringPNS_2IR4ExprE@Base 5.4.0 1 - (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection10setElementEPNS_2IR4ExprES4_S4_@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelection10setElementEPNS_2IR4ExprES4_S4_@Base 5.3.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection10swapValuesEPNS_2IR4ExprES4_@Base 5.4.0 1 - (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection10visitCJumpEPNS_2IR5CJumpE@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelection10visitCJumpEPNS_2IR5CJumpE@Base 5.3.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection11convertTypeEPNS_2IR4ExprES4_@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection11getPropertyEPNS_2IR4ExprERK7QStringS4_@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection11initClosureEPNS_2IR7ClosureEPNS2_4ExprE@Base 5.4.0 1 - (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection11setPropertyEPNS_2IR4ExprES4_RK7QString@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelection11setPropertyEPNS_2IR4ExprES4_RK7QString@Base 5.3.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection12callPropertyEPNS_2IR4ExprERK7QStringPNS2_8ExprListES4_@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection13callSubscriptEPNS_2IR4ExprES4_PNS2_8ExprListES4_@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection14constructValueEPNS_2IR4ExprEPNS2_8ExprListES4_@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection14loadQmlIdArrayEPNS_2IR4ExprE@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection14loadThisObjectEPNS_2IR4ExprE@Base 5.4.0 1 - (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection15prepareCallDataEPNS_2IR8ExprListEPNS2_4ExprE@Base 5.3.0 1 - (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection15visitCJumpEqualEPNS_2IR5BinopEPNS2_10BasicBlockES6_@Base 5.3.0 1 - (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection16addConstantTableEP7QVectorINS_9PrimitiveEE@Base 5.3.0 1 - (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection16callBuiltinThrowEPNS_2IR4ExprE@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelection15prepareCallDataEPNS_2IR8ExprListEPNS2_4ExprE@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelection15visitCJumpEqualEPNS_2IR5BinopEPNS2_10BasicBlockES6_@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelection16addConstantTableEP7QVectorINS_9PrimitiveEE@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelection16callBuiltinThrowEPNS_2IR4ExprE@Base 5.3.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection16loadQmlSingletonERK7QStringPNS_2IR4ExprE@Base 5.4.0 1 - (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection16visitCJumpDoubleENS_2IR5AluOpEPNS2_4ExprES5_PNS2_10BasicBlockES7_@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelection16visitCJumpDoubleENS_2IR5AluOpEPNS2_4ExprES5_PNS2_10BasicBlockES7_@Base 5.3.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection16visitCJumpSInt32ENS_2IR5AluOpEPNS2_4ExprES5_PNS2_10BasicBlockES7_@Base 5.4.0 1 - (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection16visitCJumpStrictEPNS_2IR5BinopEPNS2_10BasicBlockES6_@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelection16visitCJumpStrictEPNS_2IR5BinopEPNS2_10BasicBlockES6_@Base 5.3.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection17constructPropertyEPNS_2IR4ExprERK7QStringPNS2_8ExprListES4_@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection17convertTypeToBoolEPNS_2IR4ExprES4_@Base 5.4.0 1 - (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection18backendCompileStepEv@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelection18backendCompileStepEv@Base 5.3.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection18callBuiltinInvalidEPNS_2IR4NameEPNS2_8ExprListEPNS2_4ExprE@Base 5.4.0 1 - (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection18callBuiltinReThrowEv@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelection18callBuiltinReThrowEv@Base 5.3.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection18getQObjectPropertyEPNS_2IR4ExprEibbiS4_@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection18loadQmlScopeObjectEPNS_2IR4ExprE@Base 5.4.0 1 - (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection18setQObjectPropertyEPNS_2IR4ExprES4_i@Base 5.3.0 1 - (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection19callBuiltinPopScopeEv@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelection18setQObjectPropertyEPNS_2IR4ExprES4_i@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelection19callBuiltinPopScopeEv@Base 5.3.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection19convertTypeSlowPathEPNS_2IR4ExprES4_@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection19convertTypeToDoubleEPNS_2IR4ExprES4_@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection19convertTypeToSInt32EPNS_2IR4ExprES4_@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection19convertTypeToUInt32EPNS_2IR4ExprES4_@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection20loadQmlContextObjectEPNS_2IR4ExprE@Base 5.4.0 1 - (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection20visitCJumpStrictBoolEPNS_2IR5BinopEPNS2_10BasicBlockES6_@Base 5.3.0 1 - (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection21callBuiltinDeclareVarEbRK7QString@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelection20visitCJumpStrictBoolEPNS_2IR5BinopEPNS2_10BasicBlockES6_@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelection21callBuiltinDeclareVarEbRK7QString@Base 5.3.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection21callBuiltinDeleteNameERK7QStringPNS_2IR4ExprE@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection21callBuiltinTypeofNameERK7QStringPNS_2IR4ExprE@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection21getActivationPropertyEPKNS_2IR4NameEPNS2_4ExprE@Base 5.4.0 1 - (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection21setActivationPropertyEPNS_2IR4ExprERK7QString@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelection21setActivationPropertyEPNS_2IR4ExprERK7QString@Base 5.3.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection22callBuiltinDefineArrayEPNS_2IR4ExprEPNS2_8ExprListE@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection22callBuiltinDeleteValueEPNS_2IR4ExprE@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection22callBuiltinTypeofValueEPNS_2IR4ExprES4_@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection22loadQmlImportedScriptsEPNS_2IR4ExprE@Base 5.4.0 1 + (optional|arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection22mutableCompilationUnitEv@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection23callBuiltinDeleteMemberEPNS_2IR4ExprERK7QStringS4_@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection23callBuiltinTypeofMemberEPNS_2IR4ExprERK7QStringS4_@Base 5.4.0 1 - (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection23visitCJumpNullUndefinedENS_2IR4TypeEPNS2_5BinopEPNS2_10BasicBlockES7_@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelection23visitCJumpNullUndefinedENS_2IR4TypeEPNS2_5BinopEPNS2_10BasicBlockES7_@Base 5.3.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection24calculateRegistersToSaveERK7QVectorINS0_12RegisterInfoEE@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection24callBuiltinPushWithScopeEPNS_2IR4ExprE@Base 5.4.0 1 - (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection24prepareVariableArgumentsEPNS_2IR8ExprListE@Base 5.3.0 1 - (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection25callBuiltinPushCatchScopeERK7QString@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelection24prepareVariableArgumentsEPNS_2IR8ExprListE@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelection25callBuiltinPushCatchScopeERK7QString@Base 5.3.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection26callBuiltinDeleteSubscriptEPNS_2IR4ExprES4_S4_@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection26callBuiltinTypeofSubscriptEPNS_2IR4ExprES4_S4_@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection26callBuiltinUnwindExceptionEPNS_2IR4ExprE@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection27constructActivationPropertyEPNS_2IR4NameEPNS2_8ExprListEPNS2_4ExprE@Base 5.4.0 1 - (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection29visitCJumpStrictNullUndefinedENS_2IR4TypeEPNS2_5BinopEPNS2_10BasicBlockES7_@Base 5.3.0 1 - (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection30callBuiltinConvertThisToObjectEv@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelection29visitCJumpStrictNullUndefinedENS_2IR4TypeEPNS2_5BinopEPNS2_10BasicBlockES7_@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelection30callBuiltinConvertThisToObjectEv@Base 5.3.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection30callBuiltinDefineObjectLiteralEPNS_2IR4ExprEiPNS2_8ExprListES6_b@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection30callBuiltinSetupArgumentObjectEPNS_2IR4ExprE@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection32callBuiltinForeachIteratorObjectEPNS_2IR4ExprES4_@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection34callBuiltinForeachNextPropertynameEPNS_2IR4ExprES4_@Base 5.4.0 1 - (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection3runEi@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelection3runEi@Base 5.3.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection4unopENS_2IR5AluOpEPNS2_4ExprES5_@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection5binopENS_2IR5AluOpEPNS2_4ExprES5_S5_@Base 5.4.0 1 - (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection8visitRetEPNS_2IR3RetE@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelection8visitRetEPNS_2IR3RetE@Base 5.3.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection9callValueEPNS_2IR4ExprEPNS2_8ExprListES4_@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection9copyValueEPNS_2IR4ExprES4_@Base 5.4.0 1 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection9loadConstEPNS_2IR5ConstEPNS2_4ExprE@Base 5.4.0 1 - (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection9visitJumpEPNS_2IR4JumpE@Base 5.3.0 1 - (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelectionC1EP17QQmlEnginePrivatePNS_19ExecutableAllocatorEPNS_2IR6ModuleEPNS_8Compiler15JSUnitGeneratorE@Base 5.3.0 1 - (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelectionC2EP17QQmlEnginePrivatePNS_19ExecutableAllocatorEPNS_2IR6ModuleEPNS_8Compiler15JSUnitGeneratorE@Base 5.3.0 1 - (optional=gccinternal|arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelectionD0Ev@Base 5.3.0 1 - (optional=gccinternal|arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelectionD1Ev@Base 5.3.0 1 - (optional=gccinternal|arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelectionD2Ev@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelection9visitJumpEPNS_2IR4JumpE@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelectionC1EP17QQmlEnginePrivatePNS_19ExecutableAllocatorEPNS_2IR6ModuleEPNS_8Compiler15JSUnitGeneratorE@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelectionC2EP17QQmlEnginePrivatePNS_19ExecutableAllocatorEPNS_2IR6ModuleEPNS_8Compiler15JSUnitGeneratorE@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelectionD0Ev@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelectionD1Ev@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZN3QV43JIT20InstructionSelectionD2Ev@Base 5.3.0 1 _ZN3QV44Heap11ArrayBufferC1EPNS_15ExecutionEngineERK10QByteArray@Base 5.5.0 (subst)_ZN3QV44Heap11ArrayBufferC1EPNS_15ExecutionEngineE{size_t}@Base 5.5.0 _ZN3QV44Heap11ArrayBufferC2EPNS_15ExecutionEngineERK10QByteArray@Base 5.5.0 @@ -1616,6 +1618,7 @@ _ZN3QV44Moth20InstructionSelection22callBuiltinDeleteValueEPNS_2IR4ExprE@Base 5.4.0 1 _ZN3QV44Moth20InstructionSelection22callBuiltinTypeofValueEPNS_2IR4ExprES4_@Base 5.4.0 1 _ZN3QV44Moth20InstructionSelection22loadQmlImportedScriptsEPNS_2IR4ExprE@Base 5.4.0 1 + (optional)_ZN3QV44Moth20InstructionSelection22mutableCompilationUnitEv@Base 5.4.0 1 _ZN3QV44Moth20InstructionSelection23callBuiltinDeleteMemberEPNS_2IR4ExprERK7QStringS4_@Base 5.4.0 1 _ZN3QV44Moth20InstructionSelection23callBuiltinTypeofMemberEPNS_2IR4ExprERK7QStringS4_@Base 5.4.0 1 _ZN3QV44Moth20InstructionSelection24callBuiltinPushWithScopeEPNS_2IR4ExprE@Base 5.4.0 1 @@ -1676,7 +1679,7 @@ _ZN3QV46Object22defineReadonlyPropertyEPNS_6StringERKNS_5ValueE@Base 5.5.0 _ZN3QV46Object22defineReadonlyPropertyERK7QStringRKNS_5ValueE@Base 5.5.0 _ZN3QV46Object22internalDeletePropertyEPNS_6StringE@Base 5.4.0 - (arch=arm64 hppa ppc64el)_ZN3QV46Object23setArrayLengthUncheckedEj@Base 5.5.0 + (arch=arm64 ppc64el)_ZN3QV46Object23setArrayLengthUncheckedEj@Base 5.5.0 _ZN3QV46Object29internalDeleteIndexedPropertyEj@Base 5.2.0~beta1 _ZN3QV46Object3getEPNS_7ManagedEPNS_6StringEPb@Base 5.4.0 1 _ZN3QV46Object3putEPNS_15ExecutionEngineERK7QStringRKNS_5ValueE@Base 5.5.0 @@ -1702,7 +1705,7 @@ _ZN3QV46ScriptD2Ev@Base 5.2.0~beta1 _ZN3QV46String11markObjectsEPNS_4Heap4BaseEPNS_15ExecutionEngineE@Base 5.5.0 _ZN3QV46String11static_vtblE@Base 5.2.0~beta1 - _ZN3QV46String12toArrayIndexERK7QString@Base 5.2.1 + _ZN3QV46String12toArrayIndexERK7QString@Base 5.2.0+gitcb78684a _ZN3QV46String15createHashValueEPK5QChari@Base 5.2.0~beta1 _ZN3QV46String15createHashValueEPKci@Base 5.2.0~beta1 _ZN3QV46String9getLengthEPKNS_7ManagedE@Base 5.3.0 1 @@ -2365,7 +2368,7 @@ _ZN8QQmlTypeC2EiRKN11QQmlPrivate17RegisterInterfaceE@Base 5.0.2 1 _ZN8QQmlTypeD1Ev@Base 5.0.2 1 _ZN8QQmlTypeD2Ev@Base 5.0.2 1 - _ZN9QBitArray6setBitEi@Base 5.3.0 + (optional)_ZN9QBitArray6setBitEi@Base 5.5.0 _ZN9QJSEngine10newQObjectEP7QObject@Base 5.0.2 _ZN9QJSEngine11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.0.2 _ZN9QJSEngine11qt_metacastEPKc@Base 5.0.2 @@ -2892,41 +2895,45 @@ _ZNK9QQmlTimer9isRunningEv@Base 5.0.2 1 _ZNK9QV8Engine12illegalNamesEv@Base 5.0.2 1 (optional=templinst|subst)_ZNKSt6vectorIbSaIbEE2atE{size_t}@Base 5.5.0 - (optional=templinst)_ZNSt13_Bvector_baseISaIbEE13_M_deallocateEv@Base 5.4.2 + (optional=templinst)_ZNSt13_Bvector_baseISaIbEE13_M_deallocateEv@Base 5.5.0 (optional=templinst)_ZNSt6vectorIPKN3QV44Heap6StringESaIS4_EE12emplace_backIIS4_EEEvDpOT_@Base 5.5.0 (optional=templinst)_ZNSt6vectorIPKN3QV44Heap6StringESaIS4_EE12emplace_backIJS4_EEEvDpOT_@Base 5.5.0 (optional=templinst)_ZNSt6vectorIPKN3QV44Heap6StringESaIS4_EE19_M_emplace_back_auxIIS4_EEEvDpOT_@Base 5.5.0 (optional=templinst)_ZNSt6vectorIPKN3QV44Heap6StringESaIS4_EE19_M_emplace_back_auxIJS4_EEEvDpOT_@Base 5.5.0 - (optional=templinst|subst)_ZNSt6vectorIS_IiSaIiEESaIS1_EE17_M_default_appendE{size_t}@Base 5.4.2 - (optional=templinst|subst)_ZNSt6vectorIbSaIbEE13_M_reallocateE{size_t}@Base 5.4.2 - (subst)_ZNSt6vectorIbSaIbEE14_M_fill_assignE{size_t}b@Base 5.4.0 - (subst)_ZNSt6vectorIbSaIbEE14_M_fill_insertESt13_Bit_iterator{size_t}b@Base 5.4.0 - (subst)_ZNSt6vectorIbSaIbEE6resizeE{size_t}b@Base 5.4.2 - (subst)_ZNSt6vectorIbSaIbEEC1E{size_t}RKbRKS0_@Base 5.4.0 - (subst)_ZNSt6vectorIbSaIbEEC2E{size_t}RKbRKS0_@Base 5.4.0 - (optional=templinst|arch=amd64 armhf i386)_ZNSt6vectorIcSaIcEE19_M_emplace_back_auxIIRKcEEEvDpOT_@Base 5.4.2 - (optional=templinst|arch=amd64 armhf i386)_ZNSt6vectorIcSaIcEE19_M_emplace_back_auxIJRKcEEEvDpOT_@Base 5.4.2 + (optional=templinst|subst)_ZNSt6vectorIS_IiSaIiEESaIS1_EE17_M_default_appendE{size_t}@Base 5.5.0 + (optional=templinst|subst)_ZNSt6vectorIbSaIbEE13_M_reallocateE{size_t}@Base 5.5.0 + (optional=templinst|subst)_ZNSt6vectorIbSaIbEE14_M_fill_assignE{size_t}b@Base 5.4.0 + (optional=templinst|subst)_ZNSt6vectorIbSaIbEE14_M_fill_insertESt13_Bit_iterator{size_t}b@Base 5.4.0 + (optional=templinst|subst)_ZNSt6vectorIbSaIbEE6resizeE{size_t}b@Base 5.4.0 + (optional=templinst|subst)_ZNSt6vectorIbSaIbEEC1E{size_t}RKbRKS0_@Base 5.4.0 + (optional=templinst|subst)_ZNSt6vectorIbSaIbEEC2E{size_t}RKbRKS0_@Base 5.4.0 + (optional=templinst|arch=amd64 armhf i386|subst)_ZNSt6vectorIcSaIcEE17_M_default_appendE{size_t}@Base 5.4.0 + (optional=templinst|arch=amd64 armhf i386)_ZNSt6vectorIcSaIcEE19_M_emplace_back_auxIIRKcEEEvDpOT_@Base 5.5.0 + (optional=templinst|arch=amd64 armhf i386)_ZNSt6vectorIcSaIcEE19_M_emplace_back_auxIJRKcEEEvDpOT_@Base 5.5.0 (optional=templinst|subst)_ZNSt6vectorIiSaIiEE14_M_fill_assignE{size_t}RKi@Base 5.4.0 (optional=templinst|subst)_ZNSt6vectorIiSaIiEE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPiS1_EE{size_t}RKi@Base 5.2.1 (optional=templinst)_ZNSt6vectorIiSaIiEE19_M_emplace_back_auxIIiEEEvDpOT_@Base 5.3.1 (optional=templinst)_ZNSt6vectorIiSaIiEE19_M_emplace_back_auxIJiEEEvDpOT_@Base 5.3.1 (optional=templinst|subst)_ZNSt6vectorIiSaIiEE6resizeE{size_t}RKi@Base 5.4.0 - (optional=templinst|subst)_ZNSt6vectorIiSaIiEE7reserveE{size_t}@Base 5.2.1 - (optional=templinst|arch=!hurd-i386 !i386 !kfreebsd-i386)_ZNSt6vectorIiSaIiEEC1ERKS1_@Base 5.2.1 - (optional=templinst|subst)_ZNSt6vectorIiSaIiEEC1E{size_t}RKiRKS0_@Base 5.2.1 - (optional=templinst|arch=!hurd-i386 !i386 !kfreebsd-i386)_ZNSt6vectorIiSaIiEEC2ERKS1_@Base 5.2.1 - (optional=templinst|subst)_ZNSt6vectorIiSaIiEEC2E{size_t}RKiRKS0_@Base 5.2.1 - (optional=templinst)_ZNSt6vectorIiSaIiEEaSERKS1_@Base 5.2.1 - _ZNSt6vectorItSaItEE12emplace_backIItEEEvDpOT_@Base 5.3.0 - _ZNSt6vectorItSaItEE12emplace_backIJtEEEvDpOT_@Base 5.3.0 + (optional=templinst|arch=!amd64 !arm64 !ppc64el !s390x)_ZNSt6vectorIiSaIiEE7reserveEj@Base 5.2.1 + (optional=templinst|arch=!armhf !i386 !powerpc)_ZNSt6vectorIiSaIiEE7reserveEm@Base 5.2.0+gitcb78684a + (optional=templinst|arch=!i386)_ZNSt6vectorIiSaIiEEC1ERKS1_@Base 5.2.0+gitcb78684a + (optional=templinst|arch=!amd64 !arm64 !ppc64el !s390x)_ZNSt6vectorIiSaIiEEC1EjRKiRKS0_@Base 5.2.1 + (optional=templinst|arch=!armhf !i386 !powerpc)_ZNSt6vectorIiSaIiEEC1EmRKiRKS0_@Base 5.2.0+gitcb78684a + (optional=templinst|arch=!i386)_ZNSt6vectorIiSaIiEEC2ERKS1_@Base 5.2.0+gitcb78684a + (optional=templinst|arch=!amd64 !arm64 !ppc64el !s390x)_ZNSt6vectorIiSaIiEEC2EjRKiRKS0_@Base 5.2.1 + (optional=templinst|arch=!armhf !i386 !powerpc)_ZNSt6vectorIiSaIiEEC2EmRKiRKS0_@Base 5.2.0+gitcb78684a + (optional=templinst)_ZNSt6vectorIiSaIiEEaSERKS1_@Base 5.2.0+gitcb78684a + _ZNSt6vectorItSaItEE12emplace_backIItEEEvDpOT_@Base 5.2.1 + _ZNSt6vectorItSaItEE12emplace_backIJtEEEvDpOT_@Base 5.2.1 _ZNSt6vectorItSaItEE13_M_insert_auxIIRKtEEEvN9__gnu_cxx17__normal_iteratorIPtS1_EEDpOT_@Base 5.2.0~beta1 - _ZNSt6vectorItSaItEE13_M_insert_auxIJRKtEEEvN9__gnu_cxx17__normal_iteratorIPtS1_EEDpOT_@Base 5.3.0 - (optional=templinst)_ZNSt6vectorItSaItEE19_M_emplace_back_auxIItEEEvDpOT_@Base 5.4.2 - (optional=templinst)_ZNSt6vectorItSaItEE19_M_emplace_back_auxIJtEEEvDpOT_@Base 5.4.2 - (optional=templinst)_ZNSt6vectorItSaItEE6insertEN9__gnu_cxx17__normal_iteratorIPKtS1_EERS4_@Base 5.4.2 - (optional=templinst|arch=alpha armel armhf powerpc ppc64 ppc64el s390x)_ZSt4swapI11QModelIndexEvRT_S2_@Base 5.5.0 + _ZNSt6vectorItSaItEE13_M_insert_auxIJRKtEEEvN9__gnu_cxx17__normal_iteratorIPtS1_EEDpOT_@Base 5.2.1 + (optional=templinst)_ZNSt6vectorItSaItEE19_M_emplace_back_auxIItEEEvDpOT_@Base 5.5.0 + (optional=templinst)_ZNSt6vectorItSaItEE19_M_emplace_back_auxIJtEEEvDpOT_@Base 5.5.0 + (optional=templinst)_ZNSt6vectorItSaItEE6insertEN9__gnu_cxx17__normal_iteratorIPKtS1_EERS4_@Base 5.5.0 + (optional=templinst|arch=!amd64 !arm64 !i386)_ZSt4swapI11QModelIndexEvRT_S2_@Base 5.5.0 (optional=templinst)_ZSt4swapI19QItemSelectionRangeEvRT_S2_@Base 5.5.0 - (optional=templinst|arch=!alpha !amd64 !arm64 !hppa !kfreebsd-amd64 !mips64el !ppc64 !ppc64el !s390x !sparc !sparc64 !x32)_ZSt4swapIN8QVariant7PrivateEEvRT_S3_@Base 5.0.2 + (optional=templinst|arch=!amd64 !arm64 !ppc64el !s390x)_ZSt4swapIN8QVariant7PrivateEEvRT_S3_@Base 5.0.2 _ZTI10QQmlEngine@Base 5.0.2 _ZTI11QMetaObject@Base 5.0.2 _ZTI11QQmlBinding@Base 5.0.2 1 @@ -3006,8 +3013,8 @@ _ZTIN3QV415EvalISelFactoryE@Base 5.3.0 1 _ZTIN3QV424EvalInstructionSelectionE@Base 5.3.0 1 _ZTIN3QV42IR9IRDecoderE@Base 5.3.0 1 - (arch=amd64 armhf i386)_ZTIN3QV43JIT11ISelFactoryE@Base 5.3.0 1 - (arch=amd64 armhf i386)_ZTIN3QV43JIT20InstructionSelectionE@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZTIN3QV43JIT11ISelFactoryE@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZTIN3QV43JIT20InstructionSelectionE@Base 5.3.0 1 _ZTIN3QV44Moth11ISelFactoryE@Base 5.3.0 1 _ZTIN3QV44Moth20InstructionSelectionE@Base 5.3.0 1 _ZTIN3QV49Debugging13DebuggerAgentE@Base 5.2.0~beta1 1 @@ -3201,8 +3208,8 @@ _ZTSN3QV415EvalISelFactoryE@Base 5.3.0 1 _ZTSN3QV424EvalInstructionSelectionE@Base 5.3.0 1 _ZTSN3QV42IR9IRDecoderE@Base 5.3.0 1 - (arch=amd64 armhf i386)_ZTSN3QV43JIT11ISelFactoryE@Base 5.3.0 1 - (arch=amd64 armhf i386)_ZTSN3QV43JIT20InstructionSelectionE@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZTSN3QV43JIT11ISelFactoryE@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZTSN3QV43JIT20InstructionSelectionE@Base 5.3.0 1 _ZTSN3QV44Moth11ISelFactoryE@Base 5.3.0 1 _ZTSN3QV44Moth20InstructionSelectionE@Base 5.3.0 1 _ZTSN3QV49Debugging13DebuggerAgentE@Base 5.2.0~beta1 1 @@ -3386,8 +3393,8 @@ _ZTVN3QV412CompiledData15CompilationUnitE@Base 5.2.0~beta1 _ZTVN3QV424EvalInstructionSelectionE@Base 5.3.0 1 _ZTVN3QV42IR9IRDecoderE@Base 5.3.0 1 - (arch=amd64 armhf i386)_ZTVN3QV43JIT11ISelFactoryE@Base 5.3.0 1 - (arch=amd64 armhf i386)_ZTVN3QV43JIT20InstructionSelectionE@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZTVN3QV43JIT11ISelFactoryE@Base 5.3.0 1 + (arch=!arm64 !powerpc !ppc64el !s390x)_ZTVN3QV43JIT20InstructionSelectionE@Base 5.3.0 1 _ZTVN3QV44Moth11ISelFactoryE@Base 5.3.0 1 _ZTVN3QV44Moth20InstructionSelectionE@Base 5.3.0 1 _ZTVN3QV49Debugging13DebuggerAgentE@Base 5.2.0~beta1 1 @@ -3497,9 +3504,9 @@ _ZTVN6QQmlJS7Codegen13ScanFunctionsE@Base 5.2.0~beta1 1 _ZTVN6QQmlJS7CodegenE@Base 5.2.0~beta1 1 _ZZN8QQmlData4initEvE11initialized@Base 5.0.2 1 - _ZZN9QMetaType17registerConverterI8QJSValue11QStringListPFS2_RKS1_EEEbT1_E1f@Base 5.4.0 - _ZZN9QMetaType17registerConverterI8QJSValue4QMapI7QString8QVariantEPFS5_RKS1_EEEbT1_E1f@Base 5.4.0 - _ZZN9QMetaType17registerConverterI8QJSValue5QListI8QVariantEPFS4_RKS1_EEEbT1_E1f@Base 5.4.0 + (optional=templinst)_ZZN9QMetaType17registerConverterI8QJSValue11QStringListPFS2_RKS1_EEEbT1_E1f@Base 5.4.0 + (optional=templinst)_ZZN9QMetaType17registerConverterI8QJSValue4QMapI7QString8QVariantEPFS5_RKS1_EEEbT1_E1f@Base 5.4.0 + (optional=templinst)_ZZN9QMetaType17registerConverterI8QJSValue5QListI8QVariantEPFS4_RKS1_EEEbT1_E1f@Base 5.4.0 _Zls6QDebugPK21QAbstractAnimationJob@Base 5.5.0 1 _Zls6QDebugRK13QQmlChangeSet@Base 5.1.0 1 _Zls6QDebugRK9QQmlError@Base 5.0.2 @@ -3526,10 +3533,12 @@ (c++)"non-virtual thunk to QQmlValueType::objectDestroyed(QObject*)@Base" 5.5.0 (c++)"non-virtual thunk to QQmlValueType::toDynamicMetaObject(QObject*)@Base" 5.5.0 (c++)"non-virtual thunk to QQmlValueType::~QQmlValueType()@Base" 5.5.0 - (c++|arch=amd64 armhf i386)"non-virtual thunk to QV4::JIT::InstructionSelection::backendCompileStep()@Base" 5.3.0 - (c++|arch=amd64 armhf i386)"non-virtual thunk to QV4::JIT::InstructionSelection::run(int)@Base" 5.3.0 - (c++|arch=amd64 armhf i386)"non-virtual thunk to QV4::JIT::InstructionSelection::~InstructionSelection()@Base" 5.3.0 + (c++|arch=!arm64 !powerpc !ppc64el !s390x)"non-virtual thunk to QV4::JIT::InstructionSelection::backendCompileStep()@Base" 5.3.0 + (optional|c++|arch=amd64 armhf i386)"non-virtual thunk to QV4::JIT::InstructionSelection::mutableCompilationUnit()@Base" 5.4.0 + (c++|arch=!arm64 !powerpc !ppc64el !s390x)"non-virtual thunk to QV4::JIT::InstructionSelection::run(int)@Base" 5.3.0 + (c++|arch=!arm64 !powerpc !ppc64el !s390x)"non-virtual thunk to QV4::JIT::InstructionSelection::~InstructionSelection()@Base" 5.3.0 (c++)"non-virtual thunk to QV4::Moth::InstructionSelection::backendCompileStep()@Base" 5.3.0 + (optional|c++)"non-virtual thunk to QV4::Moth::InstructionSelection::mutableCompilationUnit()@Base" 5.4.0 (c++)"non-virtual thunk to QV4::Moth::InstructionSelection::run(int)@Base" 5.3.0 (c++)"non-virtual thunk to QV4::Moth::InstructionSelection::~InstructionSelection()@Base" 5.3.0 qt_v4DebuggerHook@Base 5.5.0 diff -Nru qtdeclarative-opensource-src-5.5.1/debian/libqt5quick5.symbols qtdeclarative-opensource-src-5.5.1/debian/libqt5quick5.symbols --- qtdeclarative-opensource-src-5.5.1/debian/libqt5quick5.symbols 2015-10-21 18:53:39.000000000 +0000 +++ qtdeclarative-opensource-src-5.5.1/debian/libqt5quick5.symbols 2016-04-12 10:44:34.000000000 +0000 @@ -1,8 +1,8 @@ -# SymbolsHelper-Confirmed: 5.5.1 alpha amd64 arm64 armel armhf hppa i386 mipsel powerpc ppc64 ppc64el s390x -libQt5Quick.so.5 libqt5quick5 #MINVER# -| libqt5quick5 #MINVER#, qtdeclarative-abi-5-5-0 +# SymbolsHelper-Confirmed: 5.5.1 amd64 arm64 armhf i386 powerpc ppc64el s390x +libQt5Quick.so.5 libqt5quick5 #MINVER# | libqt5quick5-gles #MINVER# +| libqt5quick5 #MINVER# | libqt5quick5-gles #MINVER#, qtdeclarative-abi-5-5-0 _Z23qsgnode_set_descriptionP7QSGNodeRK7QString@Base 5.4.0 - (optional=gccinternal)_ZN10QByteArray7reserveEi@Base 5.4.2 + (optional=gccinternal)_ZN10QByteArray7reserveEi@Base 5.3.0 _ZN10QQuickItem10classBeginEv@Base 5.0.2 _ZN10QQuickItem10itemChangeENS_10ItemChangeERKNS_14ItemChangeDataE@Base 5.0.2 _ZN10QQuickItem10resetWidthEv@Base 5.0.2 @@ -546,8 +546,8 @@ _ZN14QQuickProfiler17stopProfilingImplEv@Base 5.3.0 1 _ZN14QQuickProfiler18startProfilingImplEy@Base 5.4.0 1 (optional=templinst)_ZN14QQuickProfiler21reportSceneGraphFrameILN23QQmlProfilerDefinitions19SceneGraphFrameTypeE2ELb1EEEvy@Base 5.5.0 1 - (optional=templinst)_ZN14QQuickProfiler21reportSceneGraphFrameILN23QQmlProfilerDefinitions19SceneGraphFrameTypeE6ELb1EEEvy@Base 5.5.0 1 - (optional=templinst)_ZN14QQuickProfiler25recordSceneGraphTimestampILN23QQmlProfilerDefinitions19SceneGraphFrameTypeE6EEEvv@Base 5.5.0 1 + (optional=templinst)_ZN14QQuickProfiler21reportSceneGraphFrameILN23QQmlProfilerDefinitions19SceneGraphFrameTypeE6ELb1EEEvy@Base 5.5.0 + (optional=templinst)_ZN14QQuickProfiler25recordSceneGraphTimestampILN23QQmlProfilerDefinitions19SceneGraphFrameTypeE6EEEvv@Base 5.5.0 _ZN14QQuickProfiler25registerAnimationCallbackEv@Base 5.3.0 1 _ZN14QQuickProfiler8setTimerERK13QElapsedTimer@Base 5.3.0 1 _ZN14QQuickProfilerC1EP19QQmlProfilerService@Base 5.3.0 1 @@ -590,7 +590,7 @@ _ZN14QQuickTextEdit15geometryChangedERK6QRectFS2_@Base 5.0.2 1 _ZN14QQuickTextEdit15hoverEnterEventEP11QHoverEvent@Base 5.2.0~beta1 1 _ZN14QQuickTextEdit15hoverLeaveEventEP11QHoverEvent@Base 5.2.0~beta1 1 - _ZN14QQuickTextEdit15invalidateBlockERK10QTextBlock@Base 5.3.1 1 + _ZN14QQuickTextEdit15invalidateBlockERK10QTextBlock@Base 5.3.2 1 _ZN14QQuickTextEdit15keyReleaseEventEP9QKeyEvent@Base 5.0.2 1 _ZN14QQuickTextEdit15mousePressEventEP11QMouseEvent@Base 5.0.2 1 _ZN14QQuickTextEdit15readOnlyChangedEb@Base 5.0.2 1 @@ -1085,7 +1085,7 @@ _ZN15QSGPlainTextureD0Ev@Base 5.0.2 1 _ZN15QSGPlainTextureD1Ev@Base 5.0.2 1 _ZN15QSGPlainTextureD2Ev@Base 5.0.2 1 - (optional=internal|arch=alpha amd64 arm64 armel armhf hppa mipsel powerpc ppc64 ppc64el s390x)_ZN16QCoreApplication9sendEventEP7QObjectP6QEvent@Base 5.3.2 + (optional=internal|arch=amd64 arm64 armhf powerpc ppc64el s390x)_ZN16QCoreApplication9sendEventEP7QObjectP6QEvent@Base 5.5.0 _ZN16QQuickCloseEvent11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.1.0 1 _ZN16QQuickCloseEvent11qt_metacastEPKc@Base 5.1.0 1 _ZN16QQuickCloseEvent16staticMetaObjectE@Base 5.1.0 1 @@ -1256,6 +1256,8 @@ _ZN17QQuickItemPrivate15transform_clearEP16QQmlListPropertyI15QQuickTransformE@Base 5.0.2 1 _ZN17QQuickItemPrivate15transform_countEP16QQmlListPropertyI15QQuickTransformE@Base 5.0.2 1 _ZN17QQuickItemPrivate15visibleChildrenEv@Base 5.0.2 1 + _ZN17QQuickItemPrivate16nextTabChildItemEPK10QQuickItemi@Base 5.5.1 + _ZN17QQuickItemPrivate16prevTabChildItemEPK10QQuickItemi@Base 5.5.1 _ZN17QQuickItemPrivate16resources_appendEP16QQmlListPropertyI7QObjectEPS1_@Base 5.0.2 1 _ZN17QQuickItemPrivate16transformChangedEv@Base 5.0.2 1 _ZN17QQuickItemPrivate16transform_appendEP16QQmlListPropertyI15QQuickTransformEPS1_@Base 5.0.2 1 @@ -1448,6 +1450,16 @@ _ZN19QQuickImageProviderD0Ev@Base 5.0.2 _ZN19QQuickImageProviderD1Ev@Base 5.0.2 _ZN19QQuickImageProviderD2Ev@Base 5.0.2 + _ZN19QQuickImageResponse11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.5.0 + _ZN19QQuickImageResponse11qt_metacastEPKc@Base 5.5.0 + _ZN19QQuickImageResponse16staticMetaObjectE@Base 5.5.0 + _ZN19QQuickImageResponse6cancelEv@Base 5.5.0 + _ZN19QQuickImageResponse8finishedEv@Base 5.5.0 + _ZN19QQuickImageResponseC1Ev@Base 5.5.0 + _ZN19QQuickImageResponseC2Ev@Base 5.5.0 + _ZN19QQuickImageResponseD0Ev@Base 5.5.0 + _ZN19QQuickImageResponseD1Ev@Base 5.5.0 + _ZN19QQuickImageResponseD2Ev@Base 5.5.0 _ZN19QQuickRenderControl10initializeEP14QOpenGLContext@Base 5.3.0 _ZN19QQuickRenderControl10invalidateEv@Base 5.3.0 _ZN19QQuickRenderControl11polishItemsEv@Base 5.3.0 @@ -1485,7 +1497,7 @@ _ZN19QQuickWindowPrivate15deliverKeyEventEP9QKeyEvent@Base 5.3.0 1 _ZN19QQuickWindowPrivate15runAndClearJobsEP5QListIP9QRunnableE@Base 5.4.0 1 _ZN19QQuickWindowPrivate15setFocusInScopeEP10QQuickItemS1_N2Qt11FocusReasonE6QFlagsINS_11FocusOptionEE@Base 5.1.0 1 - _ZN19QQuickWindowPrivate15setMouseGrabberEP10QQuickItem@Base 5.2.1 1 + _ZN19QQuickWindowPrivate15setMouseGrabberEP10QQuickItem@Base 5.2.0+gitcb78684a 1 _ZN19QQuickWindowPrivate15updateDirtyNodeEP10QQuickItem@Base 5.0.2 1 _ZN19QQuickWindowPrivate16clearFocusObjectEv@Base 5.2.0~rc1 1 _ZN19QQuickWindowPrivate16deliverDragEventEP17QQuickDragGrabberP10QQuickItemP14QDragMoveEvent@Base 5.0.2 1 @@ -1661,6 +1673,7 @@ _ZN20QQuickStateOperation8setStateEP11QQuickState@Base 5.0.2 1 _ZN20QQuickStateOperationC1ER14QObjectPrivateP7QObject@Base 5.0.2 1 _ZN20QQuickStateOperationC2ER14QObjectPrivateP7QObject@Base 5.0.2 1 + _ZN20QQuickTextureFactory22textureFactoryForImageERK6QImage@Base 5.5.0 _ZN20QQuickTextureFactoryC1Ev@Base 5.0.2 _ZN20QQuickTextureFactoryC2Ev@Base 5.0.2 _ZN20QQuickTextureFactoryD0Ev@Base 5.0.2 @@ -2028,8 +2041,13 @@ _ZN24QQuickAccessibleAttachedD0Ev@Base 5.0.2 1 _ZN24QQuickAccessibleAttachedD1Ev@Base 5.0.2 1 _ZN24QQuickAccessibleAttachedD2Ev@Base 5.0.2 1 + _ZN24QQuickAsyncImageProviderC1Ev@Base 5.5.0 + _ZN24QQuickAsyncImageProviderC2Ev@Base 5.5.0 + _ZN24QQuickAsyncImageProviderD0Ev@Base 5.5.0 + _ZN24QQuickAsyncImageProviderD1Ev@Base 5.5.0 + _ZN24QQuickAsyncImageProviderD2Ev@Base 5.5.0 _ZN24QQuickOpacityAnimatorJob10initializeEP24QQuickAnimatorController@Base 5.2.0~beta1 1 - _ZN24QQuickOpacityAnimatorJob16nodeWasDestroyedEv@Base 5.3.1 1 + _ZN24QQuickOpacityAnimatorJob16nodeWasDestroyedEv@Base 5.3.2 1 _ZN24QQuickOpacityAnimatorJob17updateCurrentTimeEi@Base 5.2.0~beta1 1 _ZN24QQuickOpacityAnimatorJob9writeBackEv@Base 5.2.0~beta1 1 _ZN24QQuickOpacityAnimatorJobC1Ev@Base 5.2.0~beta1 1 @@ -2081,7 +2099,7 @@ _ZN24QQuickShaderEffectSourceD1Ev@Base 5.0.2 1 _ZN24QQuickShaderEffectSourceD2Ev@Base 5.0.2 1 _ZN24QQuickUniformAnimatorJob13afterNodeSyncEv@Base 5.2.0~beta1 1 - _ZN24QQuickUniformAnimatorJob16nodeWasDestroyedEv@Base 5.3.1 1 + _ZN24QQuickUniformAnimatorJob16nodeWasDestroyedEv@Base 5.3.2 1 _ZN24QQuickUniformAnimatorJob17updateCurrentTimeEi@Base 5.2.0~beta1 1 _ZN24QQuickUniformAnimatorJob9setTargetEP10QQuickItem@Base 5.2.0~beta1 1 _ZN24QQuickUniformAnimatorJob9writeBackEv@Base 5.2.0~beta1 1 @@ -2448,7 +2466,7 @@ _ZNK14QQuickTextEdit15isCursorVisibleEv@Base 5.0.2 1 _ZNK14QQuickTextEdit16getFormattedTextEii@Base 5.0.2 1 _ZNK14QQuickTextEdit16inputMethodHintsEv@Base 5.0.2 1 - _ZNK14QQuickTextEdit16inputMethodQueryEN2Qt16InputMethodQueryE8QVariant@Base 5.3.1 1 + _ZNK14QQuickTextEdit16inputMethodQueryEN2Qt16InputMethodQueryE8QVariant@Base 5.3.2 1 _ZNK14QQuickTextEdit16inputMethodQueryEN2Qt16InputMethodQueryE@Base 5.0.2 1 _ZNK14QQuickTextEdit16selectByKeyboardEv@Base 5.1.0 1 _ZNK14QQuickTextEdit17selectedTextColorEv@Base 5.0.2 1 @@ -2677,6 +2695,8 @@ _ZNK18QSGTextureProvider10metaObjectEv@Base 5.0.2 _ZNK19QQuickImageProvider5flagsEv@Base 5.0.2 _ZNK19QQuickImageProvider9imageTypeEv@Base 5.0.2 + _ZNK19QQuickImageResponse10metaObjectEv@Base 5.5.0 + _ZNK19QQuickImageResponse11errorStringEv@Base 5.5.0 _ZNK19QQuickRenderControl10metaObjectEv@Base 5.3.0 _ZNK19QQuickScaleAnimator10metaObjectEv@Base 5.2.0~beta1 1 _ZNK19QQuickScaleAnimator9createJobEv@Base 5.2.0~beta1 1 @@ -2915,6 +2935,7 @@ _ZTI18QSGTextureProvider@Base 5.0.2 _ZTI19QNativeGestureEvent@Base 5.5.0 _ZTI19QQuickImageProvider@Base 5.0.2 + _ZTI19QQuickImageResponse@Base 5.5.0 _ZTI19QQuickRenderControl@Base 5.3.0 _ZTI19QQuickScaleAnimator@Base 5.2.0~beta1 1 _ZTI19QQuickWindowPrivate@Base 5.0.2 1 @@ -2956,6 +2977,7 @@ _ZTI23QQuickVector3dAnimation@Base 5.0.2 1 _ZTI23QSGDefaultRectangleNode@Base 5.1.0 1 _ZTI24QQuickAccessibleAttached@Base 5.0.2 1 + _ZTI24QQuickAsyncImageProvider@Base 5.5.0 _ZTI24QQuickOpacityAnimatorJob@Base 5.2.0~beta1 1 _ZTI24QQuickShaderEffectSource@Base 5.0.2 1 _ZTI24QQuickUniformAnimatorJob@Base 5.2.0~beta1 1 @@ -3056,6 +3078,7 @@ _ZTS18QSGTextureProvider@Base 5.0.2 _ZTS19QNativeGestureEvent@Base 5.5.0 _ZTS19QQuickImageProvider@Base 5.0.2 + _ZTS19QQuickImageResponse@Base 5.5.0 _ZTS19QQuickRenderControl@Base 5.3.0 _ZTS19QQuickScaleAnimator@Base 5.2.0~beta1 1 _ZTS19QQuickWindowPrivate@Base 5.0.2 1 @@ -3097,6 +3120,7 @@ _ZTS23QQuickVector3dAnimation@Base 5.0.2 1 _ZTS23QSGDefaultRectangleNode@Base 5.1.0 1 _ZTS24QQuickAccessibleAttached@Base 5.0.2 1 + _ZTS24QQuickAsyncImageProvider@Base 5.5.0 _ZTS24QQuickOpacityAnimatorJob@Base 5.2.0~beta1 1 _ZTS24QQuickShaderEffectSource@Base 5.0.2 1 _ZTS24QQuickUniformAnimatorJob@Base 5.2.0~beta1 1 @@ -3190,6 +3214,7 @@ _ZTV18QSGTextureProvider@Base 5.0.2 _ZTV19QNativeGestureEvent@Base 5.5.0 _ZTV19QQuickImageProvider@Base 5.0.2 + _ZTV19QQuickImageResponse@Base 5.5.0 _ZTV19QQuickRenderControl@Base 5.3.0 _ZTV19QQuickScaleAnimator@Base 5.2.0~beta1 1 _ZTV19QQuickWindowPrivate@Base 5.0.2 1 @@ -3230,6 +3255,7 @@ _ZTV23QQuickVector3dAnimation@Base 5.0.2 1 _ZTV23QSGDefaultRectangleNode@Base 5.1.0 1 _ZTV24QQuickAccessibleAttached@Base 5.0.2 1 + _ZTV24QQuickAsyncImageProvider@Base 5.5.0 _ZTV24QQuickOpacityAnimatorJob@Base 5.2.0~beta1 1 _ZTV24QQuickShaderEffectSource@Base 5.0.2 1 _ZTV24QQuickUniformAnimatorJob@Base 5.2.0~beta1 1 diff -Nru qtdeclarative-opensource-src-5.5.1/debian/libqt5quickparticles5.symbols qtdeclarative-opensource-src-5.5.1/debian/libqt5quickparticles5.symbols --- qtdeclarative-opensource-src-5.5.1/debian/libqt5quickparticles5.symbols 2015-10-21 18:50:23.000000000 +0000 +++ qtdeclarative-opensource-src-5.5.1/debian/libqt5quickparticles5.symbols 2016-04-12 10:44:34.000000000 +0000 @@ -1,6 +1,6 @@ -# SymbolsHelper-Confirmed: 5.5.0 amd64 hppa ppc64el s390x -libQt5QuickParticles.so.5 libqt5quickparticles5 #MINVER# -| libqt5quickparticles5 #MINVER#, qtdeclarative-abi-5-5-0 +# SymbolsHelper-Confirmed: 5.5.1 amd64 arm64 armhf i386 powerpc ppc64el +libQt5QuickParticles.so.5 libqt5quickparticles5 #MINVER# | libqt5quickparticles5-gles #MINVER# +| libqt5quickparticles5 #MINVER# | libqt5quickparticles5-gles #MINVER#, qtdeclarative-abi-5-5-0 (optional=gccinternal)_ZN10QByteArray7reserveEi@Base 5.4.2 _ZN21QQuickParticlesModule12defineModuleEv@Base 5.0.2 1 _ZTIN9QV8Engine9DeletableE@Base 5.0.2 1 diff -Nru qtdeclarative-opensource-src-5.5.1/debian/libqt5quicktest5.symbols qtdeclarative-opensource-src-5.5.1/debian/libqt5quicktest5.symbols --- qtdeclarative-opensource-src-5.5.1/debian/libqt5quicktest5.symbols 2015-10-21 18:50:23.000000000 +0000 +++ qtdeclarative-opensource-src-5.5.1/debian/libqt5quicktest5.symbols 2016-04-12 10:44:34.000000000 +0000 @@ -1,4 +1,4 @@ -# SymbolsHelper-Confirmed: 5.5.0 amd64 +# SymbolsHelper-Confirmed: 5.5.1 amd64 arm64 armhf i386 powerpc ppc64el libQt5QuickTest.so.5 libqt5quicktest5 #MINVER# | libqt5quicktest5 #MINVER#, qtdeclarative-abi-5-5-0 _Z15quick_test_mainiPPcPKcS2_@Base 5.0.2 @@ -15,7 +15,7 @@ _ZN14QuickTestEvent14keyReleaseCharERK7QStringii@Base 5.1.0 1 _ZN14QuickTestEvent16mouseDoubleClickEP7QObjectddiii@Base 5.2.0 1 _ZN14QuickTestEvent16staticMetaObjectE@Base 5.0.2 1 - _ZN14QuickTestEvent24mouseDoubleClickSequenceEP7QObjectddiii@Base 5.5.0 1 + _ZN14QuickTestEvent24mouseDoubleClickSequenceEP7QObjectddiii@Base 5.5.1 1 _ZN14QuickTestEvent8keyClickEiii@Base 5.0.2 1 _ZN14QuickTestEvent8keyPressEiii@Base 5.0.2 1 _ZN14QuickTestEvent9mouseMoveEP7QObjectddii@Base 5.2.0 1 diff -Nru qtdeclarative-opensource-src-5.5.1/debian/libqt5quickwidgets5.lintian-overrides qtdeclarative-opensource-src-5.5.1/debian/libqt5quickwidgets5.lintian-overrides --- qtdeclarative-opensource-src-5.5.1/debian/libqt5quickwidgets5.lintian-overrides 2015-06-23 13:27:48.000000000 +0000 +++ qtdeclarative-opensource-src-5.5.1/debian/libqt5quickwidgets5.lintian-overrides 2016-04-12 10:44:34.000000000 +0000 @@ -1,3 +1,3 @@ # This dependency has been added to track external packages building against # our private headers. It is ok if internal packages depend on the ABI one. -libqt5quickwidgets5: symbols-declares-dependency-on-other-package qtdeclarative-abi-5-4-0 +libqt5quickwidgets5: symbols-declares-dependency-on-other-package qtdeclarative-abi-5-5-0 diff -Nru qtdeclarative-opensource-src-5.5.1/debian/libqt5quickwidgets5.symbols qtdeclarative-opensource-src-5.5.1/debian/libqt5quickwidgets5.symbols --- qtdeclarative-opensource-src-5.5.1/debian/libqt5quickwidgets5.symbols 2015-10-21 18:50:23.000000000 +0000 +++ qtdeclarative-opensource-src-5.5.1/debian/libqt5quickwidgets5.symbols 2016-04-12 10:44:34.000000000 +0000 @@ -1,22 +1,22 @@ -# SymbolsHelper-Confirmed: 5.5.0 amd64 -libQt5QuickWidgets.so.5 libqt5quickwidgets5 #MINVER# -| libqt5quickwidgets5 #MINVER#, qtdeclarative-abi-5-5-0 +# SymbolsHelper-Confirmed: 5.5.1 amd64 arm64 armhf i386 powerpc ppc64el +libQt5QuickWidgets.so.5 libqt5quickwidgets5 #MINVER# | libqt5quickwidgets5-gles #MINVER# +| libqt5quickwidgets5 #MINVER# | libqt5quickwidgets5-gles #MINVER#, qtdeclarative-abi-5-5-0 _ZN12QQuickWidget10setContentERK4QUrlP13QQmlComponentP7QObject@Base 5.3.0 _ZN12QQuickWidget10timerEventEP11QTimerEvent@Base 5.3.0 _ZN12QQuickWidget10wheelEventEP11QWheelEvent@Base 5.3.0 _ZN12QQuickWidget11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.3.0 _ZN12QQuickWidget11qt_metacastEPKc@Base 5.3.0 _ZN12QQuickWidget11resizeEventEP12QResizeEvent@Base 5.3.0 - _ZN12QQuickWidget12focusInEventEP11QFocusEvent@Base 5.3.1 - _ZN12QQuickWidget13dragMoveEventEP14QDragMoveEvent@Base 5.5.0 - _ZN12QQuickWidget13focusOutEventEP11QFocusEvent@Base 5.3.1 + _ZN12QQuickWidget12focusInEventEP11QFocusEvent@Base 5.4.0 + _ZN12QQuickWidget13dragMoveEventEP14QDragMoveEvent@Base 5.5.1 + _ZN12QQuickWidget13focusOutEventEP11QFocusEvent@Base 5.4.0 _ZN12QQuickWidget13keyPressEventEP9QKeyEvent@Base 5.3.0 _ZN12QQuickWidget13setClearColorERK6QColor@Base 5.4.0 _ZN12QQuickWidget13setResizeModeENS_10ResizeModeE@Base 5.3.0 _ZN12QQuickWidget13statusChangedENS_6StatusE@Base 5.3.0 _ZN12QQuickWidget13triggerUpdateEv@Base 5.3.0 - _ZN12QQuickWidget14dragEnterEventEP15QDragEnterEvent@Base 5.5.0 - _ZN12QQuickWidget14dragLeaveEventEP15QDragLeaveEvent@Base 5.5.0 + _ZN12QQuickWidget14dragEnterEventEP15QDragEnterEvent@Base 5.5.1 + _ZN12QQuickWidget14dragLeaveEventEP15QDragLeaveEvent@Base 5.5.1 _ZN12QQuickWidget14mouseMoveEventEP11QMouseEvent@Base 5.3.0 _ZN12QQuickWidget15continueExecuteEv@Base 5.3.0 _ZN12QQuickWidget15keyReleaseEventEP9QKeyEvent@Base 5.3.0 @@ -28,7 +28,7 @@ _ZN12QQuickWidget23createFramebufferObjectEv@Base 5.3.0 _ZN12QQuickWidget24destroyFramebufferObjectEv@Base 5.3.0 _ZN12QQuickWidget5eventEP6QEvent@Base 5.3.0 - _ZN12QQuickWidget9dropEventEP10QDropEvent@Base 5.5.0 + _ZN12QQuickWidget9dropEventEP10QDropEvent@Base 5.5.1 _ZN12QQuickWidget9hideEventEP10QHideEvent@Base 5.3.0 _ZN12QQuickWidget9setFormatERK14QSurfaceFormat@Base 5.3.0 _ZN12QQuickWidget9setSourceERK4QUrl@Base 5.3.0 @@ -46,7 +46,7 @@ _ZNK12QQuickWidget10resizeModeEv@Base 5.3.0 _ZNK12QQuickWidget10rootObjectEv@Base 5.3.0 _ZNK12QQuickWidget11initialSizeEv@Base 5.3.0 - _ZNK12QQuickWidget11quickWindowEv@Base 5.5.0 + _ZNK12QQuickWidget11quickWindowEv@Base 5.5.1 _ZNK12QQuickWidget11rootContextEv@Base 5.3.0 _ZNK12QQuickWidget15grabFramebufferEv@Base 5.4.0 _ZNK12QQuickWidget6engineEv@Base 5.3.0 diff -Nru qtdeclarative-opensource-src-5.5.1/debian/patches/Add-isTabFence-private-flag.patch qtdeclarative-opensource-src-5.5.1/debian/patches/Add-isTabFence-private-flag.patch --- qtdeclarative-opensource-src-5.5.1/debian/patches/Add-isTabFence-private-flag.patch 1970-01-01 00:00:00.000000000 +0000 +++ qtdeclarative-opensource-src-5.5.1/debian/patches/Add-isTabFence-private-flag.patch 2016-04-12 10:44:34.000000000 +0000 @@ -0,0 +1,363 @@ +From 6328dd2d2743ed540efea89742261f24552d7611 Mon Sep 17 00:00:00 2001 +From: Gabriel de Dietrich +Date: Thu, 2 Jul 2015 18:20:41 +0200 +Subject: [PATCH] Add isTabFence private flag + +When an item has this flag set, the user can't +tab-navigate either out of it, or enter it. + +We use this flag to implement QQuickPanel as an +item for platforms that only support one single +top-level window. + +Change-Id: I1f4313912ae1c70217af0d4d21064932b50a9438 +Reviewed-by: Mitch Curtis +--- + src/quick/items/qquickitem.cpp | 89 +++++++++++++++++++------ + src/quick/items/qquickitem_p.h | 8 +++ + tests/auto/quick/qquickitem2/data/tabFence.qml | 49 ++++++++++++++ + tests/auto/quick/qquickitem2/tst_qquickitem.cpp | 72 ++++++++++++++++++++ + 4 files changed, 199 insertions(+), 19 deletions(-) + create mode 100644 tests/auto/quick/qquickitem2/data/tabFence.qml + +diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp +index 0c9ee4f..80bad4d 100644 +--- a/src/quick/items/qquickitem.cpp ++++ b/src/quick/items/qquickitem.cpp +@@ -2422,6 +2422,50 @@ bool QQuickItemPrivate::focusNextPrev(QQuickItem *item, bool forward) + return true; + } + ++QQuickItem *QQuickItemPrivate::nextTabChildItem(const QQuickItem *item, int start) ++{ ++ if (!item) { ++ qWarning() << "QQuickItemPrivate::nextTabChildItem called with null item."; ++ return Q_NULLPTR; ++ } ++ const QList &children = item->childItems(); ++ const int count = children.count(); ++ if (start < 0 || start >= count) { ++ qWarning() << "QQuickItemPrivate::nextTabChildItem: Start index value out of range for item" << item; ++ return Q_NULLPTR; ++ } ++ while (start < count) { ++ QQuickItem *child = children.at(start); ++ if (!child->d_func()->isTabFence) ++ return child; ++ ++start; ++ } ++ return Q_NULLPTR; ++} ++ ++QQuickItem *QQuickItemPrivate::prevTabChildItem(const QQuickItem *item, int start) ++{ ++ if (!item) { ++ qWarning() << "QQuickItemPrivate::prevTabChildItem called with null item."; ++ return Q_NULLPTR; ++ } ++ const QList &children = item->childItems(); ++ const int count = children.count(); ++ if (start == -1) ++ start = count - 1; ++ if (start < 0 || start >= count) { ++ qWarning() << "QQuickItemPrivate::prevTabChildItem: Start index value out of range for item" << item; ++ return Q_NULLPTR; ++ } ++ while (start >= 0) { ++ QQuickItem *child = children.at(start); ++ if (!child->d_func()->isTabFence) ++ return child; ++ --start; ++ } ++ return Q_NULLPTR; ++} ++ + QQuickItem* QQuickItemPrivate::nextPrevItemInTabFocusChain(QQuickItem *item, bool forward) + { + Q_ASSERT(item); +@@ -2444,7 +2488,6 @@ QQuickItem* QQuickItemPrivate::nextPrevItemInTabFocusChain(QQuickItem *item, boo + from = item->parentItem(); + } + bool skip = false; +- const QQuickItem * const originalItem = item; + QQuickItem * startItem = item; + QQuickItem * firstFromItem = from; + QQuickItem *current = item; +@@ -2453,46 +2496,53 @@ QQuickItem* QQuickItemPrivate::nextPrevItemInTabFocusChain(QQuickItem *item, boo + QQuickItem *last = current; + + bool hasChildren = !current->childItems().isEmpty() && current->isEnabled() && current->isVisible(); ++ QQuickItem *firstChild = Q_NULLPTR; ++ QQuickItem *lastChild = Q_NULLPTR; ++ if (hasChildren) { ++ firstChild = nextTabChildItem(current, 0); ++ if (!firstChild) ++ hasChildren = false; ++ else ++ lastChild = prevTabChildItem(current, -1); ++ } ++ bool isTabFence = current->d_func()->isTabFence; + + // coming from parent: check children + if (hasChildren && from == current->parentItem()) { + if (forward) { +- current = current->childItems().first(); ++ current = firstChild; + } else { +- current = current->childItems().last(); ++ current = lastChild; + if (!current->childItems().isEmpty()) + skip = true; + } +- } else if (hasChildren && forward && from != current->childItems().last()) { ++ } else if (hasChildren && forward && from != lastChild) { + // not last child going forwards + int nextChild = current->childItems().indexOf(from) + 1; +- current = current->childItems().at(nextChild); +- } else if (hasChildren && !forward && from != current->childItems().first()) { ++ current = nextTabChildItem(current, nextChild); ++ } else if (hasChildren && !forward && from != firstChild) { + // not first child going backwards + int prevChild = current->childItems().indexOf(from) - 1; +- current = current->childItems().at(prevChild); ++ current = prevTabChildItem(current, prevChild); + if (!current->childItems().isEmpty()) + skip = true; + // back to the parent +- } else if (current->parentItem()) { +- current = current->parentItem(); ++ } else if (QQuickItem *parent = !isTabFence ? current->parentItem() : Q_NULLPTR) { + // we would evaluate the parent twice, thus we skip + if (forward) { + skip = true; +- } else if (!forward && !current->childItems().isEmpty()) { +- if (last != current->childItems().first()) { +- skip = true; +- } else if (last == current->childItems().first()) { +- if (current->isFocusScope() && current->activeFocusOnTab() && current->hasActiveFocus()) ++ } else if (QQuickItem *firstSibling = !forward ? nextTabChildItem(parent, 0) : Q_NULLPTR) { ++ if (last != firstSibling ++ || (parent->isFocusScope() && parent->activeFocusOnTab() && parent->hasActiveFocus())) + skip = true; +- } + } ++ current = parent; + } else if (hasChildren) { + // Wrap around after checking all items forward + if (forward) { +- current = current->childItems().first(); ++ current = firstChild; + } else { +- current = current->childItems().last(); ++ current = lastChild; + if (!current->childItems().isEmpty()) + skip = true; + } +@@ -2500,9 +2550,9 @@ QQuickItem* QQuickItemPrivate::nextPrevItemInTabFocusChain(QQuickItem *item, boo + from = last; + if (current == startItem && from == firstFromItem) { + // wrapped around, avoid endless loops +- if (originalItem == contentItem) { ++ if (item == contentItem) { + qCDebug(DBG_FOCUS) << "QQuickItemPrivate::nextPrevItemInTabFocusChain: looped, return contentItem"; +- return item->window()->contentItem(); ++ return item; + } else { + qCDebug(DBG_FOCUS) << "QQuickItemPrivate::nextPrevItemInTabFocusChain: looped, return " << startItem; + return startItem; +@@ -3026,6 +3076,7 @@ QQuickItemPrivate::QQuickItemPrivate() + , activeFocusOnTab(false) + , implicitAntialiasing(false) + , antialiasingValid(false) ++ , isTabFence(false) + , dirtyAttributes(0) + , nextDirtyItem(0) + , prevDirtyItem(0) +diff --git a/src/quick/items/qquickitem_p.h b/src/quick/items/qquickitem_p.h +index 942b51b..6670975 100644 +--- a/src/quick/items/qquickitem_p.h ++++ b/src/quick/items/qquickitem_p.h +@@ -427,6 +427,12 @@ public: + bool activeFocusOnTab:1; + bool implicitAntialiasing:1; + bool antialiasingValid:1; ++ // isTabFence: When true, the item acts as a fence within the tab focus chain. ++ // This means that the item and its children will be skipped from the tab focus ++ // chain when navigating from its parent or any of its siblings. Similarly, ++ // when any of the item's descendants gets focus, the item constrains the tab ++ // focus chain and prevents tabbing outside. ++ bool isTabFence:1; + + enum DirtyType { + TransformOrigin = 0x00000001, +@@ -498,6 +504,8 @@ public: + void itemToParentTransform(QTransform &) const; + + static bool focusNextPrev(QQuickItem *item, bool forward); ++ static QQuickItem *nextTabChildItem(const QQuickItem *item, int start); ++ static QQuickItem *prevTabChildItem(const QQuickItem *item, int start); + static QQuickItem *nextPrevItemInTabFocusChain(QQuickItem *item, bool forward); + + static bool canAcceptTabFocus(QQuickItem *item); +diff --git a/tests/auto/quick/qquickitem2/data/tabFence.qml b/tests/auto/quick/qquickitem2/data/tabFence.qml +new file mode 100644 +index 0000000..fcf69b4 +--- /dev/null ++++ b/tests/auto/quick/qquickitem2/data/tabFence.qml +@@ -0,0 +1,49 @@ ++import QtQuick 2.1 ++import Test 1.0 ++ ++Item { ++ objectName: "root" ++ focus: true ++ width: 800 ++ height: 600 ++ ++ TabFence { ++ objectName: "fence1" ++ ++ TextInput { ++ objectName: "input11" ++ activeFocusOnTab: true ++ } ++ TextInput { ++ objectName: "input12" ++ activeFocusOnTab: true ++ } ++ TextInput { ++ objectName: "input13" ++ activeFocusOnTab: true ++ } ++ } ++ ++ TextInput { ++ objectName: "input1" ++ activeFocusOnTab: true ++ } ++ ++ TextInput { ++ objectName: "input2" ++ activeFocusOnTab: true ++ } ++ ++ TabFence { ++ objectName: "fence2" ++ } ++ ++ TextInput { ++ objectName: "input3" ++ activeFocusOnTab: true ++ } ++ ++ TabFence { ++ objectName: "fence3" ++ } ++} +diff --git a/tests/auto/quick/qquickitem2/tst_qquickitem.cpp b/tests/auto/quick/qquickitem2/tst_qquickitem.cpp +index 396f183..9f3de82 100644 +--- a/tests/auto/quick/qquickitem2/tst_qquickitem.cpp ++++ b/tests/auto/quick/qquickitem2/tst_qquickitem.cpp +@@ -73,6 +73,8 @@ private slots: + void nextItemInFocusChain2(); + void nextItemInFocusChain3(); + ++ void tabFence(); ++ + void keys(); + void standardKeys_data(); + void standardKeys(); +@@ -289,6 +291,20 @@ private: + + QML_DECLARE_TYPE(HollowTestItem); + ++class TabFenceItem : public QQuickItem ++{ ++ Q_OBJECT ++ ++public: ++ TabFenceItem(QQuickItem *parent = Q_NULLPTR) ++ : QQuickItem(parent) ++ { ++ QQuickItemPrivate *d = QQuickItemPrivate::get(this); ++ d->isTabFence = true; ++ } ++}; ++ ++QML_DECLARE_TYPE(TabFenceItem); + + tst_QQuickItem::tst_QQuickItem() + { +@@ -299,6 +315,7 @@ void tst_QQuickItem::initTestCase() + QQmlDataTest::initTestCase(); + qmlRegisterType("Test",1,0,"KeyTestItem"); + qmlRegisterType("Test", 1, 0, "HollowTestItem"); ++ qmlRegisterType("Test", 1, 0, "TabFence"); + } + + void tst_QQuickItem::cleanup() +@@ -1120,6 +1137,61 @@ void tst_QQuickItem::nextItemInFocusChain3() + QVERIFY(QGuiApplication::focusWindow() == window); + } + ++void verifyTabFocusChain(QQuickView *window, const char **focusChain, bool forward) ++{ ++ int idx = 0; ++ for (const char **objectName = focusChain; *objectName; ++objectName, ++idx) { ++ const QString &descrStr = QString("idx=%1 objectName=\"%2\"").arg(idx).arg(*objectName); ++ const char *descr = descrStr.toLocal8Bit().data(); ++ QKeyEvent key(QEvent::KeyPress, Qt::Key_Tab, forward ? Qt::NoModifier : Qt::ShiftModifier); ++ QGuiApplication::sendEvent(window, &key); ++ QVERIFY2(key.isAccepted(), descr); ++ ++ QQuickItem *item = findItem(window->rootObject(), *objectName); ++ QVERIFY2(item, descr); ++ QVERIFY2(item->hasActiveFocus(), descr); ++ } ++} ++ ++void tst_QQuickItem::tabFence() ++{ ++ QQuickView *window = new QQuickView(0); ++ window->setBaseSize(QSize(800,600)); ++ ++ window->setSource(testFileUrl("tabFence.qml")); ++ window->show(); ++ window->requestActivate(); ++ QVERIFY(QTest::qWaitForWindowActive(window)); ++ QVERIFY(QGuiApplication::focusWindow() == window); ++ QVERIFY(window->rootObject()->hasActiveFocus()); ++ ++ const char *rootTabFocusChain[] = { ++ "input1", "input2", "input3", "input1", Q_NULLPTR ++ }; ++ verifyTabFocusChain(window, rootTabFocusChain, true /* forward */); ++ ++ const char *rootBacktabFocusChain[] = { ++ "input3", "input2", "input1", "input3", Q_NULLPTR ++ }; ++ verifyTabFocusChain(window, rootBacktabFocusChain, false /* forward */); ++ ++ // Give focus to input11 in fence1 ++ QQuickItem *item = findItem(window->rootObject(), "input11"); ++ item->setFocus(true); ++ QVERIFY(item); ++ QVERIFY(item->hasActiveFocus()); ++ ++ const char *fence1TabFocusChain[] = { ++ "input12", "input13", "input11", "input12", Q_NULLPTR ++ }; ++ verifyTabFocusChain(window, fence1TabFocusChain, true /* forward */); ++ ++ const char *fence1BacktabFocusChain[] = { ++ "input11", "input13", "input12", "input11", Q_NULLPTR ++ }; ++ verifyTabFocusChain(window, fence1BacktabFocusChain, false /* forward */); ++} ++ + void tst_QQuickItem::keys() + { + QQuickView *window = new QQuickView(0); +-- +2.6.4 + diff -Nru qtdeclarative-opensource-src-5.5.1/debian/patches/Add-QQuickAsyncImageProvider.patch qtdeclarative-opensource-src-5.5.1/debian/patches/Add-QQuickAsyncImageProvider.patch --- qtdeclarative-opensource-src-5.5.1/debian/patches/Add-QQuickAsyncImageProvider.patch 1970-01-01 00:00:00.000000000 +0000 +++ qtdeclarative-opensource-src-5.5.1/debian/patches/Add-QQuickAsyncImageProvider.patch 2016-04-12 10:44:34.000000000 +0000 @@ -0,0 +1,1145 @@ +From f9c1b6e9c7ad3fbceef32590c5b7b6a9719fd453 Mon Sep 17 00:00:00 2001 +From: Albert Astals Cid +Date: Fri, 13 Mar 2015 17:29:57 +0100 +Subject: [PATCH] Add QQuickAsyncImageProvider + +It allows for providers to implement threading on their side + +Change-Id: I34042b213ce7697a3e39470387357d733e15723c +Reviewed-by: Gunnar Sletta +--- + .../ImageResponseProviderCore/qmldir | 2 + + .../doc/src/imageresponseprovider.qdoc | 35 +++ + .../imageresponseprovider-example.qml | 48 ++++ + .../imageresponseprovider.cpp | 123 ++++++++++ + .../imageresponseprovider.pro | 15 ++ + .../imageresponseprovider.qmlproject | 14 ++ + examples/quick/quick.pro | 1 + + src/qml/qml/qqmlengine.cpp | 4 + + src/qml/qml/qqmlengine.h | 4 +- + src/quick/util/qquickimageprovider.cpp | 124 +++++++++- + src/quick/util/qquickimageprovider.h | 32 +++ + src/quick/util/qquickpixmapcache.cpp | 271 +++++++++++++-------- + .../tst_qquickimageprovider.cpp | 98 ++++++++ + 13 files changed, 673 insertions(+), 98 deletions(-) + create mode 100644 examples/quick/imageresponseprovider/ImageResponseProviderCore/qmldir + create mode 100644 examples/quick/imageresponseprovider/doc/src/imageresponseprovider.qdoc + create mode 100644 examples/quick/imageresponseprovider/imageresponseprovider-example.qml + create mode 100644 examples/quick/imageresponseprovider/imageresponseprovider.cpp + create mode 100644 examples/quick/imageresponseprovider/imageresponseprovider.pro + create mode 100644 examples/quick/imageresponseprovider/imageresponseprovider.qmlproject + +diff --git a/examples/quick/imageresponseprovider/ImageResponseProviderCore/qmldir b/examples/quick/imageresponseprovider/ImageResponseProviderCore/qmldir +new file mode 100644 +index 0000000..3a5821b +--- /dev/null ++++ b/examples/quick/imageresponseprovider/ImageResponseProviderCore/qmldir +@@ -0,0 +1,2 @@ ++plugin qmlimageresponseproviderplugin ++ +diff --git a/examples/quick/imageresponseprovider/doc/src/imageresponseprovider.qdoc b/examples/quick/imageresponseprovider/doc/src/imageresponseprovider.qdoc +new file mode 100644 +index 0000000..afe1d40 +--- /dev/null ++++ b/examples/quick/imageresponseprovider/doc/src/imageresponseprovider.qdoc +@@ -0,0 +1,35 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2015 Canonical Limited and/or its subsidiary(-ies) ++** Contact: http://www.qt.io/licensing/ ++** ++** This file is part of the documentation of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:FDL$ ++** Commercial License Usage ++** Licensees holding valid commercial Qt licenses may use this file in ++** accordance with the commercial license agreement provided with the ++** Software or, alternatively, in accordance with the terms contained in ++** a written agreement between you and The Qt Company. For licensing terms ++** and conditions see http://www.qt.io/terms-conditions. For further ++** information use the contact form at http://www.qt.io/contact-us. ++** ++** GNU Free Documentation License Usage ++** Alternatively, this file may be used under the terms of the GNU Free ++** Documentation License version 1.3 as published by the Free Software ++** Foundation and appearing in the file included in the packaging of ++** this file. Please review the following information to ensure ++** the GNU Free Documentation License version 1.3 requirements ++** will be met: http://www.gnu.org/copyleft/fdl.html. ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++ ++/*! ++ \title C++ Extensions: Image Response Provider Example ++ \example imageresponseprovider ++ ++ This examples shows how to use QQuickImageProvider to serve images ++ asynchronously to QML image elements. ++*/ ++ +diff --git a/examples/quick/imageresponseprovider/imageresponseprovider-example.qml b/examples/quick/imageresponseprovider/imageresponseprovider-example.qml +new file mode 100644 +index 0000000..20c1e69 +--- /dev/null ++++ b/examples/quick/imageresponseprovider/imageresponseprovider-example.qml +@@ -0,0 +1,48 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2015 Canonical Limited and/or its subsidiary(-ies) ++** Contact: http://www.qt.io/licensing/ ++** ++** This file is part of the demonstration applications of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:BSD$ ++** You may use this file under the terms of the BSD license as follows: ++** ++** "Redistribution and use in source and binary forms, with or without ++** modification, are permitted provided that the following conditions are ++** met: ++** * Redistributions of source code must retain the above copyright ++** notice, this list of conditions and the following disclaimer. ++** * Redistributions in binary form must reproduce the above copyright ++** notice, this list of conditions and the following disclaimer in ++** the documentation and/or other materials provided with the ++** distribution. ++** * Neither the name of The Qt Company Ltd nor the names of its ++** contributors may be used to endorse or promote products derived ++** from this software without specific prior written permission. ++** ++** ++** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ++** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ++** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ++** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ++** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ++** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ++** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ++** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ++** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ++** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++ ++import QtQuick 2.0 ++import "ImageResponseProviderCore" ++ ++Column { ++ Image { source: "image://async/slow" } ++ Image { source: "image://async/fast" } ++} ++ +diff --git a/examples/quick/imageresponseprovider/imageresponseprovider.cpp b/examples/quick/imageresponseprovider/imageresponseprovider.cpp +new file mode 100644 +index 0000000..bdec291 +--- /dev/null ++++ b/examples/quick/imageresponseprovider/imageresponseprovider.cpp +@@ -0,0 +1,123 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2015 Canonical Limited and/or its subsidiary(-ies) ++** Contact: http://www.qt.io/licensing/ ++** ++** This file is part of the demonstration applications of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:BSD$ ++** You may use this file under the terms of the BSD license as follows: ++** ++** "Redistribution and use in source and binary forms, with or without ++** modification, are permitted provided that the following conditions are ++** met: ++** * Redistributions of source code must retain the above copyright ++** notice, this list of conditions and the following disclaimer. ++** * Redistributions in binary form must reproduce the above copyright ++** notice, this list of conditions and the following disclaimer in ++** the documentation and/or other materials provided with the ++** distribution. ++** * Neither the name of The Qt Company Ltd nor the names of its ++** contributors may be used to endorse or promote products derived ++** from this software without specific prior written permission. ++** ++** ++** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ++** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ++** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ++** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ++** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ++** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ++** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ++** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ++** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ++** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++ ++ ++#include ++ ++#include ++#include ++#include ++#include ++#include ++ ++class AsyncImageResponse : public QQuickImageResponse, public QRunnable ++{ ++ public: ++ AsyncImageResponse(const QString &id, const QSize &requestedSize) ++ : m_id(id), m_requestedSize(requestedSize), m_texture(0) ++ { ++ setAutoDelete(false); ++ } ++ ++ QQuickTextureFactory *textureFactory() const ++ { ++ return m_texture; ++ } ++ ++ void run() ++ { ++ QImage image(50, 50, QImage::Format_RGB32); ++ if (m_id == "slow") { ++ qDebug() << "Slow, red, sleeping for 5 seconds"; ++ QThread::sleep(5); ++ image.fill(Qt::red); ++ } else { ++ qDebug() << "Fast, blue, sleeping for 1 second"; ++ QThread::sleep(1); ++ image.fill(Qt::blue); ++ } ++ if (m_requestedSize.isValid()) ++ image = image.scaled(m_requestedSize); ++ m_texture = QQuickTextureFactory::textureFactoryForImage(image); ++ emit finished(); ++ } ++ ++ QString m_id; ++ QSize m_requestedSize; ++ QQuickTextureFactory *m_texture; ++}; ++ ++class AsyncImageProvider : public QQuickAsyncImageProvider ++{ ++public: ++ QQuickImageResponse *requestImageResponse(const QString &id, const QSize &requestedSize) ++ { ++ AsyncImageResponse *response = new AsyncImageResponse(id, requestedSize); ++ pool.start(response); ++ return response; ++ } ++ ++private: ++ QThreadPool pool; ++}; ++ ++ ++class ImageProviderExtensionPlugin : public QQmlExtensionPlugin ++{ ++ Q_OBJECT ++ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface") ++public: ++ void registerTypes(const char *uri) ++ { ++ Q_UNUSED(uri); ++ } ++ ++ void initializeEngine(QQmlEngine *engine, const char *uri) ++ { ++ Q_UNUSED(uri); ++ engine->addImageProvider("async", new AsyncImageProvider); ++ } ++ ++}; ++ ++ ++#define QQmlExtensionInterface_iid "org.qt-project.Qt.QQmlExtensionInterface" ++ ++#include "imageresponseprovider.moc" +diff --git a/examples/quick/imageresponseprovider/imageresponseprovider.pro b/examples/quick/imageresponseprovider/imageresponseprovider.pro +new file mode 100644 +index 0000000..856ddde +--- /dev/null ++++ b/examples/quick/imageresponseprovider/imageresponseprovider.pro +@@ -0,0 +1,15 @@ ++TEMPLATE = lib ++CONFIG += plugin ++QT += qml quick ++ ++DESTDIR = ImageResponseProviderCore ++TARGET = qmlimageresponseproviderplugin ++ ++SOURCES += imageresponseprovider.cpp ++ ++EXAMPLE_FILES = imageresponseprovider-example.qml ++ ++target.path = $$[QT_INSTALL_EXAMPLES]/quick/imageresponseprovider/ImageResponseProviderCore ++qml.files = ImageResponseProviderCore/qmldir ++qml.path = $$[QT_INSTALL_EXAMPLES]/quick/imageresponseprovider/ImageResponseProviderCore ++INSTALLS = target qml +diff --git a/examples/quick/imageresponseprovider/imageresponseprovider.qmlproject b/examples/quick/imageresponseprovider/imageresponseprovider.qmlproject +new file mode 100644 +index 0000000..2bb4016 +--- /dev/null ++++ b/examples/quick/imageresponseprovider/imageresponseprovider.qmlproject +@@ -0,0 +1,14 @@ ++import QmlProject 1.0 ++ ++Project { ++ /* Include .qml, .js, and image files from current directory and subdirectories */ ++ QmlFiles { ++ directory: "." ++ } ++ JavaScriptFiles { ++ directory: "." ++ } ++ ImageFiles { ++ directory: "." ++ } ++} +diff --git a/examples/quick/quick.pro b/examples/quick/quick.pro +index a412c53..c5ef461 100644 +--- a/examples/quick/quick.pro ++++ b/examples/quick/quick.pro +@@ -20,6 +20,7 @@ SUBDIRS = quick-accessibility \ + tutorials \ + customitems \ + imageprovider \ ++ imageresponseprovider \ + window \ + particles \ + demos \ +diff --git a/src/qml/qml/qqmlengine.cpp b/src/qml/qml/qqmlengine.cpp +index 92e98e3..96fb2f1 100644 +--- a/src/qml/qml/qqmlengine.cpp ++++ b/src/qml/qml/qqmlengine.cpp +@@ -247,6 +247,10 @@ void QQmlEnginePrivate::activateDesignerMode() + The QQuickImageProvider::requestPixmap() method will be called for all image requests. + \value Texture The Image Provider provides QSGTextureProvider based images. + The QQuickImageProvider::requestTexture() method will be called for all image requests. ++ \value ImageResponse The Image provider provides QQuickTextureFactory based images. ++ Should only be used in QQuickAsyncImageProvider or its subclasses. ++ The QQuickAsyncImageProvider::requestImageResponse() method will be called for all image requests. ++ Since Qt 5.6 + \omitvalue Invalid + */ + +diff --git a/src/qml/qml/qqmlengine.h b/src/qml/qml/qqmlengine.h +index df673c1..61a8842 100644 +--- a/src/qml/qml/qqmlengine.h ++++ b/src/qml/qml/qqmlengine.h +@@ -52,7 +52,9 @@ public: + Image, + Pixmap, + Texture, +- Invalid ++ Invalid, ++ ImageResponse ++ // ### Qt6: reorder these, and give Invalid a fixed large value + }; + + enum Flag { +diff --git a/src/quick/util/qquickimageprovider.cpp b/src/quick/util/qquickimageprovider.cpp +index a231209..a2fe4c8 100644 +--- a/src/quick/util/qquickimageprovider.cpp ++++ b/src/quick/util/qquickimageprovider.cpp +@@ -33,6 +33,9 @@ + + #include "qquickimageprovider.h" + ++#include "qquickpixmapcache_p.h" ++#include ++ + QT_BEGIN_NAMESPACE + + class QQuickImageProviderPrivate +@@ -95,6 +98,23 @@ QImage QQuickTextureFactory::image() const + return QImage(); + } + ++/*! ++ Returns a QQuickTextureFactory holding given the image. ++ ++ \since 5.6 ++ */ ++ ++QQuickTextureFactory *QQuickTextureFactory::textureFactoryForImage(const QImage &image) ++{ ++ if (image.isNull()) ++ return 0; ++ QQuickTextureFactory *texture = QSGContext::createTextureFactoryFromImage(image); ++ if (texture) ++ return texture; ++ return new QQuickDefaultTextureFactory(image); ++} ++ ++ + + /*! + \fn QSGTexture *QQuickTextureFactory::createTexture(QQuickWindow *window) const +@@ -118,6 +138,67 @@ QImage QQuickTextureFactory::image() const + + + /*! ++ \class QQuickImageResponse ++ \since 5.6 ++ \brief The QQuickImageResponse class provides an interface for asynchronous image loading in QQuickAsyncImageProvider. ++ \inmodule QtQuick ++ ++ The purpose of an image response is to provide a way for image provider jobs to be executed ++ in an asynchronous way. ++ ++ Responses are deleted via \l deleteLater once the finished() signal has been emitted. ++ If you are using QRunnable as base for your QQuickImageResponse ++ ensure automatic deletion is disabled. ++ ++ \sa QQuickImageProvider ++*/ ++ ++/*! ++ Constructs the image response ++*/ ++QQuickImageResponse::QQuickImageResponse() ++{ ++} ++ ++/*! ++ Destructs the image response ++*/ ++QQuickImageResponse::~QQuickImageResponse() ++{ ++} ++ ++/*! ++ Returns the error string for the job execution. An empty string means no error. ++*/ ++QString QQuickImageResponse::errorString() const ++{ ++ return QString(); ++} ++ ++/*! ++ This method is used to communicate that the response is no longer required by the engine. ++ ++ It may be reimplemented to cancel a request in the provider side, however, it is not mandatory. ++*/ ++void QQuickImageResponse::cancel() ++{ ++} ++ ++/*! ++ \fn void QQuickImageResponse::finished() ++ ++ Signals that the job execution has finished (be it successfully, because an error happened or because it was cancelled). ++ */ ++ ++/*! ++ \fn QQuickTextureFactory *QQuickImageResponse::textureFactory() const ++ ++ Returns the texture factory the job. You can use QQuickTextureFactory::textureFactoryForImage ++ if your provider works with QImage ++ */ ++ ++ ++/*! + \class QQuickImageProvider + \since 5.0 + \inmodule QtQuick +@@ -213,7 +294,7 @@ QImage QQuickTextureFactory::image() const + + To force asynchronous image loading, even for image sources that do not + have the \c asynchronous property set to \c true, you may pass the +- \c QQuickImageProvider::ForceAsynchronousImageLoading flag to the image ++ \c QQmlImageProviderBase::ForceAsynchronousImageLoading flag to the image + provider constructor. This ensures that all image requests for the + provider are handled in a separate thread. + +@@ -223,6 +304,12 @@ QImage QQuickTextureFactory::image() const + if \l {Image::}{asynchronous} is set to \c true, the value is ignored + and the image is loaded synchronously. + ++ Asynchronous image loading for providers of type other than ImageResponse are ++ executed on a single thread per engine basis. That means that a slow image provider ++ will block the loading of any other request. To avoid that we suggest using QQuickAsyncImageProvider ++ and implement threading on the provider side via a \c QThreadPool or similar. ++ See the \l {imageresponseprovider}{Image Response Provider Example} for a complete implementation. ++ + + \section2 Image caching + +@@ -365,5 +452,40 @@ QQuickTextureFactory *QQuickImageProvider::requestTexture(const QString &id, QSi + return 0; + } + ++/*! ++ \class QQuickAsyncImageProvider ++ \since 5.6 ++ \inmodule QtQuick ++ \brief The QQuickAsyncImageProvider class provides an interface for for asynchronous control of QML image requests. ++ ++ \sa QQuickImageProvider ++*/ ++QQuickAsyncImageProvider::QQuickAsyncImageProvider() ++ : QQuickImageProvider(ImageResponse, ForceAsynchronousImageLoading) ++ , d(0) // just as a placeholder in case we need it for the future ++{ ++} ++ ++QQuickAsyncImageProvider::~QQuickAsyncImageProvider() ++{ ++} ++ ++/*! ++ \fn QQuickImageResponse *QQuickAsyncImageProvider::requestImageResponse(const QString &id, const QSize &requestedSize) ++ ++ Implement this method to return the job that will provide the texture with \a id. ++ ++ The \a id is the requested image source, with the "image:" scheme and ++ provider identifier removed. For example, if the image \l{Image::}{source} ++ was "image://myprovider/icons/home", the given \a id would be "icons/home". ++ ++ The \a requestedSize corresponds to the \l {Image::sourceSize} requested by ++ an Image item. If \a requestedSize is a valid size, the image ++ returned should be of that size. ++ ++ \note this method may be called by multiple threads, so ensure the ++ implementation of this method is reentrant. ++*/ ++ + QT_END_NAMESPACE + +diff --git a/src/quick/util/qquickimageprovider.h b/src/quick/util/qquickimageprovider.h +index 095dd09..ea3f37c 100644 +--- a/src/quick/util/qquickimageprovider.h ++++ b/src/quick/util/qquickimageprovider.h +@@ -43,6 +43,7 @@ QT_BEGIN_NAMESPACE + + + class QQuickImageProviderPrivate; ++class QQuickAsyncImageProviderPrivate; + class QSGTexture; + class QQuickWindow; + +@@ -56,6 +57,25 @@ public: + virtual QSize textureSize() const = 0; + virtual int textureByteCount() const = 0; + virtual QImage image() const; ++ ++ static QQuickTextureFactory *textureFactoryForImage(const QImage &image); ++}; ++ ++class Q_QUICK_EXPORT QQuickImageResponse : public QObject ++{ ++Q_OBJECT ++public: ++ QQuickImageResponse(); ++ virtual ~QQuickImageResponse(); ++ ++ virtual QQuickTextureFactory *textureFactory() const = 0; ++ virtual QString errorString() const; ++ ++public Q_SLOTS: ++ virtual void cancel(); ++ ++Q_SIGNALS: ++ void finished(); + }; + + class Q_QUICK_EXPORT QQuickImageProvider : public QQmlImageProviderBase +@@ -75,6 +95,18 @@ private: + QQuickImageProviderPrivate *d; + }; + ++class Q_QUICK_EXPORT QQuickAsyncImageProvider : public QQuickImageProvider ++{ ++public: ++ QQuickAsyncImageProvider(); ++ virtual ~QQuickAsyncImageProvider(); ++ ++ virtual QQuickImageResponse *requestImageResponse(const QString &id, const QSize &requestedSize) = 0; ++ ++private: ++ QQuickAsyncImageProviderPrivate *d; ++}; ++ + QT_END_NAMESPACE + + #endif // QQUICKIMAGEPROVIDER_H +diff --git a/src/quick/util/qquickpixmapcache.cpp b/src/quick/util/qquickpixmapcache.cpp +index 2066d1e..810629c 100644 +--- a/src/quick/util/qquickpixmapcache.cpp ++++ b/src/quick/util/qquickpixmapcache.cpp +@@ -44,7 +44,6 @@ + #include + + #include +-#include + + #include + #include +@@ -67,7 +66,7 @@ + + #include + +-#define IMAGEREQUEST_MAX_REQUEST_COUNT 8 ++#define IMAGEREQUEST_MAX_NETWORK_REQUEST_COUNT 8 + #define IMAGEREQUEST_MAX_REDIRECT_RECURSION 16 + #define CACHE_EXPIRE_TIME 30 + #define CACHE_REMOVAL_FRACTION 4 +@@ -115,16 +114,6 @@ QSGTexture *QQuickDefaultTextureFactory::createTexture(QQuickWindow *window) con + return t; + } + +-static QQuickTextureFactory *textureFactoryForImage(const QImage &image) +-{ +- if (image.isNull()) +- return 0; +- QQuickTextureFactory *texture = QSGContext::createTextureFactoryFromImage(image); +- if (texture) +- return texture; +- return new QQuickDefaultTextureFactory(image); +-} +- + class QQuickPixmapReader; + class QQuickPixmapData; + class QQuickPixmapReply : public QObject +@@ -179,6 +168,7 @@ public: + virtual bool event(QEvent *e); + private slots: + void networkRequestDone(); ++ void asyncResponseFinished(); + private: + QQuickPixmapReader *reader; + }; +@@ -203,8 +193,9 @@ protected: + private: + friend class QQuickPixmapReaderThreadObject; + void processJobs(); +- void processJob(QQuickPixmapReply *, const QUrl &, const QSize &, AutoTransform); ++ void processJob(QQuickPixmapReply *, const QUrl &, const QString &, AutoTransform, QQuickImageProvider::ImageType, QQuickImageProvider *); + void networkRequestDone(QNetworkReply *); ++ void asyncResponseFinished(QQuickImageResponse *); + + QList jobs; + QList cancelled; +@@ -218,7 +209,8 @@ private: + QNetworkAccessManager *networkAccessManager(); + QNetworkAccessManager *accessManager; + +- QHash replies; ++ QHash networkJobs; ++ QHash asyncResponses; + + static int replyDownloadProgress; + static int replyFinished; +@@ -423,8 +415,8 @@ QQuickPixmapReader::~QQuickPixmapReader() + delete reply; + } + jobs.clear(); +- QList activeJobs = replies.values(); +- foreach (QQuickPixmapReply *reply, activeJobs) { ++ QList activeJobs = networkJobs.values() + asyncResponses.values(); ++ foreach (QQuickPixmapReply *reply, activeJobs ) { + if (reply->loading) { + cancelled.append(reply); + reply->data = 0; +@@ -439,7 +431,7 @@ QQuickPixmapReader::~QQuickPixmapReader() + + void QQuickPixmapReader::networkRequestDone(QNetworkReply *reply) + { +- QQuickPixmapReply *job = replies.take(reply); ++ QQuickPixmapReply *job = networkJobs.take(reply); + + if (job) { + job->redirectCount++; +@@ -456,7 +448,7 @@ void QQuickPixmapReader::networkRequestDone(QNetworkReply *reply) + QMetaObject::connect(reply, replyDownloadProgress, job, downloadProgress); + QMetaObject::connect(reply, replyFinished, threadObject, threadNetworkRequestDone); + +- replies.insert(reply, job); ++ networkJobs.insert(reply, job); + return; + } + } +@@ -478,7 +470,7 @@ void QQuickPixmapReader::networkRequestDone(QNetworkReply *reply) + // send completion event to the QQuickPixmapReply + mutex.lock(); + if (!cancelled.contains(job)) +- job->postReply(error, errorString, readSize, textureFactoryForImage(image)); ++ job->postReply(error, errorString, readSize, QQuickTextureFactory::textureFactoryForImage(image)); + mutex.unlock(); + } + reply->deleteLater(); +@@ -487,6 +479,34 @@ void QQuickPixmapReader::networkRequestDone(QNetworkReply *reply) + threadObject->processJobs(); + } + ++void QQuickPixmapReader::asyncResponseFinished(QQuickImageResponse *response) ++{ ++ QQuickPixmapReply *job = asyncResponses.take(response); ++ ++ if (job) { ++ QQuickTextureFactory *t = 0; ++ QQuickPixmapReply::ReadError error = QQuickPixmapReply::NoError; ++ QString errorString; ++ QSize readSize; ++ if (!response->errorString().isEmpty()) { ++ error = QQuickPixmapReply::Loading; ++ errorString = response->errorString(); ++ } else { ++ t = response->textureFactory(); ++ } ++ mutex.lock(); ++ if (!cancelled.contains(job)) ++ job->postReply(error, errorString, t ? t->textureSize() : QSize(), t); ++ else ++ delete t; ++ mutex.unlock(); ++ } ++ response->deleteLater(); ++ ++ // kick off event loop again incase we have dropped below max request count ++ threadObject->processJobs(); ++} ++ + QQuickPixmapReaderThreadObject::QQuickPixmapReaderThreadObject(QQuickPixmapReader *i) + : reader(i) + { +@@ -513,6 +513,12 @@ + reader->networkRequestDone(reply); + } + ++void QQuickPixmapReaderThreadObject::asyncResponseFinished() ++{ ++ QQuickImageResponse *response = static_cast(sender()); ++ reader->asyncResponseFinished(response); ++} ++ + void QQuickPixmapReader::processJobs() + { + QMutexLocker locker(&mutex); +@@ -522,16 +522,22 @@ + return; // Nothing else to do + + // Clean cancelled jobs +- if (cancelled.count()) { ++ if (!cancelled.isEmpty()) { + for (int i = 0; i < cancelled.count(); ++i) { + QQuickPixmapReply *job = cancelled.at(i); +- QNetworkReply *reply = replies.key(job, 0); ++ QNetworkReply *reply = networkJobs.key(job, 0); + if (reply) { +- replies.remove(reply); ++ networkJobs.remove(reply); + if (reply->isRunning()) { + // cancel any jobs already started + reply->close(); + } ++ } else { ++ QQuickImageResponse *asyncResponse = asyncResponses.key(job); ++ if (asyncResponse) { ++ asyncResponses.remove(asyncResponse); ++ asyncResponse->cancel(); ++ } + } + PIXMAP_PROFILE(pixmapStateChanged(job->url)); + // deleteLater, since not owned by this thread +@@ -544,27 +550,33 @@ + // Find a job we can use + bool usableJob = false; + for (int i = jobs.count() - 1; !usableJob && i >= 0; i--) { +- QQuickPixmapReply *runningJob = jobs[i]; +- const QUrl url = runningJob->url; ++ QQuickPixmapReply *job = jobs[i]; ++ const QUrl url = job->url; ++ QString localFile; ++ QQuickImageProvider::ImageType imageType = QQuickImageProvider::Invalid; ++ QQuickImageProvider *provider = 0; + + if (url.scheme() == QLatin1String("image")) { ++ provider = static_cast(engine->imageProvider(imageProviderId(url))); ++ if (provider) ++ imageType = provider->imageType(); ++ + usableJob = true; + } else { +- const QString localFile = QQmlFile::urlToLocalFileOrQrc(url); +- usableJob = !localFile.isEmpty() || replies.count() < IMAGEREQUEST_MAX_REQUEST_COUNT; ++ localFile = QQmlFile::urlToLocalFileOrQrc(url); ++ usableJob = !localFile.isEmpty() || networkJobs.count() < IMAGEREQUEST_MAX_NETWORK_REQUEST_COUNT; + } +- ++ + if (usableJob) { + jobs.removeAt(i); + +- runningJob->loading = true; ++ job->loading = true; + + PIXMAP_PROFILE(pixmapStateChanged(url)); + +- QSize requestSize = runningJob->requestSize; +- AutoTransform autoTransform = runningJob->autoTransform; ++ AutoTransform autoTransform = job->autoTransform; + locker.unlock(); +- processJob(runningJob, url, requestSize, autoTransform); ++ processJob(job, url, localFile, autoTransform, imageType, provider); + locker.relock(); + } + } +@@ -574,79 +586,97 @@ + } + } + +-void QQuickPixmapReader::processJob(QQuickPixmapReply *runningJob, const QUrl &url, +- const QSize &requestSize, AutoTransform autoTransform) ++void QQuickPixmapReader::processJob(QQuickPixmapReply *runningJob, const QUrl &url, const QString &localFile, ++ AutoTransform autoTransform, QQuickImageProvider::ImageType imageType, QQuickImageProvider *provider) + { + // fetch + if (url.scheme() == QLatin1String("image")) { + // Use QQuickImageProvider + QSize readSize; + +- QQuickImageProvider::ImageType imageType = QQuickImageProvider::Invalid; +- QQuickImageProvider *provider = static_cast(engine->imageProvider(imageProviderId(url))); +- if (provider) +- imageType = provider->imageType(); +- +- if (imageType == QQuickImageProvider::Invalid) { +- QQuickPixmapReply::ReadError errorCode = QQuickPixmapReply::Loading; +- QString errorStr = QQuickPixmap::tr("Invalid image provider: %1").arg(url.toString()); +- QImage image; +- mutex.lock(); +- if (!cancelled.contains(runningJob)) +- runningJob->postReply(errorCode, errorStr, readSize, textureFactoryForImage(image)); +- mutex.unlock(); +- } else if (imageType == QQuickImageProvider::Image) { +- QImage image = provider->requestImage(imageId(url), &readSize, requestSize); +- QQuickPixmapReply::ReadError errorCode = QQuickPixmapReply::NoError; +- QString errorStr; +- if (image.isNull()) { +- errorCode = QQuickPixmapReply::Loading; +- errorStr = QQuickPixmap::tr("Failed to get image from provider: %1").arg(url.toString()); +- } +- mutex.lock(); +- if (!cancelled.contains(runningJob)) +- runningJob->postReply(errorCode, errorStr, readSize, textureFactoryForImage(image)); +- mutex.unlock(); +- } else if (imageType == QQuickImageProvider::Pixmap) { +- const QPixmap pixmap = provider->requestPixmap(imageId(url), &readSize, requestSize); +- QQuickPixmapReply::ReadError errorCode = QQuickPixmapReply::NoError; +- QString errorStr; +- if (pixmap.isNull()) { +- errorCode = QQuickPixmapReply::Loading; +- errorStr = QQuickPixmap::tr("Failed to get image from provider: %1").arg(url.toString()); +- } +- mutex.lock(); +- if (!cancelled.contains(runningJob)) +- runningJob->postReply(errorCode, errorStr, readSize, textureFactoryForImage(pixmap.toImage())); +- mutex.unlock(); +- } else { +- QQuickTextureFactory *t = provider->requestTexture(imageId(url), &readSize, requestSize); +- QQuickPixmapReply::ReadError errorCode = QQuickPixmapReply::NoError; +- QString errorStr; +- if (!t) { +- errorCode = QQuickPixmapReply::Loading; +- errorStr = QQuickPixmap::tr("Failed to get texture from provider: %1").arg(url.toString()); +- } +- mutex.lock(); +- if (!cancelled.contains(runningJob)) +- runningJob->postReply(errorCode, errorStr, readSize, t); +- else +- delete t; +- mutex.unlock(); ++ switch (imageType) { ++ case QQuickImageProvider::Invalid: ++ { ++ QString errorStr = QQuickPixmap::tr("Invalid image provider: %1").arg(url.toString()); ++ mutex.lock(); ++ if (!cancelled.contains(runningJob)) ++ runningJob->postReply(QQuickPixmapReply::Loading, errorStr, readSize, 0); ++ mutex.unlock(); ++ break; ++ } + ++ case QQuickImageProvider::Image: ++ { ++ QImage image = provider->requestImage(imageId(url), &readSize, runningJob->requestSize); ++ QQuickPixmapReply::ReadError errorCode = QQuickPixmapReply::NoError; ++ QString errorStr; ++ if (image.isNull()) { ++ errorCode = QQuickPixmapReply::Loading; ++ errorStr = QQuickPixmap::tr("Failed to get image from provider: %1").arg(url.toString()); ++ } ++ mutex.lock(); ++ if (!cancelled.contains(runningJob)) ++ runningJob->postReply(errorCode, errorStr, readSize, QQuickTextureFactory::textureFactoryForImage(image)); ++ mutex.unlock(); ++ break; ++ } ++ ++ case QQuickImageProvider::Pixmap: ++ { ++ const QPixmap pixmap = provider->requestPixmap(imageId(url), &readSize, runningJob->requestSize); ++ QQuickPixmapReply::ReadError errorCode = QQuickPixmapReply::NoError; ++ QString errorStr; ++ if (pixmap.isNull()) { ++ errorCode = QQuickPixmapReply::Loading; ++ errorStr = QQuickPixmap::tr("Failed to get image from provider: %1").arg(url.toString()); ++ } ++ mutex.lock(); ++ if (!cancelled.contains(runningJob)) ++ runningJob->postReply(errorCode, errorStr, readSize, QQuickTextureFactory::textureFactoryForImage(pixmap.toImage())); ++ mutex.unlock(); ++ break; ++ } ++ ++ case QQuickImageProvider::Texture: ++ { ++ QQuickTextureFactory *t = provider->requestTexture(imageId(url), &readSize, runningJob->requestSize); ++ QQuickPixmapReply::ReadError errorCode = QQuickPixmapReply::NoError; ++ QString errorStr; ++ if (!t) { ++ errorCode = QQuickPixmapReply::Loading; ++ errorStr = QQuickPixmap::tr("Failed to get texture from provider: %1").arg(url.toString()); ++ } ++ mutex.lock(); ++ if (!cancelled.contains(runningJob)) ++ runningJob->postReply(errorCode, errorStr, readSize, t); ++ else ++ delete t; ++ mutex.unlock(); ++ break; ++ } ++ ++ case QQuickImageProvider::ImageResponse: ++ { ++ QQuickAsyncImageProvider *asyncProvider = static_cast(provider); ++ QQuickImageResponse *response = asyncProvider->requestImageResponse(imageId(url), runningJob->requestSize); ++ ++ QObject::connect(response, SIGNAL(finished()), threadObject, SLOT(asyncResponseFinished())); ++ ++ asyncResponses.insert(response, runningJob); ++ break; ++ } + } + + } else { +- QString lf = QQmlFile::urlToLocalFileOrQrc(url); +- if (!lf.isEmpty()) { ++ if (!localFile.isEmpty()) { + // Image is local - load/decode immediately + QImage image; + QQuickPixmapReply::ReadError errorCode = QQuickPixmapReply::NoError; + QString errorStr; +- QFile f(lf); ++ QFile f(localFile); + QSize readSize; + if (f.open(QIODevice::ReadOnly)) { +- if (!readImage(url, &f, &image, &errorStr, &readSize, requestSize, autoTransform)) ++ if (!readImage(url, &f, &image, &errorStr, &readSize, runningJob->requestSize, autoTransform)) + errorCode = QQuickPixmapReply::Loading; + } else { + errorStr = QQuickPixmap::tr("Cannot open: %1").arg(url.toString()); +@@ -633,7 +709,7 @@ void QQuickPixmapReader::processJob(QQuickPixmapReply *runningJob, const QUrl &u + } + mutex.lock(); + if (!cancelled.contains(runningJob)) +- runningJob->postReply(errorCode, errorStr, readSize, textureFactoryForImage(image)); ++ runningJob->postReply(errorCode, errorStr, readSize, QQuickTextureFactory::textureFactoryForImage(image)); + mutex.unlock(); + } else { + // Network resource +@@ -644,7 +720,7 @@ void QQuickPixmapReader::processJob(QQuickPixmapReply *runningJob, const QUrl &u + QMetaObject::connect(reply, replyDownloadProgress, runningJob, downloadProgress); + QMetaObject::connect(reply, replyFinished, threadObject, threadNetworkRequestDone); + +- replies.insert(reply, runningJob); ++ networkJobs.insert(reply, runningJob); + } + } + } +@@ -736,8 +812,6 @@ inline uint qHash(const QQuickPixmapKey &key) + return qHash(*key.url) ^ (key.size->width()*7) ^ (key.size->height()*17) ^ (key.autoTransform * 0x5c5c5c5c); + } + +-class QSGContext; +- + class QQuickPixmapStore : public QObject + { + Q_OBJECT +@@ -1044,7 +1118,7 @@ static QQuickPixmapData* createPixmapDataSync(QQuickPixmap *declarativePixmap, Q + QImage image = provider->requestImage(imageId(url), &readSize, requestSize); + if (!image.isNull()) { + *ok = true; +- return new QQuickPixmapData(declarativePixmap, url, textureFactoryForImage(image), readSize, requestSize, autoTransform, UsePluginDefault); ++ return new QQuickPixmapData(declarativePixmap, url, QQuickTextureFactory::textureFactoryForImage(image), readSize, requestSize, autoTransform, UsePluginDefault); + } + } + case QQuickImageProvider::Pixmap: +@@ -1052,9 +1126,14 @@ static QQuickPixmapData* createPixmapDataSync(QQuickPixmap *declarativePixmap, Q + QPixmap pixmap = provider->requestPixmap(imageId(url), &readSize, requestSize); + if (!pixmap.isNull()) { + *ok = true; +- return new QQuickPixmapData(declarativePixmap, url, textureFactoryForImage(pixmap.toImage()), readSize, requestSize, autoTransform, UsePluginDefault); ++ return new QQuickPixmapData(declarativePixmap, url, QQuickTextureFactory::textureFactoryForImage(pixmap.toImage()), readSize, requestSize, autoTransform, UsePluginDefault); + } + } ++ case QQuickImageProvider::ImageResponse: ++ { ++ // Fall through, ImageResponse providers never get here ++ Q_ASSERT(imageType != QQuickImageProvider::ImageResponse && "Sync call to ImageResponse provider"); ++ } + } + + // provider has bad image type, or provider returned null image +@@ -1075,7 +1154,7 @@ static QQuickPixmapData* createPixmapDataSync(QQuickPixmap *declarativePixmap, Q + AutoTransform appliedTransform = autoTransform; + if (readImage(url, &f, &image, &errorString, &readSize, requestSize, appliedTransform)) { + *ok = true; +- return new QQuickPixmapData(declarativePixmap, url, textureFactoryForImage(image), readSize, requestSize, autoTransform, appliedTransform); ++ return new QQuickPixmapData(declarativePixmap, url, QQuickTextureFactory::textureFactoryForImage(image), readSize, requestSize, autoTransform, appliedTransform); + } + errorString = QQuickPixmap::tr("Invalid image data: %1").arg(url.toString()); + +@@ -1204,7 +1283,7 @@ void QQuickPixmap::setImage(const QImage &p) + clear(); + + if (!p.isNull()) +- d = new QQuickPixmapData(this, textureFactoryForImage(p)); ++ d = new QQuickPixmapData(this, QQuickTextureFactory::textureFactoryForImage(p)); + } + + void QQuickPixmap::setPixmap(const QQuickPixmap &other) +diff --git a/tests/auto/quick/qquickimageprovider/tst_qquickimageprovider.cpp b/tests/auto/quick/qquickimageprovider/tst_qquickimageprovider.cpp +index dae46b5..80406be 100644 +--- a/tests/auto/quick/qquickimageprovider/tst_qquickimageprovider.cpp ++++ b/tests/auto/quick/qquickimageprovider/tst_qquickimageprovider.cpp +@@ -37,6 +37,7 @@ + #include + #include + #include ++#include + + Q_DECLARE_METATYPE(QQuickImageProvider*); + +@@ -68,6 +69,8 @@ private slots: + + void threadTest(); + ++ void asyncTextureTest(); ++ + private: + QString newImageFileName() const; + void fillRequestTestsData(const QString &id); +@@ -457,6 +460,101 @@ void tst_qquickimageprovider::threadTest() + } + } + ++class TestImageResponse : public QQuickImageResponse, public QRunnable ++{ ++ public: ++ TestImageResponse(QMutex *lock, QWaitCondition *condition, bool *ok, const QString &id, const QSize &requestedSize) ++ : m_lock(lock), m_condition(condition), m_ok(ok), m_id(id), m_requestedSize(requestedSize), m_texture(0) ++ { ++ setAutoDelete(false); ++ } ++ ++ QQuickTextureFactory *textureFactory() const ++ { ++ return m_texture; ++ } ++ ++ void run() ++ { ++ m_lock->lock(); ++ if (!(*m_ok)) { ++ m_condition->wait(m_lock); ++ } ++ m_lock->unlock(); ++ QImage image(50, 50, QImage::Format_RGB32); ++ image.fill(QColor(m_id).rgb()); ++ if (m_requestedSize.isValid()) ++ image = image.scaled(m_requestedSize); ++ m_texture = QQuickTextureFactory::textureFactoryForImage(image); ++ emit finished(); ++ } ++ ++ QMutex *m_lock; ++ QWaitCondition *m_condition; ++ bool *m_ok; ++ QString m_id; ++ QSize m_requestedSize; ++ QQuickTextureFactory *m_texture; ++}; ++ ++class TestAsyncProvider : public QQuickAsyncImageProvider ++{ ++ public: ++ TestAsyncProvider() : ok(false) ++ { ++ pool.setMaxThreadCount(4); ++ } ++ ++ ~TestAsyncProvider() {} ++ ++ QQuickImageResponse *requestImageResponse(const QString &id, const QSize &requestedSize) ++ { ++ TestImageResponse *response = new TestImageResponse(&lock, &condition, &ok, id, requestedSize); ++ pool.start(response); ++ return response; ++ } ++ ++ QThreadPool pool; ++ QMutex lock; ++ QWaitCondition condition; ++ bool ok; ++}; ++ ++ ++void tst_qquickimageprovider::asyncTextureTest() ++{ ++ QQmlEngine engine; ++ ++ TestAsyncProvider *provider = new TestAsyncProvider; ++ ++ engine.addImageProvider("test_async", provider); ++ QVERIFY(engine.imageProvider("test_async") != 0); ++ ++ QString componentStr = "import QtQuick 2.0\nItem { \n" ++ "Image { source: \"image://test_async/blue\"; }\n" ++ "Image { source: \"image://test_async/red\"; }\n" ++ "Image { source: \"image://test_async/green\"; }\n" ++ "Image { source: \"image://test_async/yellow\"; }\n" ++ " }"; ++ QQmlComponent component(&engine); ++ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); ++ QObject *obj = component.create(); ++ //MUST not deadlock ++ QVERIFY(obj != 0); ++ QList images = obj->findChildren(); ++ QCOMPARE(images.count(), 4); ++ ++ QTRY_VERIFY(provider->pool.activeThreadCount() == 4); ++ foreach (QQuickImage *img, images) { ++ QTRY_VERIFY(img->status() == QQuickImage::Loading); ++ } ++ provider->ok = true; ++ provider->condition.wakeAll(); ++ foreach (QQuickImage *img, images) { ++ QTRY_VERIFY(img->status() == QQuickImage::Ready); ++ } ++} ++ + + QTEST_MAIN(tst_qquickimageprovider) + +-- +2.1.4 + diff -Nru qtdeclarative-opensource-src-5.5.1/debian/patches/disable_failing_tests.patch qtdeclarative-opensource-src-5.5.1/debian/patches/disable_failing_tests.patch --- qtdeclarative-opensource-src-5.5.1/debian/patches/disable_failing_tests.patch 1970-01-01 00:00:00.000000000 +0000 +++ qtdeclarative-opensource-src-5.5.1/debian/patches/disable_failing_tests.patch 2016-04-12 10:44:34.000000000 +0000 @@ -0,0 +1,118 @@ +diff -urN qtdeclarative-opensource-src-5.5.0.old/tests/auto/auto.pro qtdeclarative-opensource-src-5.5.0/tests/auto/auto.pro +--- qtdeclarative-opensource-src-5.5.0.old/tests/auto/auto.pro 2015-06-29 20:12:24.000000000 +0000 ++++ qtdeclarative-opensource-src-5.5.0/tests/auto/auto.pro 2015-07-08 07:34:54.694933159 +0000 +@@ -1,10 +1,10 @@ + TEMPLATE=subdirs + SUBDIRS=\ +- qml \ ++# qml \ + quick \ + particles \ +- qmltest \ +- qmldevtools \ ++# qmltest \ ++# qmldevtools \ + cmake \ + installed_cmake \ + toolsupport +diff -urN qtdeclarative-opensource-src-5.5.0.old/tests/auto/qml/debugger/debugger.pro qtdeclarative-opensource-src-5.5.0/tests/auto/qml/debugger/debugger.pro +--- qtdeclarative-opensource-src-5.5.0.old/tests/auto/qml/debugger/debugger.pro 2015-06-29 20:12:19.000000000 +0000 ++++ qtdeclarative-opensource-src-5.5.0/tests/auto/qml/debugger/debugger.pro 2015-07-08 07:35:10.794933489 +0000 +@@ -1,9 +1,9 @@ + TEMPLATE = subdirs + + PUBLICTESTS += \ +- qqmlenginedebugservice \ ++# qqmlenginedebugservice \ + qqmldebugjs \ +- qqmlinspector \ ++# qqmlinspector \ + qqmlprofilerservice \ + qpacketprotocol \ + qqmlenginedebuginspectorintegrationtest \ +diff -ruN a/tests/auto/quick/quick.pro b/tests/auto/quick/quick.pro +--- a/tests/auto/quick/quick.pro 2013-12-08 22:10:17.000000000 +0500 ++++ b/tests/auto/quick/quick.pro 2014-01-06 18:42:42.257411531 +0500 +@@ -2,10 +2,10 @@ + + PUBLICTESTS += \ + geometry \ +- rendernode \ ++# rendernode \ (QTBUG-35924) + qquickpixmapcache + +-qtHaveModule(widgets): PUBLICTESTS += nodes ++#qtHaveModule(widgets): PUBLICTESTS += nodes + + !cross_compile: PRIVATETESTS += examples + +diff -urN a/tests/auto/quick/qquickpixmapcache/tst_qquickpixmapcache.cpp b/tests/auto/quick/qquickpixmapcache/tst_qquickpixmapcache.cpp +--- a/tests/auto/quick/qquickpixmapcache/tst_qquickpixmapcache.cpp 2015-05-29 20:31:52.000000000 +0000 ++++ b/tests/auto/quick/qquickpixmapcache/tst_qquickpixmapcache.cpp 2015-06-09 08:41:24.157422197 +0000 +@@ -199,30 +199,6 @@ + << testFileUrl("exists2.png") + << (localfile_optimized ? 2 : 0) + << -1; +- +- QTest::newRow("remote") +- << server.url("/exists2.png") +- << server.url("/exists3.png") +- << 0 +- << -1; +- +- QTest::newRow("remoteagain") +- << server.url("/exists2.png") +- << server.url("/exists3.png") +- << 2 +- << -1; +- +- QTest::newRow("remotecopy") +- << server.url("/exists4.png") +- << server.url("/exists4.png") +- << 0 +- << -1; +- +- QTest::newRow("remotecopycancel") +- << server.url("/exists5.png") +- << server.url("/exists5.png") +- << 0 +- << 0; + } + + void tst_qquickpixmapcache::parallel() +@@ -382,6 +358,7 @@ + // QT-3957 + void tst_qquickpixmapcache::networkCrash() + { ++ QSKIP("Skipping failing test."); + TestHTTPServer server; + QVERIFY2(server.listen(), qPrintable(server.errorString())); + QFuture future = QtConcurrent::run(createNetworkServer, &server); +@@ -402,6 +379,7 @@ + // QTBUG-22125 + void tst_qquickpixmapcache::lockingCrash() + { ++ QSKIP("Skipping failing test."); + TestHTTPServer server; + QVERIFY2(server.listen(), qPrintable(server.errorString())); + server.serveDirectory(testFile("http"), TestHTTPServer::Delay); + +diff -urN qtdeclarative-opensource-src-5.5.0.old/tests/auto/quickwidgets/qquickwidget/tst_qquickwidget.cpp qtdeclarative-opensource-src-5.5.0/tests/auto/quickwidgets/qquickwidget/tst_qquickwidget.cpp +--- qtdeclarative-opensource-src-5.5.0.old/tests/auto/quickwidgets/qquickwidget/tst_qquickwidget.cpp 2015-06-29 20:12:25.000000000 +0000 ++++ qtdeclarative-opensource-src-5.5.0/tests/auto/quickwidgets/qquickwidget/tst_qquickwidget.cpp 2015-07-09 10:11:18.808898492 +0000 +@@ -243,6 +243,7 @@ + + void tst_qquickwidget::readback() + { ++ QSKIP("Skipping failing test."); + QWidget window; + + QScopedPointer view(new QQuickWidget); +@@ -262,6 +263,7 @@ + + void tst_qquickwidget::renderingSignals() + { ++ QSKIP("Skipping failing test."); + QQuickWidget widget; + QQuickWindow *window = widget.quickWindow(); + QVERIFY(window); diff -Nru qtdeclarative-opensource-src-5.5.1/debian/patches/Don-t-change-the-currentItem-after-a-viewport-resize.patch qtdeclarative-opensource-src-5.5.1/debian/patches/Don-t-change-the-currentItem-after-a-viewport-resize.patch --- qtdeclarative-opensource-src-5.5.1/debian/patches/Don-t-change-the-currentItem-after-a-viewport-resize.patch 1970-01-01 00:00:00.000000000 +0000 +++ qtdeclarative-opensource-src-5.5.1/debian/patches/Don-t-change-the-currentItem-after-a-viewport-resize.patch 2016-04-12 10:44:34.000000000 +0000 @@ -0,0 +1,140 @@ +From 134d980a7fcf61c5440019bcfb3fdfc39c3f5f3c Mon Sep 17 00:00:00 2001 +From: Alberto Mardegan +Date: Sat, 11 Jul 2015 15:24:53 +0300 +Subject: [PATCH] Don't change the currentItem after a viewport resize + +When highlightRangeMode is set to StrictlyEnforceRange and the view gets +resized, we don't want the currentIndex to change. + +The code touched by this patch was introduced by commit +I08b7e61496a79f71c3b40fafaca985ae90f88503 back in Qt 4.7 times, and +never changed since then. + +Task-number: QTBUG-43555 +Change-Id: Ie67faa6898f13a1f7b0f1c4ae6c29721cb7dfa41 +Reviewed-by: J-P Nurmi +Reviewed-by: Michael Brasser +Reviewed-by: Alan Alpert +--- + src/quick/items/qquickgridview.cpp | 4 +-- + src/quick/items/qquicklistview.cpp | 4 +-- + .../qquicklistview/data/snapOneItemResize.qml | 16 +++++++++++ + .../quick/qquicklistview/tst_qquicklistview.cpp | 32 ++++++++++++++++++++++ + 4 files changed, 52 insertions(+), 4 deletions(-) + create mode 100644 tests/auto/quick/qquicklistview/data/snapOneItemResize.qml + +diff --git a/src/quick/items/qquickgridview.cpp b/src/quick/items/qquickgridview.cpp +index e3f216b..ff928a5 100644 +--- a/src/quick/items/qquickgridview.cpp ++++ b/src/quick/items/qquickgridview.cpp +@@ -922,13 +922,13 @@ void QQuickGridViewPrivate::fixup(AxisData &data, qreal minExtent, qreal maxExte + tempPosition -= bias; + } + FxViewItem *topItem = snapItemAt(tempPosition+highlightRangeStart); +- if (!topItem && strictHighlightRange && currentItem) { ++ if (strictHighlightRange && currentItem) { + // StrictlyEnforceRange always keeps an item in range + updateHighlight(); + topItem = currentItem; + } + FxViewItem *bottomItem = snapItemAt(tempPosition+highlightRangeEnd); +- if (!bottomItem && strictHighlightRange && currentItem) { ++ if (strictHighlightRange && currentItem) { + // StrictlyEnforceRange always keeps an item in range + updateHighlight(); + bottomItem = currentItem; +diff --git a/src/quick/items/qquicklistview.cpp b/src/quick/items/qquicklistview.cpp +index e37aca0..b08a8cf 100644 +--- a/src/quick/items/qquicklistview.cpp ++++ b/src/quick/items/qquicklistview.cpp +@@ -1470,13 +1470,13 @@ void QQuickListViewPrivate::fixup(AxisData &data, qreal minExtent, qreal maxExte + tempPosition -= bias; + } + FxViewItem *topItem = snapItemAt(tempPosition+highlightRangeStart); +- if (!topItem && strictHighlightRange && currentItem) { ++ if (strictHighlightRange && currentItem) { + // StrictlyEnforceRange always keeps an item in range + updateHighlight(); + topItem = currentItem; + } + FxViewItem *bottomItem = snapItemAt(tempPosition+highlightRangeEnd); +- if (!bottomItem && strictHighlightRange && currentItem) { ++ if (strictHighlightRange && currentItem) { + // StrictlyEnforceRange always keeps an item in range + updateHighlight(); + bottomItem = currentItem; +diff --git a/tests/auto/quick/qquicklistview/data/snapOneItemResize.qml b/tests/auto/quick/qquicklistview/data/snapOneItemResize.qml +new file mode 100644 +index 0000000..7ecc833 +--- /dev/null ++++ b/tests/auto/quick/qquicklistview/data/snapOneItemResize.qml +@@ -0,0 +1,16 @@ ++import QtQuick 2.0 ++ ++ListView { ++ id: list ++ currentIndex: 5 ++ snapMode: ListView.SnapOneItem ++ orientation: ListView.Horizontal ++ highlightRangeMode: ListView.StrictlyEnforceRange ++ highlightFollowsCurrentItem: true ++ model: 10 ++ spacing: 10 ++ delegate: Item { ++ width: ListView.view.width ++ height: ListView.view.height ++ } ++} +diff --git a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp +index 6377650..0c0e911 100644 +--- a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp ++++ b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp +@@ -179,6 +179,7 @@ private slots: + void creationContext(); + void snapToItem_data(); + void snapToItem(); ++ void snapOneItemResize_QTBUG_43555(); + void snapOneItem_data(); + void snapOneItem(); + +@@ -5203,6 +5204,37 @@ void tst_QQuickListView::snapToItem() + releaseView(window); + } + ++void tst_QQuickListView::snapOneItemResize_QTBUG_43555() ++{ ++ QQuickView *window = createView(); ++ window->resize(QSize(100, 320)); ++ window->setResizeMode(QQuickView::SizeRootObjectToView); ++ QQuickViewTestUtil::moveMouseAway(window); ++ ++ window->setSource(testFileUrl("snapOneItemResize.qml")); ++ window->show(); ++ QVERIFY(QTest::qWaitForWindowExposed(window)); ++ ++ QQuickListView *listview = qobject_cast(window->rootObject()); ++ QTRY_VERIFY(listview != 0); ++ ++ QSignalSpy currentIndexSpy(listview, SIGNAL(currentIndexChanged())); ++ ++ QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); ++ QTRY_COMPARE(listview->currentIndex(), 5); ++ currentIndexSpy.clear(); ++ ++ window->resize(QSize(400, 320)); ++ ++ QTRY_COMPARE(int(listview->width()), 400); ++ QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); ++ ++ QTRY_COMPARE(listview->currentIndex(), 5); ++ QCOMPARE(currentIndexSpy.count(), 0); ++ ++ delete window; ++} ++ + void tst_QQuickListView::qAbstractItemModel_package_items() + { + items(testFileUrl("listviewtest-package.qml")); +-- +2.5.0 + diff -Nru qtdeclarative-opensource-src-5.5.1/debian/patches/Don-t-make-currentIndex-skip-an-extra-item-on-remova.patch qtdeclarative-opensource-src-5.5.1/debian/patches/Don-t-make-currentIndex-skip-an-extra-item-on-remova.patch --- qtdeclarative-opensource-src-5.5.1/debian/patches/Don-t-make-currentIndex-skip-an-extra-item-on-remova.patch 1970-01-01 00:00:00.000000000 +0000 +++ qtdeclarative-opensource-src-5.5.1/debian/patches/Don-t-make-currentIndex-skip-an-extra-item-on-remova.patch 2016-04-12 10:44:34.000000000 +0000 @@ -0,0 +1,154 @@ +From be6e2e10bd608e76a4c910353ce032aea7e6f2df Mon Sep 17 00:00:00 2001 +From: Alberto Mardegan +Date: Tue, 10 Nov 2015 15:42:23 +0200 +Subject: [PATCH] Don't make currentIndex skip an extra item on removal + +Improve the logic for determining the desired viewport position, which +got partially broken with 134d980a7fcf61c5440019bcfb3fdfc39c3f5f3c. +Let's not alter topItem and bottomItem if their index appears to be +correct. + +Task-number: QTBUG-49330 +Change-Id: Ib1c88de51be28cbb0afb1741440adb03ae8ebd87 +--- + src/quick/items/qquickgridview.cpp | 4 +-- + src/quick/items/qquicklistview.cpp | 4 +-- + .../snapOneItemCurrentIndexRemoveAnimation.qml | 39 ++++++++++++++++++++++ + .../quick/qquicklistview/tst_qquicklistview.cpp | 27 +++++++++++++++ + 4 files changed, 70 insertions(+), 4 deletions(-) + create mode 100644 tests/auto/quick/qquicklistview/data/snapOneItemCurrentIndexRemoveAnimation.qml + +diff --git a/src/quick/items/qquickgridview.cpp b/src/quick/items/qquickgridview.cpp +index 3ac9c6e..65d7362 100644 +--- a/src/quick/items/qquickgridview.cpp ++++ b/src/quick/items/qquickgridview.cpp +@@ -922,13 +922,13 @@ void QQuickGridViewPrivate::fixup(AxisData &data, qreal minExtent, qreal maxExte + tempPosition -= bias; + } + FxViewItem *topItem = snapItemAt(tempPosition+highlightRangeStart); +- if (strictHighlightRange && currentItem) { ++ if (strictHighlightRange && currentItem && (!topItem || topItem->index != currentIndex)) { + // StrictlyEnforceRange always keeps an item in range + updateHighlight(); + topItem = currentItem; + } + FxViewItem *bottomItem = snapItemAt(tempPosition+highlightRangeEnd); +- if (strictHighlightRange && currentItem) { ++ if (strictHighlightRange && currentItem && (!bottomItem || bottomItem->index != currentIndex)) { + // StrictlyEnforceRange always keeps an item in range + updateHighlight(); + bottomItem = currentItem; +diff --git a/src/quick/items/qquicklistview.cpp b/src/quick/items/qquicklistview.cpp +index 2958c0a..0211e9f 100644 +--- a/src/quick/items/qquicklistview.cpp ++++ b/src/quick/items/qquicklistview.cpp +@@ -1479,13 +1479,13 @@ void QQuickListViewPrivate::fixup(AxisData &data, qreal minExtent, qreal maxExte + tempPosition -= bias; + } + FxViewItem *topItem = snapItemAt(tempPosition+highlightRangeStart); +- if (strictHighlightRange && currentItem) { ++ if (strictHighlightRange && currentItem && (!topItem || topItem->index != currentIndex)) { + // StrictlyEnforceRange always keeps an item in range + updateHighlight(); + topItem = currentItem; + } + FxViewItem *bottomItem = snapItemAt(tempPosition+highlightRangeEnd); +- if (strictHighlightRange && currentItem) { ++ if (strictHighlightRange && currentItem && (!bottomItem || bottomItem->index != currentIndex)) { + // StrictlyEnforceRange always keeps an item in range + updateHighlight(); + bottomItem = currentItem; +diff --git a/tests/auto/quick/qquicklistview/data/snapOneItemCurrentIndexRemoveAnimation.qml b/tests/auto/quick/qquicklistview/data/snapOneItemCurrentIndexRemoveAnimation.qml +new file mode 100644 +index 0000000..215467f +--- /dev/null ++++ b/tests/auto/quick/qquicklistview/data/snapOneItemCurrentIndexRemoveAnimation.qml +@@ -0,0 +1,39 @@ ++import QtQuick 2.4 ++ ++ListView { ++ id: root ++ height: 400 ++ width: height ++ model: ListModel { ++ id: lmodel ++ ListElement { dummy: 0 } ++ ListElement { dummy: 0 } ++ ListElement { dummy: 0 } ++ ListElement { dummy: 0 } ++ ListElement { dummy: 0 } ++ ListElement { dummy: 0 } ++ } ++ ++ function removeItemZero() ++ { ++ lmodel.remove(0); ++ } ++ ++ orientation: ListView.Horizontal ++ snapMode: ListView.SnapOneItem ++ highlightRangeMode: ListView.StrictlyEnforceRange ++ ++ property int transitionsRun: 0 ++ ++ removeDisplaced: Transition { ++ id: transition ++ PropertyAnimation { property: "x"; duration: 500 } ++ onRunningChanged: if (!running) transitionsRun++; ++ } ++ ++ delegate: Text { ++ text: index + " of " + lmodel.count ++ width: root.width ++ height: root.height ++ } ++} +\ No newline at end of file +diff --git a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp +index e02c053..a5de266 100644 +--- a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp ++++ b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp +@@ -182,6 +182,7 @@ private slots: + void snapOneItemResize_QTBUG_43555(); + void snapOneItem_data(); + void snapOneItem(); ++ void snapOneItemCurrentIndexRemoveAnimation(); + + void QTBUG_9791(); + void QTBUG_11105(); +@@ -5587,6 +5588,32 @@ void tst_QQuickListView::snapOneItem() + releaseView(window); + } + ++void tst_QQuickListView::snapOneItemCurrentIndexRemoveAnimation() ++{ ++ QQuickView *window = createView(); ++ ++ window->setSource(testFileUrl("snapOneItemCurrentIndexRemoveAnimation.qml")); ++ window->show(); ++ QVERIFY(QTest::qWaitForWindowExposed(window)); ++ ++ QQuickListView *listview = qobject_cast(window->rootObject()); ++ QTRY_VERIFY(listview != 0); ++ ++ QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); ++ QTRY_COMPARE(listview->currentIndex(), 0); ++ QSignalSpy currentIndexSpy(listview, SIGNAL(currentIndexChanged())); ++ ++ QMetaObject::invokeMethod(window->rootObject(), "removeItemZero"); ++ QTRY_COMPARE(listview->property("transitionsRun").toInt(), 1); ++ ++ QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); ++ ++ QCOMPARE(listview->currentIndex(), 0); ++ QCOMPARE(currentIndexSpy.count(), 0); ++ ++ delete window; ++} ++ + void tst_QQuickListView::attachedProperties_QTBUG_32836() + { + QQuickView *window = createView(); +-- +2.6.2 + diff -Nru qtdeclarative-opensource-src-5.5.1/debian/patches/fix_binary_location_for_tests.patch qtdeclarative-opensource-src-5.5.1/debian/patches/fix_binary_location_for_tests.patch --- qtdeclarative-opensource-src-5.5.1/debian/patches/fix_binary_location_for_tests.patch 1970-01-01 00:00:00.000000000 +0000 +++ qtdeclarative-opensource-src-5.5.1/debian/patches/fix_binary_location_for_tests.patch 2016-04-12 10:44:34.000000000 +0000 @@ -0,0 +1,72 @@ +diff -ruN a/tests/auto/qml/qmlmin/tst_qmlmin.cpp b/tests/auto/qml/qmlmin/tst_qmlmin.cpp +--- a/tests/auto/qml/qmlmin/tst_qmlmin.cpp 2013-11-21 01:16:04.000000000 +0500 ++++ b/tests/auto/qml/qmlmin/tst_qmlmin.cpp 2013-12-21 14:55:25.614708078 +0500 +@@ -75,7 +75,7 @@ + + void tst_qmlmin::initTestCase() + { +- qmlminPath = QLibraryInfo::location(QLibraryInfo::BinariesPath) + QLatin1String("/qmlmin"); ++ qmlminPath = QLatin1String("../../../../bin") + QLatin1String("/qmlmin"); + #ifdef Q_OS_WIN + qmlminPath += QLatin1String(".exe"); + #endif +diff -ruN a/tests/auto/qml/qmlplugindump/tst_qmlplugindump.cpp b/tests/auto/qml/qmlplugindump/tst_qmlplugindump.cpp +--- a/tests/auto/qml/qmlplugindump/tst_qmlplugindump.cpp 2013-11-21 01:16:05.000000000 +0500 ++++ b/tests/auto/qml/qmlplugindump/tst_qmlplugindump.cpp 2013-12-21 14:55:28.574708157 +0500 +@@ -66,7 +66,7 @@ + + void tst_qmlplugindump::initTestCase() + { +- qmlplugindumpPath = QLibraryInfo::location(QLibraryInfo::BinariesPath); ++ qmlplugindumpPath = QLatin1String("../../../../bin"); + + #if defined(Q_OS_WIN) + qmlplugindumpPath += QLatin1String("/qmlplugindump.exe"); +diff -ruN a/tests/auto/qml/debugger/qqmldebugjs/tst_qqmldebugjs.cpp b/tests/auto/qml/debugger/qqmldebugjs/tst_qqmldebugjs.cpp +--- a/tests/auto/qml/debugger/qqmldebugjs/tst_qqmldebugjs.cpp 2013-12-08 22:10:16.000000000 +0500 ++++ b/tests/auto/qml/debugger/qqmldebugjs/tst_qqmldebugjs.cpp 2014-01-03 12:20:08.520795476 +0500 +@@ -833,7 +833,7 @@ + bool tst_QQmlDebugJS::init(const QString &qmlFile, bool blockMode) + { + connection = new QQmlDebugConnection(); +- process = new QQmlDebugProcess(QLibraryInfo::location(QLibraryInfo::BinariesPath) + "/qmlscene", this); ++ process = new QQmlDebugProcess(QLatin1String("../../../../../bin") + "/qmlscene", this); + client = new QJSDebugClient(connection); + + if (blockMode) +diff -ruN a/tests/auto/qml/debugger/qqmlenginedebuginspectorintegrationtest/tst_qqmlenginedebuginspectorintegration.cpp b/tests/auto/qml/debugger/qqmlenginedebuginspectorintegrationtest/tst_qqmlenginedebuginspectorintegration.cpp +--- a/tests/auto/qml/debugger/qqmlenginedebuginspectorintegrationtest/tst_qqmlenginedebuginspectorintegration.cpp 2013-12-08 22:10:16.000000000 +0500 ++++ b/tests/auto/qml/debugger/qqmlenginedebuginspectorintegrationtest/tst_qqmlenginedebuginspectorintegration.cpp 2014-01-03 12:21:06.904797040 +0500 +@@ -108,7 +108,7 @@ + const QString argument = "-qmljsdebugger=port:" STR_PORT_FROM "," STR_PORT_TO ",block"; + + // ### Still using qmlscene because of QTBUG-33376 +- m_process = new QQmlDebugProcess(QLibraryInfo::location(QLibraryInfo::BinariesPath) ++ m_process = new QQmlDebugProcess(QLatin1String("../../../../../bin") + + "/qmlscene", this); + m_process->start(QStringList() << argument << testFile("qtquick2.qml")); + QVERIFY2(m_process->waitForSessionStart(), +diff -ruN a/tests/auto/qml/debugger/qqmlinspector/tst_qqmlinspector.cpp b/tests/auto/qml/debugger/qqmlinspector/tst_qqmlinspector.cpp +--- a/tests/auto/qml/debugger/qqmlinspector/tst_qqmlinspector.cpp 2013-12-08 22:10:16.000000000 +0500 ++++ b/tests/auto/qml/debugger/qqmlinspector/tst_qqmlinspector.cpp 2014-01-03 12:23:24.248800718 +0500 +@@ -90,7 +90,7 @@ + const QString argument = "-qmljsdebugger=port:" STR_PORT_FROM "," STR_PORT_TO ",block"; + + // ### This should be using qml instead of qmlscene, but can't because of QTBUG-33376 (same as the XFAIL testcase) +- m_process = new QQmlDebugProcess(QLibraryInfo::location(QLibraryInfo::BinariesPath) + "/qmlscene", this); ++ m_process = new QQmlDebugProcess(QLatin1String("../../../../../bin") + "/qmlscene", this); + m_process->start(QStringList() << argument << testFile("qtquick2.qml")); + QVERIFY2(m_process->waitForSessionStart(), + "Could not launch application, or did not get 'Waiting for connection'."); +diff -ruN a/tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp b/tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp +--- a/tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp 2013-12-08 22:10:16.000000000 +0500 ++++ b/tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp 2014-01-03 12:22:18.392798954 +0500 +@@ -298,7 +298,7 @@ + void tst_QQmlProfilerService::connect(bool block, const QString &testFile) + { + // ### Still using qmlscene due to QTBUG-33377 +- const QString executable = QLibraryInfo::location(QLibraryInfo::BinariesPath) + "/qmlscene"; ++ const QString executable = QLatin1String("../../../../../bin") + "/qmlscene"; + QStringList arguments; + if (block) + arguments << QString("-qmljsdebugger=port:" STR_PORT_FROM "," STR_PORT_TO ",block"); diff -Nru qtdeclarative-opensource-src-5.5.1/debian/patches/Fix-crash-in-hasAtlasTexture.patch qtdeclarative-opensource-src-5.5.1/debian/patches/Fix-crash-in-hasAtlasTexture.patch --- qtdeclarative-opensource-src-5.5.1/debian/patches/Fix-crash-in-hasAtlasTexture.patch 1970-01-01 00:00:00.000000000 +0000 +++ qtdeclarative-opensource-src-5.5.1/debian/patches/Fix-crash-in-hasAtlasTexture.patch 2016-04-12 10:44:34.000000000 +0000 @@ -0,0 +1,47 @@ +From cef27bf90cbb8d4e6f36f6b77fa5efb361e01ad2 Mon Sep 17 00:00:00 2001 +From: Albert Astals Cid +Date: Tue, 29 Mar 2016 14:40:23 +0200 +Subject: [PATCH] Fix crash in hasAtlasTexture + +Check for the QSGTextureProvider not being 0 before asking for its texture, +we are doing the same in the loop of QQuickShaderEffectMaterial::compare so +it was forgotten to do it here. + +Valgrind trace of the crash i get without it +==26317== Invalid read of size 8 +==26317== at 0x652B73A: hasAtlasTexture(QVector const&) (qquickshadereffectnode.cpp:49) +==26317== by 0x652BABC: QQuickShaderEffectMaterial::compare(QSGMaterial const*) const (qquickshadereffectnode.cpp:396) +==26317== by 0x63D1BF6: QSGBatchRenderer::Renderer::prepareOpaqueBatches() (qsgbatchrenderer.cpp:1525) +==26317== by 0x63DE7A7: QSGBatchRenderer::Renderer::render() (qsgbatchrenderer.cpp:2611) +==26317== by 0x63E9D3E: QSGRenderer::renderScene(QSGBindable const&) (qsgrenderer.cpp:208) +==26317== by 0x63EA58A: QSGRenderer::renderScene(unsigned int) (qsgrenderer.cpp:168) +==26317== by 0x63FAA7D: QSGRenderContext::renderNextFrame(QSGRenderer*, unsigned int) (qsgcontext.cpp:558) +==26317== by 0x644540A: QQuickWindowPrivate::renderSceneGraph(QSize const&) (qquickwindow.cpp:383) +==26317== by 0x641541A: QSGGuiThreadRenderLoop::renderWindow(QQuickWindow*) (qsgrenderloop.cpp:378) +==26317== by 0x6416520: QSGGuiThreadRenderLoop::event(QEvent*) (qsgrenderloop.cpp:474) +==26317== by 0x605F488: QCoreApplication::notify(QObject*, QEvent*) (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.5.1) +==26317== by 0x605F5BA: QCoreApplication::notifyInternal(QObject*, QEvent*) (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.5.1) +==26317== Address 0x0 is not stack'd, malloc'd or (recently) free'd + +Change-Id: I3b07450438d98910fbbff9f8b7a3d9d851ed4e5d +Reviewed-by: Michael Brasser +--- + src/quick/items/qquickshadereffectnode.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/quick/items/qquickshadereffectnode.cpp b/src/quick/items/qquickshadereffectnode.cpp +index 954aa6c..95537fd 100644 +--- a/src/quick/items/qquickshadereffectnode.cpp ++++ b/src/quick/items/qquickshadereffectnode.cpp +@@ -46,7 +46,7 @@ static bool hasAtlasTexture(const QVector &textureProvider + { + for (int i = 0; i < textureProviders.size(); ++i) { + QSGTextureProvider *t = textureProviders.at(i); +- if (t->texture() && t->texture()->isAtlasTexture()) ++ if (t && t->texture() && t->texture()->isAtlasTexture()) + return true; + } + return false; +-- +2.7.4 + diff -Nru qtdeclarative-opensource-src-5.5.1/debian/patches/Fix-memory-leak-when-using-async-image-providers.patch qtdeclarative-opensource-src-5.5.1/debian/patches/Fix-memory-leak-when-using-async-image-providers.patch --- qtdeclarative-opensource-src-5.5.1/debian/patches/Fix-memory-leak-when-using-async-image-providers.patch 1970-01-01 00:00:00.000000000 +0000 +++ qtdeclarative-opensource-src-5.5.1/debian/patches/Fix-memory-leak-when-using-async-image-providers.patch 2016-04-12 10:44:34.000000000 +0000 @@ -0,0 +1,26 @@ +From 653f4d6ce5851011e52c37b01ef81c7fbc16c26c Mon Sep 17 00:00:00 2001 +From: Albert Astals Cid +Date: Fri, 14 Aug 2015 14:49:54 +0200 +Subject: [PATCH] Fix memory leak when using async image providers + +Change-Id: I08392ab0a3edb1ac162110ebc349ad457800c788 +Reviewed-by: Robin Burchell +--- + src/quick/util/qquickpixmapcache.cpp | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/quick/util/qquickpixmapcache.cpp b/src/quick/util/qquickpixmapcache.cpp +index 6f6e91e..a77bfd1 100644 +--- a/src/quick/util/qquickpixmapcache.cpp ++++ b/src/quick/util/qquickpixmapcache.cpp +@@ -579,6 +579,7 @@ void QQuickPixmapReader::processJobs() + if (asyncResponse) { + asyncResponses.remove(asyncResponse); + asyncResponse->cancel(); ++ asyncResponse->deleteLater(); + } + } + PIXMAP_PROFILE(pixmapStateChanged(job->url)); +-- +2.5.0 + diff -Nru qtdeclarative-opensource-src-5.5.1/debian/patches/Flickable-avoid-perturbing-the-timeline-further-whil.patch qtdeclarative-opensource-src-5.5.1/debian/patches/Flickable-avoid-perturbing-the-timeline-further-whil.patch --- qtdeclarative-opensource-src-5.5.1/debian/patches/Flickable-avoid-perturbing-the-timeline-further-whil.patch 1970-01-01 00:00:00.000000000 +0000 +++ qtdeclarative-opensource-src-5.5.1/debian/patches/Flickable-avoid-perturbing-the-timeline-further-whil.patch 2016-04-12 10:44:34.000000000 +0000 @@ -0,0 +1,50 @@ +From 8f339861d48a6d624516780442e191b55209a053 Mon Sep 17 00:00:00 2001 +From: Shawn Rutledge +Date: Wed, 2 Dec 2015 15:26:50 +0100 +Subject: [PATCH] Flickable: avoid perturbing the timeline further while in + overshoot + +The bug was that when using the mouse wheel, a single "scroll down" +wheel event followed by a rapid succession of "scroll up" events +would cause extreme overshoot. Experimentally determined that when +this happens, the calls to timeline.accel() in +QQuickFlickablePrivate::flick() were occurring after the call to +accel in QQuickFlickablePrivate::viewportAxisMoved(). But nearby, +data.inOvershoot is set to true, so that can be used to avoid calling +accel() additional times in flick(). So basically, this patch avoids +doing any more acceleration in response to further wheel events after +the momentum from previous events has already taken the content +beyond bounds. + +Task-number: QTBUG-21328 +Change-Id: I3ab5510a288a080f6b526407b6a2293c44a2498a +Reviewed-by: J-P Nurmi +Reviewed-by: Robin Burchell +--- + src/quick/items/qquickflickable.cpp | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +diff --git a/src/quick/items/qquickflickable.cpp b/src/quick/items/qquickflickable.cpp +index 9d6c51f..092d4af 100644 +--- a/src/quick/items/qquickflickable.cpp ++++ b/src/quick/items/qquickflickable.cpp +@@ -344,10 +344,12 @@ bool QQuickFlickablePrivate::flick(AxisData &data, qreal minExtent, qreal maxExt + accel = v2 / (2.0f * qAbs(dist)); + + resetTimeline(data); +- if (boundsBehavior & QQuickFlickable::OvershootBounds) +- timeline.accel(data.move, v, accel); +- else +- timeline.accel(data.move, v, accel, maxDistance); ++ if (!data.inOvershoot) { ++ if (boundsBehavior & QQuickFlickable::OvershootBounds) ++ timeline.accel(data.move, v, accel); ++ else ++ timeline.accel(data.move, v, accel, maxDistance); ++ } + timeline.callback(QQuickTimeLineCallback(&data.move, fixupCallback, this)); + + if (&data == &hData) +-- +2.6.4 + diff -Nru qtdeclarative-opensource-src-5.5.1/debian/patches/Image-fix-crash-when-switching-between-multiple-scre.patch qtdeclarative-opensource-src-5.5.1/debian/patches/Image-fix-crash-when-switching-between-multiple-scre.patch --- qtdeclarative-opensource-src-5.5.1/debian/patches/Image-fix-crash-when-switching-between-multiple-scre.patch 1970-01-01 00:00:00.000000000 +0000 +++ qtdeclarative-opensource-src-5.5.1/debian/patches/Image-fix-crash-when-switching-between-multiple-scre.patch 2016-04-12 10:44:34.000000000 +0000 @@ -0,0 +1,50 @@ +From 5f23d4eb103baa21225adb4c3dd666dbefef6515 Mon Sep 17 00:00:00 2001 +From: Mitch Curtis +Date: Thu, 24 Sep 2015 10:05:37 +0200 +Subject: [PATCH] Image: fix crash when switching between multiple screens + +When moving a Qt Quick application containing Image delegates in a view +(e.g. ListView, GridView, etc.) between multiple screens, it's possible +that the amount of visible delegates changes due to potential +differences in the screens' sizes. + +For example, moving an application using the Window + left/right arrow +keys on Windows causes the window to snap to the side of the screen. +If one screen is smaller than the other, moving the application back +and forth in this manner will cause some delegates to be destroyed, as +they are no longer visible in the smaller screen. + +However, between receiving the Component.destruction signal in QML and +being actually destroyed in C++, the Images may try to reload their +pixmaps (when the cache property is set to false, for example). Since +the views had (correctly) already hidden those delegates and hence +they had no associated QQmlEngine, the load() function would crash +because of the assumption that there was a valid engine. + +This patch checks that there is a valid QQmlEngine with which to load +pixmaps before doing so. + +Change-Id: I8a3f0ec5220fddfd79758985c1eb2b55b0baae47 +Task-number: QTBUG-45991 +Reviewed-by: Gunnar Sletta +Reviewed-by: Simon Hausmann +--- + src/quick/items/qquickimagebase.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/quick/items/qquickimagebase.cpp b/src/quick/items/qquickimagebase.cpp +index 223cb8f..7232524 100644 +--- a/src/quick/items/qquickimagebase.cpp ++++ b/src/quick/items/qquickimagebase.cpp +@@ -308,7 +308,7 @@ void QQuickImageBase::itemChange(ItemChange change, const ItemChangeData &value) + void QQuickImageBase::handleScreenChanged(QScreen* screen) + { + // Screen DPI might have changed, reload images on screen change. +- if (screen && isComponentComplete()) ++ if (qmlEngine(this) && screen && isComponentComplete()) + load(); + } + +-- +2.6.2 + diff -Nru qtdeclarative-opensource-src-5.5.1/debian/patches/Make-sure-we-stop-animators-if-they-are-yet-to-be-st.patch qtdeclarative-opensource-src-5.5.1/debian/patches/Make-sure-we-stop-animators-if-they-are-yet-to-be-st.patch --- qtdeclarative-opensource-src-5.5.1/debian/patches/Make-sure-we-stop-animators-if-they-are-yet-to-be-st.patch 1970-01-01 00:00:00.000000000 +0000 +++ qtdeclarative-opensource-src-5.5.1/debian/patches/Make-sure-we-stop-animators-if-they-are-yet-to-be-st.patch 2016-04-12 10:44:34.000000000 +0000 @@ -0,0 +1,31 @@ +From 327ddb7488805241fb48c20ec8628c630224f4ce Mon Sep 17 00:00:00 2001 +From: Gunnar Sletta +Date: Wed, 8 Apr 2015 09:27:44 +0200 +Subject: [PATCH] Make sure we stop animators if they are yet to be started. + +Change-Id: I311e66c64a79581739f80e124fd58da2aaded549 +Task-number: QTBUG-45220 +Reviewed-by: Michael Brasser +--- + src/quick/util/qquickanimatorjob.cpp | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +diff --git a/src/quick/util/qquickanimatorjob.cpp b/src/quick/util/qquickanimatorjob.cpp +index 8b617e5..016f41d 100644 +--- a/src/quick/util/qquickanimatorjob.cpp ++++ b/src/quick/util/qquickanimatorjob.cpp +@@ -126,9 +126,8 @@ void QQuickAnimatorProxyJob::updateState(QAbstractAnimationJob::State newState, + m_controller->startJob(this, m_job); + } else if (newState == Stopped) { + syncBackCurrentValues(); +- if (m_internalState == State_Starting) +- m_internalState = State_Stopped; +- else if (m_controller) { ++ m_internalState = State_Stopped; ++ if (m_controller) { + m_controller->stopJob(this, m_job); + } + } +-- +2.1.4 + diff -Nru qtdeclarative-opensource-src-5.5.1/debian/patches/MultiPointTouchArea-Fixed-released-duplication-on-mo.patch qtdeclarative-opensource-src-5.5.1/debian/patches/MultiPointTouchArea-Fixed-released-duplication-on-mo.patch --- qtdeclarative-opensource-src-5.5.1/debian/patches/MultiPointTouchArea-Fixed-released-duplication-on-mo.patch 1970-01-01 00:00:00.000000000 +0000 +++ qtdeclarative-opensource-src-5.5.1/debian/patches/MultiPointTouchArea-Fixed-released-duplication-on-mo.patch 2016-04-12 10:44:34.000000000 +0000 @@ -0,0 +1,65 @@ +From 1e47ced7464dff465ece78c99b6ab9706d05fcdd Mon Sep 17 00:00:00 2001 +From: Alexandr Akulich +Date: Fri, 16 Oct 2015 16:27:46 +0600 +Subject: [PATCH] MultiPointTouchArea: Fixed released() duplication on mouse + release. + +MousePress and MouseRelease event handlers now better integrated into +generic touch processing methods. + +We used to manually add a touch point for mouse press event and +prevent updateTouchData() from pressed() emission, but mouseRelease +handler used to cause the signal emission in updateTouchData() and then +emit the signal on its own. + +The code reworked to always emit pressed() and released() signals from +the single place in updateTouchData(). + +[ChangeLog][QtQuick][MultiPointTouchArea] Fixed released() signal +duplication on mouseReleaseEvent. + +Task-number: 44370 +Change-Id: I2d88931ba56d6edf778213c61e9467c2b6abf0e7 +--- + src/quick/items/qquickmultipointtoucharea.cpp | 8 ++------ + 1 file changed, 2 insertions(+), 6 deletions(-) + +diff --git a/src/quick/items/qquickmultipointtoucharea.cpp b/src/quick/items/qquickmultipointtoucharea.cpp +index 13ace44..9e658cc 100644 +--- a/src/quick/items/qquickmultipointtoucharea.cpp ++++ b/src/quick/items/qquickmultipointtoucharea.cpp +@@ -502,8 +502,9 @@ void QQuickMultiPointTouchArea::updateTouchData(QEvent *event) + else if (event->type() == QEvent::MouseButtonRelease) + _mouseQpaTouchPoint.setState(Qt::TouchPointReleased); + else { // QEvent::MouseButtonPress ++ addTouchPoint(me); ++ started = true; + _mouseQpaTouchPoint.setState(Qt::TouchPointPressed); +- _pressedTouchPoints.append(_mouseTouchPoint); + } + touchPoints << _mouseQpaTouchPoint; + isMouseEvent = true; +@@ -729,9 +730,7 @@ void QQuickMultiPointTouchArea::mousePressEvent(QMouseEvent *event) + return; + + if (_touchPoints.count() >= _minimumTouchPoints - 1 && _touchPoints.count() < _maximumTouchPoints) { +- addTouchPoint(event); + updateTouchData(event); +- emit pressed(_pressedTouchPoints); + } + } + +@@ -762,10 +761,7 @@ void QQuickMultiPointTouchArea::mouseReleaseEvent(QMouseEvent *event) + + if (_mouseTouchPoint) { + updateTouchData(event); +- _mouseTouchPoint->setPressed(false); + _mouseTouchPoint->setInUse(false); +- _releasedTouchPoints.append(_mouseTouchPoint); +- emit released(_releasedTouchPoints); + _releasedTouchPoints.removeAll(_mouseTouchPoint); + _mouseTouchPoint = Q_NULLPTR; + } +-- +2.6.2 + diff -Nru qtdeclarative-opensource-src-5.5.1/debian/patches/QML-Compilation-unit-caching-and-JIT-changes.patch qtdeclarative-opensource-src-5.5.1/debian/patches/QML-Compilation-unit-caching-and-JIT-changes.patch --- qtdeclarative-opensource-src-5.5.1/debian/patches/QML-Compilation-unit-caching-and-JIT-changes.patch 1970-01-01 00:00:00.000000000 +0000 +++ qtdeclarative-opensource-src-5.5.1/debian/patches/QML-Compilation-unit-caching-and-JIT-changes.patch 2016-04-12 10:44:34.000000000 +0000 @@ -0,0 +1,1180 @@ +Description: Add optional JIT unit cache + This patch adds a JIT unit cache to QML that speeds up application launches + after the first launch has been done. It is activated only when environment + variable QV4_ENABLE_JIT_CACHE is set. + . + It has not yet been sent upstream for discussion, but that's being planned. +Author: Ricardo Mendoza +Origin: Canonical +Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/qtdeclarative-opensource-src/+bug/1418060 +Forwarded: No +Last-Update: 2015-02-25 + +Index: qtdeclarative-opensource-src-5.4.0/src/3rdparty/masm/assembler/ARMv7Assembler.h +=================================================================== +--- qtdeclarative-opensource-src-5.4.0.orig/src/3rdparty/masm/assembler/ARMv7Assembler.h ++++ qtdeclarative-opensource-src-5.4.0/src/3rdparty/masm/assembler/ARMv7Assembler.h +@@ -445,6 +445,12 @@ public: + ConditionInvalid + } Condition; + ++ // Code inherited from the QMLC project ++ void appendData(char *data, int len) ++ { ++ return m_formatter.appendData(data, len); ++ } ++ + #define JUMP_ENUM_WITH_SIZE(index, value) (((value) << 3) | (index)) + #define JUMP_ENUM_SIZE(jump) ((jump) >> 3) + enum JumpType { JumpFixed = JUMP_ENUM_WITH_SIZE(0, 0), +@@ -2782,6 +2788,7 @@ private: + AssemblerLabel label() const { return m_buffer.label(); } + bool isAligned(int alignment) const { return m_buffer.isAligned(alignment); } + void* data() const { return m_buffer.data(); } ++ void appendData(char *data, int len) { return m_buffer.appendData(data, len); } + + unsigned debugOffset() { return m_buffer.debugOffset(); } + +Index: qtdeclarative-opensource-src-5.4.0/src/3rdparty/masm/assembler/AbstractMacroAssembler.h +=================================================================== +--- qtdeclarative-opensource-src-5.4.0.orig/src/3rdparty/masm/assembler/AbstractMacroAssembler.h ++++ qtdeclarative-opensource-src-5.4.0/src/3rdparty/masm/assembler/AbstractMacroAssembler.h +@@ -486,6 +486,11 @@ public: + return Call(jump.m_label, Linkable); + } + ++ unsigned int getFlags(void) ++ { ++ return m_flags; ++ } ++ + AssemblerLabel m_label; + private: + Flags m_flags; +@@ -746,6 +751,12 @@ public: + { + AssemblerType::cacheFlush(code, size); + } ++ ++ void appendData(char *data, int len) ++ { ++ return m_assembler.appendData(data, len); ++ } ++ + protected: + AbstractMacroAssembler() + : m_randomSource(cryptographicallyRandomNumber()) +Index: qtdeclarative-opensource-src-5.4.0/src/3rdparty/masm/assembler/AssemblerBuffer.h +=================================================================== +--- qtdeclarative-opensource-src-5.4.0.orig/src/3rdparty/masm/assembler/AssemblerBuffer.h ++++ qtdeclarative-opensource-src-5.4.0/src/3rdparty/masm/assembler/AssemblerBuffer.h +@@ -86,6 +86,14 @@ namespace JSC { + grow(); + } + ++ void appendData(char *data, int len) ++ { ++ if (!isAvailable(len)) ++ grow(len); ++ memcpy(m_buffer + m_index, data, len); ++ m_index += len; ++ } ++ + bool isAligned(int alignment) const + { + return !(m_index & (alignment - 1)); +Index: qtdeclarative-opensource-src-5.4.0/src/3rdparty/masm/assembler/LinkBuffer.h +=================================================================== +--- qtdeclarative-opensource-src-5.4.0.orig/src/3rdparty/masm/assembler/LinkBuffer.h ++++ qtdeclarative-opensource-src-5.4.0/src/3rdparty/masm/assembler/LinkBuffer.h +@@ -109,11 +109,13 @@ public: + + // These methods are used to link or set values at code generation time. + +- void link(Call call, FunctionPtr function) ++ unsigned int link(Call call, FunctionPtr function) + { + ASSERT(call.isFlagSet(Call::Linkable)); + call.m_label = applyOffset(call.m_label); + MacroAssembler::linkCall(code(), call, function); ++ ++ return call.m_label.m_offset; + } + + void link(Jump jump, CodeLocationLabel label) +Index: qtdeclarative-opensource-src-5.4.0/src/3rdparty/masm/assembler/X86Assembler.h +=================================================================== +--- qtdeclarative-opensource-src-5.4.0.orig/src/3rdparty/masm/assembler/X86Assembler.h ++++ qtdeclarative-opensource-src-5.4.0/src/3rdparty/masm/assembler/X86Assembler.h +@@ -101,6 +101,11 @@ public: + ConditionNC = ConditionAE, + } Condition; + ++ void appendData(char *data, int len) ++ { ++ return m_formatter.appendData(data, len); ++ } ++ + private: + typedef enum { + OP_ADD_EvGv = 0x01, +@@ -2380,6 +2385,7 @@ private: + AssemblerLabel label() const { return m_buffer.label(); } + bool isAligned(int alignment) const { return m_buffer.isAligned(alignment); } + void* data() const { return m_buffer.data(); } ++ void appendData(char *data, int len) { return m_buffer.appendData(data, len); } + + PassRefPtr executableCopy(JSGlobalData& globalData, void* ownerUID, JITCompilationEffort effort) + { +Index: qtdeclarative-opensource-src-5.4.0/src/qml/compiler/compiler.pri +=================================================================== +--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/compiler/compiler.pri ++++ qtdeclarative-opensource-src-5.4.0/src/qml/compiler/compiler.pri +@@ -28,10 +28,10 @@ HEADERS += \ + $$PWD/qv4isel_moth_p.h \ + $$PWD/qv4instr_moth_p.h + +- + SOURCES += \ + $$PWD/qqmltypecompiler.cpp \ + $$PWD/qv4instr_moth.cpp \ + $$PWD/qv4isel_moth.cpp + ++DEFINES += V4_UNIT_CACHE + } +Index: qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qqmlirbuilder.cpp +=================================================================== +--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/compiler/qqmlirbuilder.cpp ++++ qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qqmlirbuilder.cpp +@@ -1502,7 +1502,12 @@ bool IRBuilder::isStatementNodeScript(QQ + QV4::CompiledData::Unit *QmlUnitGenerator::generate(Document &output) + { + QQmlRefPointer compilationUnit = output.javaScriptCompilationUnit; +- QV4::CompiledData::Unit *jsUnit = compilationUnit->createUnitData(&output); ++ QV4::CompiledData::Unit *jsUnit; ++ if (!compilationUnit->data) ++ jsUnit = compilationUnit->createUnitData(&output); ++ else ++ jsUnit = compilationUnit->data; ++ + const uint unitSize = jsUnit->unitSize; + + const int importSize = sizeof(QV4::CompiledData::Import) * output.imports.count(); +@@ -1527,7 +1532,6 @@ QV4::CompiledData::Unit *QmlUnitGenerato + memset(data + unitSize, 0, totalSize - unitSize); + if (jsUnit != compilationUnit->data) + free(jsUnit); +- jsUnit = 0; + + QV4::CompiledData::Unit *qmlUnit = reinterpret_cast(data); + qmlUnit->unitSize = totalSize; +@@ -1538,8 +1542,22 @@ QV4::CompiledData::Unit *QmlUnitGenerato + qmlUnit->offsetToObjects = unitSize + importSize; + qmlUnit->nObjects = output.objects.count(); + qmlUnit->indexOfRootObject = output.indexOfRootObject; ++ ++#ifdef ENABLE_UNIT_CACHE ++ if (compilationUnit->isRestored) { ++ qmlUnit->offsetToStringTable = jsUnit->offsetToStringTable; ++ qmlUnit->stringTableSize = jsUnit->stringTableSize; ++ } else { ++ qmlUnit->offsetToStringTable = totalSize - output.jsGenerator.stringTable.sizeOfTableAndData(); ++ qmlUnit->stringTableSize = output.jsGenerator.stringTable.stringCount(); ++ } ++#else + qmlUnit->offsetToStringTable = totalSize - output.jsGenerator.stringTable.sizeOfTableAndData(); + qmlUnit->stringTableSize = output.jsGenerator.stringTable.stringCount(); ++#endif ++ ++ // Release ++ jsUnit = 0; + + // write imports + char *importPtr = data + qmlUnit->offsetToImports; +@@ -1631,7 +1649,12 @@ QV4::CompiledData::Unit *QmlUnitGenerato + } + } + ++#ifdef ENABLE_UNIT_CACHE ++ if (!compilationUnit->isRestored) ++ output.jsGenerator.stringTable.serialize(qmlUnit); ++#else + output.jsGenerator.stringTable.serialize(qmlUnit); ++#endif + + return qmlUnit; + } +Index: qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qqmltypecompiler.cpp +=================================================================== +--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/compiler/qqmltypecompiler.cpp ++++ qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qqmltypecompiler.cpp +@@ -219,6 +219,7 @@ bool QQmlTypeCompiler::compile() + QScopedPointer isel(v4->iselFactory->create(engine, v4->executableAllocator, &document->jsModule, &document->jsGenerator)); + isel->setUseFastLookups(false); + isel->setUseTypeInference(true); ++ isel->setEngine(engine); + document->javaScriptCompilationUnit = isel->compile(/*generated unit data*/false); + } + +@@ -419,6 +420,7 @@ QQmlPropertyCacheCreator::QQmlPropertyCa + , qmlObjects(*typeCompiler->qmlObjects()) + , imports(typeCompiler->imports()) + , resolvedTypes(typeCompiler->resolvedTypes()) ++ , m_url(typeCompiler->url()) + { + } + +Index: qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qqmltypecompiler_p.h +=================================================================== +--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/compiler/qqmltypecompiler_p.h ++++ qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qqmltypecompiler_p.h +@@ -140,6 +140,7 @@ protected: + QHash *resolvedTypes; + QVector vmeMetaObjects; + QVector propertyCaches; ++ QUrl m_url; + }; + + // "Converts" signal expressions to full-fleged function declarations with +Index: qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qv4compileddata_p.h +=================================================================== +--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/compiler/qv4compileddata_p.h ++++ qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qv4compileddata_p.h +@@ -594,6 +594,11 @@ struct Q_QML_PRIVATE_EXPORT CompilationU + QVector runtimeFunctions; + mutable QQmlNullableValue m_url; + ++#ifdef ENABLE_UNIT_CACHE ++ QVector lookupTable; ++ bool isRestored; ++#endif ++ + // index is object index. This allows fast access to the + // property data when initializing bindings, avoiding expensive + // lookups by string (property name). +Index: qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qv4isel_moth_p.h +=================================================================== +--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/compiler/qv4isel_moth_p.h ++++ qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qv4isel_moth_p.h +@@ -64,9 +64,11 @@ public: + ~InstructionSelection(); + + virtual void run(int functionIndex); ++ virtual QV4::JIT::InstructionSelection* impl() { return NULL; }; + + protected: + virtual QQmlRefPointer backendCompileStep(); ++ virtual QV4::CompiledData::CompilationUnit* mutableCompilationUnit(); + + virtual void visitJump(IR::Jump *); + virtual void visitCJump(IR::CJump *); +Index: qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qv4isel_p.cpp +=================================================================== +--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/compiler/qv4isel_p.cpp ++++ qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qv4isel_p.cpp +@@ -3,6 +3,12 @@ + ** Copyright (C) 2015 The Qt Company Ltd. + ** Contact: http://www.qt.io/licensing/ + ** ++** Copyright (C) 2015 Nomovok Ltd. All rights reserved. ++** Contact: info@nomovok.com ++** ++** Copyright (C) 2015 Canonical Limited and/or its subsidiary(-ies). ++** Contact: ricardo.mendoza@canonical.com ++** + ** This file is part of the QtQml module of the Qt Toolkit. + ** + ** $QT_BEGIN_LICENSE:LGPL21$ +@@ -41,9 +47,65 @@ + + #include ++#include + ++#ifndef V4_UNIT_CACHE ++#undef ENABLE_UNIT_CACHE ++#endif ++ ++#ifdef ENABLE_UNIT_CACHE ++#include ++#include ++#include ++#include ++#include ++#include "../jit/qv4cachedlinkdata_p.h" ++#include "../jit/qv4assembler_p.h" ++#include ++#include ++#include ++#include ++#include ++#include ++#endif ++ ++bool writeData(QDataStream& stream, const char* data, int len) ++{ ++ if (stream.writeRawData(data, len) != len) ++ return false; ++ else ++ return true; ++} ++ ++bool writeDataWithLen(QDataStream& stream, const char* data, int len) ++{ ++ quint32 l = len; ++ if (!writeData(stream, (const char *)&l, sizeof(quint32))) ++ return false; ++ if (!writeData(stream, data, len)) ++ return false; ++ return true; ++} ++ ++bool readData(char *data, int len, QDataStream &stream) ++{ ++ if (stream.readRawData(data, len) != len) { ++ return false; ++ } else { ++ return true; ++ } ++} ++ + using namespace QV4; + using namespace QV4::IR; + ++static bool do_cache = false; ++ ++enum CacheState { ++ UNTESTED = 0, ++ VALID = 1, ++ INVALID = 2 ++}; ++ + EvalInstructionSelection::EvalInstructionSelection(QV4::ExecutableAllocator *execAllocator, Module *module, QV4::Compiler::JSUnitGenerator *jsGenerator) + : useFastLookups(true) + , useTypeInference(true) +@@ -64,6 +126,9 @@ EvalInstructionSelection::EvalInstructio + Q_ASSERT(execAllocator); + #endif + Q_ASSERT(module); ++ ++ // Enable JIT cache only when explicitly requested and only cache files-on-disk (no qrc or inlines) ++ do_cache = !qgetenv("QV4_ENABLE_JIT_CACHE").isEmpty() && irModule->fileName.startsWith(QStringLiteral("file://")); + } + + EvalInstructionSelection::~EvalInstructionSelection() +@@ -72,15 +137,307 @@ EvalInstructionSelection::~EvalInstructi + EvalISelFactory::~EvalISelFactory() + {} + +-QQmlRefPointer EvalInstructionSelection::compile(bool generateUnitData) ++QQmlRefPointer EvalInstructionSelection::runAll(bool generateUnitData) + { +- for (int i = 0; i < irModule->functions.size(); ++i) +- run(i); ++ for (int i = 0; i < irModule->functions.size(); ++i) { ++ run(i); // Performs the actual compilation ++ } ++ ++ QQmlRefPointer result = backendCompileStep(); ++ ++#ifdef ENABLE_UNIT_CACHE ++ result->isRestored = false; ++#endif + +- QQmlRefPointer unit = backendCompileStep(); + if (generateUnitData) ++ result->data = jsGenerator->generateUnit(); ++ ++ return result; ++} ++ ++QQmlRefPointer EvalInstructionSelection::compile(bool generateUnitData) ++{ ++#ifndef ENABLE_UNIT_CACHE ++ return runAll(generateUnitData); ++#else ++ QQmlRefPointer result(nullptr); ++ ++ // Check if running JIT mode and if cache is enabled ++ if (!do_cache || !this->impl()) { ++ return runAll(generateUnitData); ++ } ++ ++ QV4::CompiledData::CompilationUnit *unit; ++ bool loaded = false; ++ bool do_save = true; ++ ++ QByteArray path(qgetenv("HOME") + QByteArray("/.cache/QML/Apps/") + (qgetenv("APP_ID").isEmpty() ? QCoreApplication::applicationName().toLatin1() : qgetenv("APP_ID"))); ++ ++ if (m_engine && m_engine->qmlCacheValid == CacheState::UNTESTED) { ++ bool valid = true; ++ QDir cacheDir; ++ cacheDir.setPath(QLatin1String(path)); ++ QStringList files = cacheDir.entryList(); ++ for (int i = 0; i < files.size(); i++) { ++ if (valid == false) ++ break; ++ ++ QFile cacheFile(path + QDir::separator() + files.at(i)); ++ if (cacheFile.open(QIODevice::ReadOnly)) { ++ QDataStream stream(&cacheFile); ++ quint32 strLen = 0; ++ readData((char *)&strLen, sizeof(quint32), stream); ++ if (strLen == 0) { ++ cacheFile.close(); ++ continue; ++ } ++ ++ char *tmpStr = (char *) malloc(strLen); ++ readData((char *)tmpStr, strLen, stream); ++ quint32 mtime = 0; ++ readData((char *)&mtime, sizeof(quint32), stream); ++ ++ struct stat sb; ++ stat(tmpStr, &sb); ++ if (QFile::exists(QLatin1String(tmpStr))) { ++ QByteArray time(ctime(&sb.st_mtime)); ++ if (mtime != (quint32) sb.st_mtime) { ++ if (m_engine) m_engine->qmlCacheValid = CacheState::INVALID; ++ valid = false; ++ } ++ } else { ++ // Compilation unit of unresolvable type (inline), remove ++ cacheFile.remove(); ++ } ++ ++ free(tmpStr); ++ cacheFile.close(); ++ } ++ } ++ if (valid) { ++ m_engine->qmlCacheValid = CacheState::VALID; ++ } else { ++ for (int i = 0; i < files.size(); i++) ++ cacheDir.remove(files.at(i)); ++ } ++ } ++ ++ // Search for cache blob by mtime/app_id/file hash ++ struct stat sb; ++ stat(irModule->fileName.toLatin1().remove(0, 7).constData(), &sb); ++ QByteArray time(ctime(&sb.st_mtime)); ++ QByteArray urlHash(QCryptographicHash::hash((irModule->fileName.toLatin1() + qgetenv("APP_ID") + time), QCryptographicHash::Md5).toHex()); ++ QDir dir; ++ dir.mkpath(QLatin1String(path)); ++ QFile cacheFile(path + QDir::separator() + urlHash); ++ ++ QByteArray fileData; ++ ++ // TODO: Support inline compilation units ++ if (cacheFile.exists() && cacheFile.open(QIODevice::ReadOnly)) { ++ if (!irModule->fileName.isEmpty() && !irModule->fileName.contains(QStringLiteral("inline")) && m_engine) { ++ loaded = true; ++ fileData.append(cacheFile.readAll()); ++ } else { ++ loaded = false; ++ cacheFile.close(); ++ return runAll(generateUnitData); ++ } ++ } ++ ++ // Check file integrity ++ QString fileHash(QLatin1String(QCryptographicHash::hash(fileData.left(fileData.size()-32), QCryptographicHash::Md5).toHex())); ++ if (!fileHash.contains(QLatin1String(fileData.right(32)))) { ++ cacheFile.close(); ++ cacheFile.remove(); ++ loaded = false; ++ } ++ ++ // This code has been inspired and influenced by Nomovok's QMLC compiler available at ++ // https://github.com/qmlc/qmlc. All original Copyrights are maintained for the ++ // basic code snippets. ++ if (loaded) { ++ // Retrieve unit skeleton from isel implementation ++ unit = mutableCompilationUnit(); ++ QV4::JIT::CompilationUnit *tmpUnit = (QV4::JIT::CompilationUnit *) unit; ++ tmpUnit->codeRefs.resize(irModule->functions.size()); ++ ++ QDataStream stream(fileData); ++ ++ quint32 strLen = 0; ++ readData((char *)&strLen, sizeof(quint32), stream); ++ char *tmpStr = (char *) malloc(strLen); ++ readData((char *)tmpStr, strLen, stream); ++ quint32 mtime = 0; ++ readData((char *)&mtime, sizeof(quint32), stream); ++ ++ unit->lookupTable.reserve(tmpUnit->codeRefs.size()); ++ quint32 len; ++ for (int i = 0; i < tmpUnit->codeRefs.size(); i++) { ++ quint32 strLen; ++ readData((char *)&strLen, sizeof(quint32), stream); ++ ++ char *fStr = (char *) malloc(strLen); ++ readData(fStr, strLen, stream); ++ ++ QString hashString(QLatin1String(irModule->functions.at(i)->name->toLatin1().constData())); ++ hashString.append(QString::number(irModule->functions.at(i)->line)); ++ hashString.append(QString::number(irModule->functions.at(i)->column)); ++ ++ if (!hashString.contains(QLatin1String(fStr))) ++ return runAll(generateUnitData); ++ ++ unit->lookupTable.append(i); ++ ++ len = 0; ++ readData((char *)&len, sizeof(quint32), stream); ++ ++ // Temporary unlinked code buffer ++ executableAllocator->allocate(len); ++ char *data = (char *) malloc(len); ++ readData(data, len, stream); ++ ++ quint32 linkCallCount = 0; ++ readData((char *)&linkCallCount, sizeof(quint32), stream); ++ ++ QVector linkCalls; ++ linkCalls.resize(linkCallCount); ++ readData((char *)linkCalls.data(), linkCallCount * sizeof(QV4::JIT::CachedLinkData), stream); ++ ++ quint32 constVectorLen = 0; ++ readData((char *)&constVectorLen, sizeof(quint32), stream); ++ ++ QVector constantVector; ++ if (constVectorLen > 0) { ++ constantVector.resize(constVectorLen); ++ readData((char *)constantVector.data(), constVectorLen * sizeof(QV4::Primitive), stream); ++ } ++ ++ // Pre-allocate link buffer to append code ++ QV4::ExecutableAllocator* executableAllocator = m_engine->v4engine()->executableAllocator; ++ ++ QV4::IR::Function nullFunction(0, 0, QLatin1String("")); ++ ++ QV4::JIT::Assembler* as = new QV4::JIT::Assembler(this->impl(), &nullFunction, executableAllocator); ++ ++ QList& callsToLink = as->callsToLink(); ++ for (int i = 0; i < linkCalls.size(); i++) { ++ QV4::JIT::CachedLinkData& call = linkCalls[i]; ++ void *functionPtr = CACHED_LINK_TABLE[call.index].addr; ++ QV4::JIT::Assembler::CallToLink c; ++ JSC::AssemblerLabel label(call.offset); ++ c.call = QV4::JIT::Assembler::Call(label, QV4::JIT::Assembler::Call::Linkable); ++ c.externalFunction = JSC::FunctionPtr((quint32(*)(void))functionPtr); ++ c.functionName = CACHED_LINK_TABLE[call.index].name; ++ callsToLink.append(c); ++ } ++ ++ QV4::JIT::Assembler::ConstantTable& constTable = as->constantTable(); ++ foreach (const QV4::Primitive &p, constantVector) ++ constTable.add(p); ++ ++ as->appendData(data, len); ++ ++ int dummySize = -1; // Pass known value to trigger use of code buffer ++ tmpUnit->codeRefs[i] = as->link(&dummySize); ++ //Q_ASSERT(dummySize == (int)codeRefLen); ++ ++ delete as; ++ } ++ ++ quint32 size = 0; ++ readData((char *)&size, sizeof(quint32), stream); ++ ++ void *dataPtr = malloc(size); ++ QV4::CompiledData::Unit *finalUnit = reinterpret_cast(dataPtr); ++ if (size > 0) ++ readData((char *)dataPtr, size, stream); ++ ++ result = backendCompileStep(); ++ unit = result.data(); ++ ++ unit->data = nullptr; ++ if (irModule->functions.size() > 0) ++ unit->data = finalUnit; ++ unit->isRestored = true; ++ } else { ++ // Not loading from cache, run all instructions ++ result = runAll(false); ++ unit = result.data(); ++ } ++ ++ if ((unit->data == nullptr) && (do_save || generateUnitData)) + unit->data = jsGenerator->generateUnit(); +- return unit; ++ ++ // Save compilation unit ++ QV4::JIT::CompilationUnit *jitUnit = (QV4::JIT::CompilationUnit *) unit; ++ if (!loaded) { ++ if (cacheFile.open(QIODevice::WriteOnly)) { ++ // TODO: Support inline compilation units ++ if (!irModule->fileName.isEmpty() && !irModule->fileName.contains(QLatin1String("inline")) && m_engine) { ++ QBuffer fillBuff; ++ fillBuff.open(QIODevice::WriteOnly); ++ QDataStream stream(&fillBuff); ++ ++ quint32 fileNameSize = irModule->fileName.size(); ++ writeData(stream, (const char *)&fileNameSize, sizeof(quint32)); ++ writeData(stream, (const char *)irModule->fileName.toLatin1().remove(0, 7).constData(), irModule->fileName.size()); ++ ++ struct stat sb; ++ stat(irModule->fileName.toLatin1().remove(0, 7).constData(), &sb); ++ writeData(stream, (const char *)&sb.st_mtime, sizeof(quint32)); ++ ++ for (int i = 0; i < jitUnit->codeRefs.size(); i++) { ++ const JSC::MacroAssemblerCodeRef &codeRef = jitUnit->codeRefs[i]; ++ const QVector &constantValue = jitUnit->constantValues[i]; ++ quint32 len = codeRef.size(); ++ ++ QString hashString(QLatin1String(irModule->functions.at(i)->name->toLatin1())); ++ hashString.append(QString::number(irModule->functions.at(i)->line)); ++ hashString.append(QString::number(irModule->functions.at(i)->column)); ++ ++ quint32 strLen = hashString.size(); ++ strLen += 1; // /0 char ++ writeData(stream, (const char *)&strLen, sizeof(quint32)); ++ writeData(stream, (const char *)hashString.toLatin1().constData(), strLen); ++ writeData(stream, (const char *)&len, sizeof(quint32)); ++ writeData(stream, (const char *)(((unsigned long)codeRef.code().executableAddress())&~1), len); ++ ++ const QVector &linkCalls = jitUnit->linkData[i]; ++ quint32 linkCallCount = linkCalls.size(); ++ ++ writeData(stream, (const char *)&linkCallCount, sizeof(quint32)); ++ if (linkCallCount > 0) ++ writeData(stream, (const char *)linkCalls.data(), linkCalls.size() * sizeof (QV4::JIT::CachedLinkData)); ++ ++ quint32 constTableCount = constantValue.size(); ++ writeData(stream, (const char *)&constTableCount, sizeof(quint32)); ++ ++ if (constTableCount > 0) ++ writeData(stream, (const char*)constantValue.data(), sizeof(QV4::Primitive) * constantValue.size()); ++ } ++ ++ QV4::CompiledData::Unit *retUnit = unit->data; ++ quint32 size = retUnit->unitSize; ++ ++ if (size > 0) { ++ writeData(stream, (const char*)&size, sizeof(quint32)); ++ writeData(stream, (const char*)retUnit, size); ++ } ++ ++ // Write MD5 hash of stored data for consistency check ++ QByteArray fileHash(QCryptographicHash::hash(fillBuff.data(), QCryptographicHash::Md5).toHex()); ++ fillBuff.write(fileHash); ++ cacheFile.write(fillBuff.data()); ++ } ++ cacheFile.close(); ++ } else { ++ cacheFile.close(); ++ } ++ } ++ ++ return result; ++#endif + } + + void IRDecoder::visitMove(IR::Move *s) +Index: qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qv4isel_p.h +=================================================================== +--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/compiler/qv4isel_p.h ++++ qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qv4isel_p.h +@@ -48,6 +48,10 @@ class QQmlEnginePrivate; + + namespace QV4 { + ++namespace JIT { ++ class InstructionSelection; ++} ++ + class ExecutableAllocator; + struct Function; + +@@ -57,6 +61,7 @@ public: + EvalInstructionSelection(QV4::ExecutableAllocator *execAllocator, IR::Module *module, QV4::Compiler::JSUnitGenerator *jsGenerator); + virtual ~EvalInstructionSelection() = 0; + ++ QQmlRefPointer runAll(bool generateUnitData); + QQmlRefPointer compile(bool generateUnitData = true); + + void setUseFastLookups(bool b) { useFastLookups = b; } +@@ -71,10 +76,13 @@ public: + int registerRegExp(IR::RegExp *regexp) { return jsGenerator->registerRegExp(regexp); } + int registerJSClass(int count, IR::ExprList *args) { return jsGenerator->registerJSClass(count, args); } + QV4::Compiler::JSUnitGenerator *jsUnitGenerator() const { return jsGenerator; } ++ void setEngine(QQmlEnginePrivate *qmlEngine) { m_engine = qmlEngine; } + + protected: + virtual void run(int functionIndex) = 0; ++ virtual QV4::JIT::InstructionSelection* impl() = 0; + virtual QQmlRefPointer backendCompileStep() = 0; ++ virtual QV4::CompiledData::CompilationUnit* mutableCompilationUnit() = 0; + + bool useFastLookups; + bool useTypeInference; +@@ -82,6 +90,7 @@ protected: + QV4::Compiler::JSUnitGenerator *jsGenerator; + QScopedPointer ownJSGenerator; + IR::Module *irModule; ++ QQmlEnginePrivate *m_engine; + }; + + class Q_QML_PRIVATE_EXPORT EvalISelFactory +Index: qtdeclarative-opensource-src-5.4.0/src/qml/jit/qv4assembler.cpp +=================================================================== +--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/jit/qv4assembler.cpp ++++ qtdeclarative-opensource-src-5.4.0/src/qml/jit/qv4assembler.cpp +@@ -69,7 +69,15 @@ void CompilationUnit::linkBackendToEngin + + QV4::Function *runtimeFunction = new QV4::Function(engine, this, compiledFunction, + (ReturnedValue (*)(QV4::ExecutionEngine *, const uchar *)) codeRefs[i].code().executableAddress()); +- runtimeFunctions[i] = runtimeFunction; ++ ++#if ENABLE_UNIT_CACHE ++ if (isRestored) ++ runtimeFunctions[lookupTable.at(i)] = runtimeFunction; ++ else ++ runtimeFunctions[i] = runtimeFunction; ++#else ++ runtimeFunctions[i] = runtimeFunction; ++#endif + } + } + +Index: qtdeclarative-opensource-src-5.4.0/src/qml/jit/qv4assembler_p.h +=================================================================== +--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/jit/qv4assembler_p.h ++++ qtdeclarative-opensource-src-5.4.0/src/qml/jit/qv4assembler_p.h +@@ -63,6 +63,16 @@ namespace JIT { + + class InstructionSelection; + ++struct CachedLinkData { ++ quint32 index; // Link table index ++ quint32 offset; // Offset inside the codeRef code ++}; ++ ++struct LinkableCode { ++ int len; ++ void* code; ++}; ++ + struct CompilationUnit : public QV4::CompiledData::CompilationUnit + { + virtual ~CompilationUnit(); +@@ -75,6 +85,8 @@ struct CompilationUnit : public QV4::Com + + QVector codeRefs; + QList > constantValues; ++ QList> linkData; ++ QList linkableCode; + }; + + struct RelativeCall { +@@ -1064,7 +1076,12 @@ public: + move(TrustedImm64(u.i), ReturnValueRegister); + move64ToDouble(ReturnValueRegister, target); + #else +- JSC::MacroAssembler::loadDouble(constantTable().loadValueAddress(c, ScratchRegister), target); ++ QV4::Primitive vv = convertToValue(c); ++ FPRegisterID scratchFp; ++ scratchFp = target; ++ move(TrustedImm32(vv.int_32), ReturnValueRegister); ++ move(TrustedImm32(vv.tag), ScratchRegister); ++ moveIntsToDouble(ReturnValueRegister, ScratchRegister, target, scratchFp); + #endif + return target; + } +@@ -1152,6 +1169,12 @@ public: + Label exceptionReturnLabel; + IR::BasicBlock * catchBlock; + QVector exceptionPropagationJumps; ++ ++ LinkableCode tmpBuffer; ++ ++ LinkableCode& codeToLink() { return tmpBuffer; } ++ QList& callsToLink() { return _callsToLink; } ++ + private: + QScopedPointer _stackLayout; + ConstantTable _constTable; +Index: qtdeclarative-opensource-src-5.4.0/src/qml/jit/qv4cachedlinkdata_p.h +=================================================================== +--- /dev/null ++++ qtdeclarative-opensource-src-5.4.0/src/qml/jit/qv4cachedlinkdata_p.h +@@ -0,0 +1,188 @@ ++/*************************************************************************** ++** ++** Copyright (C) 2014 Nomovok Ltd. All rights reserved. ++** Contact: info@nomovok.com ++** ++** Copyright (C) 2014 Canonical Limited and/or its subsidiary(-ies). ++** Contact: ricardo.mendoza@canonical.com ++** ++** GNU Lesser General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU Lesser ++** General Public License version 2.1 as published by the Free Software ++** Foundation and appearing in the file LICENSE.LGPL included in the ++** packaging of this file. Please review the following information to ++** ensure the GNU Lesser General Public License version 2.1 requirements ++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** In addition, as a special exception, Digia gives you certain additional ++** rights. These rights are described in the Digia Qt LGPL Exception ++** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ++** ++** GNU General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU ++** General Public License version 3.0 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. Please review the following information to ++** ensure the GNU General Public License version 3.0 requirements will be ++** met: http://www.gnu.org/copyleft/gpl.html. ++** ++****************************************************************************/ ++ ++#ifndef QV4CACHEDLINKDATA_P_H ++#define QV4CACHEDLINKDATA_P_H ++ ++#include ++#include ++#include ++ ++QT_BEGIN_NAMESPACE ++ ++struct CachedLinkEntry { ++ const char *name; ++ void *addr; ++}; ++ ++#define CACHED_LINK_TABLE_ADD_NS(x) QV4::Runtime::x ++#define CACHED_LINK_TABLE_STR(x) "Runtime::" #x ++#define CACHED_LINK_TABLE_ENTRY_RUNTIME(x) { (const char *)CACHED_LINK_TABLE_STR(x), (void *)CACHED_LINK_TABLE_ADD_NS(x) } ++ ++// table to link objects ++// this table can be used to resolve functions, it is id -> object mapping to maximize performance in linking phase ++// when adding new calls, add to end of the list to maintain compatibility ++const CachedLinkEntry CACHED_LINK_TABLE[] = { ++ // call ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(callGlobalLookup), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(callActivationProperty), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(callProperty), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(callPropertyLookup), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(callElement), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(callValue), ++ ++ // construct ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(constructGlobalLookup), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(constructActivationProperty), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(constructProperty), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(constructPropertyLookup), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(constructValue), ++ ++ // set & get ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(setActivationProperty), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(setProperty), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(setElement), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(getProperty), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(getActivationProperty), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(getElement), ++ ++ // typeof ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(typeofValue), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(typeofName), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(typeofMember), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(typeofElement), ++ ++ // delete ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(deleteElement), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(deleteMember), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(deleteName), ++ ++ // exceptions & scopes ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(throwException), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(unwindException), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(pushWithScope), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(pushCatchScope), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(popScope), ++ ++ // closures ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(closure), ++ ++ // function header ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(declareVar), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(setupArgumentsObject), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(convertThisToObject), ++ ++ // literals ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(arrayLiteral), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(objectLiteral), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(regexpLiteral), ++ ++ // foreach ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(foreachIterator), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(foreachNextPropertyName), ++ ++ // unary operators ++ //typedef ReturnedValue (*UnaryOperation)(const ValueRef); ++ {"NOOP", (void *)qt_noop}, ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(uPlus), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(uMinus), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(uNot), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(complement), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(increment), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(decrement), ++ ++ // binary operators ++ //typedef ReturnedValue (*BinaryOperation)(const ValueRef left, const ValueRef right); ++ {"NOOP", (void *)qt_noop}, ++ //typedef ReturnedValue (*BinaryOperationContext)(ExecutionContext *ctx, const ValueRef left, const ValueRef right); ++ {"NOOP", (void *)qt_noop}, ++ ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(instanceof), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(in), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(add), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(addString), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(bitOr), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(bitXor), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(bitAnd), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(sub), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(mul), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(div), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(mod), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(shl), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(shr), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(ushr), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(greaterThan), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(lessThan), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(greaterEqual), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(lessEqual), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(equal), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(notEqual), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(strictEqual), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(strictNotEqual), ++ ++ // comparisons ++ //typedef Bool (*CompareOperation)(const ValueRef left, const ValueRef right);} ++ {"NOOP", (void *)qt_noop}, ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(compareGreaterThan), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(compareLessThan), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(compareGreaterEqual), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(compareLessEqual), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(compareEqual), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(compareNotEqual), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(compareStrictEqual), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(compareStrictNotEqual), ++ ++ //typedef Bool (*CompareOperationContext)(ExecutionContext *ctx, const ValueRef left, const ValueRef right); ++ {"NOOP", (void *)qt_noop}, ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(compareInstanceof), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(compareIn), ++ ++ // conversions ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(toBoolean), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(toDouble), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(toInt), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(doubleToInt), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(toUInt), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(doubleToUInt), ++ ++ // qml ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(getQmlIdArray), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(getQmlImportedScripts), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(getQmlContextObject), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(getQmlScopeObject), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(getQmlSingleton), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(getQmlAttachedProperty), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(getQmlQObjectProperty), ++ CACHED_LINK_TABLE_ENTRY_RUNTIME(setQmlQObjectProperty) ++}; ++ ++QT_END_NAMESPACE ++ ++#endif +Index: qtdeclarative-opensource-src-5.4.0/src/qml/jit/qv4isel_masm.cpp +=================================================================== +--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/jit/qv4isel_masm.cpp ++++ qtdeclarative-opensource-src-5.4.0/src/qml/jit/qv4isel_masm.cpp +@@ -43,6 +43,7 @@ + #include "qv4assembler_p.h" + #include "qv4unop_p.h" + #include "qv4binop_p.h" ++#include "qv4cachedlinkdata_p.h" + + #include + +@@ -139,9 +140,13 @@ JSC::MacroAssemblerCodeRef Assembler::li + JSC::LinkBuffer linkBuffer(dummy, this, 0); + + QHash functions; ++ int i = 0; + foreach (CallToLink ctl, _callsToLink) { +- linkBuffer.link(ctl.call, ctl.externalFunction); ++ unsigned int offset = linkBuffer.link(ctl.call, ctl.externalFunction); ++ ctl.call.m_label.m_offset = offset; + functions[linkBuffer.locationOf(ctl.label).dataLocation()] = ctl.functionName; ++ _callsToLink.replace(i, ctl); ++ i++; + } + + foreach (const DataLabelPatch &p, _dataLabelPatches) +@@ -277,6 +282,25 @@ void InstructionSelection::run(int funct + JSC::MacroAssemblerCodeRef codeRef =_as->link(&dummySize); + compilationUnit->codeRefs[functionIndex] = codeRef; + ++ QVector calls; ++ QList& callsToLink = _as->callsToLink(); ++ for (int i = 0; i < callsToLink.size(); i++) { ++ Assembler::CallToLink& ctl = callsToLink[i]; ++ int index = -1; ++ for (uint i = 0; i < sizeof(CACHED_LINK_TABLE) / sizeof (CachedLinkEntry); i++) { ++ if (CACHED_LINK_TABLE[i].addr == ctl.externalFunction.value()) { ++ index = i; ++ break; ++ } ++ } ++ CachedLinkData link; ++ link.index = index; ++ link.offset = ctl.call.m_label.m_offset; ++ calls.append(link); ++ } ++ compilationUnit->linkData.insert(functionIndex, calls); // link data; ++ compilationUnit->linkableCode.insert(functionIndex, _as->codeToLink()); // code to link ++ + qSwap(_function, function); + delete _as; + _as = oldAssembler; +@@ -300,6 +324,11 @@ QQmlRefPointer *values); ++ ++ virtual InstructionSelection* impl() { return this; }; + protected: + virtual QQmlRefPointer backendCompileStep(); ++ virtual QV4::CompiledData::CompilationUnit* mutableCompilationUnit(); + + virtual void callBuiltinInvalid(IR::Name *func, IR::ExprList *args, IR::Expr *result); + virtual void callBuiltinTypeofMember(IR::Expr *base, const QString &name, IR::Expr *result); +Index: qtdeclarative-opensource-src-5.4.0/src/qml/jsruntime/qv4functionobject.cpp +=================================================================== +--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/jsruntime/qv4functionobject.cpp ++++ qtdeclarative-opensource-src-5.4.0/src/qml/jsruntime/qv4functionobject.cpp +@@ -226,6 +226,7 @@ ReturnedValue FunctionCtor::construct(Ma + + Compiler::JSUnitGenerator jsGenerator(&module); + QScopedPointer isel(scope.engine->iselFactory->create(QQmlEnginePrivate::get(scope.engine), scope.engine->executableAllocator, &module, &jsGenerator)); ++ isel->setEngine(QQmlEnginePrivate::get(scope.engine)); + QQmlRefPointer compilationUnit = isel->compile(); + Function *vmf = compilationUnit->linkToEngine(scope.engine); + +Index: qtdeclarative-opensource-src-5.4.0/src/qml/jsruntime/qv4qobjectwrapper.cpp +=================================================================== +--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/jsruntime/qv4qobjectwrapper.cpp ++++ qtdeclarative-opensource-src-5.4.0/src/qml/jsruntime/qv4qobjectwrapper.cpp +@@ -629,6 +629,7 @@ ReturnedValue QObjectWrapper::getPropert + QQmlPropertyCache *cache = ddata->propertyCache; + Q_ASSERT(cache); + QQmlPropertyData *property = cache->property(propertyIndex); ++ + Q_ASSERT(property); // We resolved this property earlier, so it better exist! + return getProperty(object, ctx, property, captureRequired); + } +Index: qtdeclarative-opensource-src-5.4.0/src/qml/jsruntime/qv4script.cpp +=================================================================== +--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/jsruntime/qv4script.cpp ++++ qtdeclarative-opensource-src-5.4.0/src/qml/jsruntime/qv4script.cpp +@@ -259,6 +259,7 @@ void Script::parse() + QScopedPointer isel(v4->iselFactory->create(QQmlEnginePrivate::get(v4), v4->executableAllocator, &module, &jsGenerator)); + if (inheritContext) + isel->setUseFastLookups(false); ++ isel->setEngine(QQmlEnginePrivate::get(v4)); + QQmlRefPointer compilationUnit = isel->compile(); + vmFunction = compilationUnit->linkToEngine(v4); + ScopedObject holder(valueScope, v4->memoryManager->alloc(v4, compilationUnit)); +@@ -360,6 +361,7 @@ QQmlRefPointer isel(engine->iselFactory->create(QQmlEnginePrivate::get(engine), engine->executableAllocator, module, unitGenerator)); + isel->setUseFastLookups(false); ++ isel->setEngine(QQmlEnginePrivate::get(engine)); + return isel->compile(/*generate unit data*/false); + } + +Index: qtdeclarative-opensource-src-5.4.0/src/qml/qml/qqmlengine.cpp +=================================================================== +--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/qml/qqmlengine.cpp ++++ qtdeclarative-opensource-src-5.4.0/src/qml/qml/qqmlengine.cpp +@@ -559,7 +559,8 @@ QQmlEnginePrivate::QQmlEnginePrivate(QQm + activeObjectCreator(0), + networkAccessManager(0), networkAccessManagerFactory(0), urlInterceptor(0), + scarceResourcesRefCount(0), typeLoader(e), importDatabase(e), uniqueId(1), +- incubatorCount(0), incubationController(0) ++ incubatorCount(0), incubationController(0), ++ qmlCacheValid(0) + { + } + +Index: qtdeclarative-opensource-src-5.4.0/src/qml/qml/qqmlengine_p.h +=================================================================== +--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/qml/qqmlengine_p.h ++++ qtdeclarative-opensource-src-5.4.0/src/qml/qml/qqmlengine_p.h +@@ -263,6 +263,8 @@ public: + + mutable QMutex networkAccessManagerMutex; + ++ int qmlCacheValid; ++ + private: + // Must be called locked + QQmlPropertyCache *createCache(QQmlType *, int, QQmlError &error); +Index: qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qv4isel_moth.cpp +=================================================================== +--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/compiler/qv4isel_moth.cpp ++++ qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qv4isel_moth.cpp +@@ -457,6 +457,11 @@ QQmlRefPointer +Date: Thu, 15 Oct 2015 17:26:04 +0200 +Subject: [PATCH] qmlplugindump: Don't try to import Qt.test.qtestroot + +Qt.test.qtestroot is only provided by quick_test_main so +if we find any plugin that tries to inherit from TestCase.qml +qmlplugindump will fail trying to import this unexistant import + +Change-Id: Idee881fa641267a17594dd3c92e929ca3473f3df +--- + tools/qmlplugindump/main.cpp | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/tools/qmlplugindump/main.cpp b/tools/qmlplugindump/main.cpp +index 0238a4a..5aad160 100644 +--- a/tools/qmlplugindump/main.cpp ++++ b/tools/qmlplugindump/main.cpp +@@ -838,6 +838,14 @@ static bool getDependencies(const QQmlEngine &engine, const QString &pluginImpor + std::cerr << "failed to proecess output of qmlimportscanner" << std::endl; + return false; + } ++ ++ QStringList aux; ++ foreach (const QString &str, *dependencies) { ++ if (!str.startsWith("Qt.test.qtestroot")) ++ aux += str; ++ } ++ *dependencies = aux; ++ + return true; + } + +-- +2.5.0 + diff -Nru qtdeclarative-opensource-src-5.5.1/debian/patches/qml-preserve-composite-singleton-types.patch qtdeclarative-opensource-src-5.5.1/debian/patches/qml-preserve-composite-singleton-types.patch --- qtdeclarative-opensource-src-5.5.1/debian/patches/qml-preserve-composite-singleton-types.patch 1970-01-01 00:00:00.000000000 +0000 +++ qtdeclarative-opensource-src-5.5.1/debian/patches/qml-preserve-composite-singleton-types.patch 2016-04-12 10:44:34.000000000 +0000 @@ -0,0 +1,163 @@ +From 4b018848f7a7055976895de8a4b8208b58a36fac Mon Sep 17 00:00:00 2001 +From: Marco Benelli +Date: Fri, 4 Dec 2015 15:56:07 +0100 +Subject: [PATCH] qml: preserve composite singleton types. + +Composite singleton types used to always have version -1,-1; regardless +of what is written in qmldir. + +Change-Id: Ia193e73695e57095f6a09b97768805f2f23cd56a +Reviewed-by: Erik Verbruggen +--- + src/qml/qml/qqmlimport.cpp | 19 +++++++++++++------ + src/qml/qml/qqmlimport_p.h | 2 ++ + src/qml/qml/qqmltypeloader.cpp | 4 ++-- + .../tests/dumper/CompositeSingleton/Singleton.qml | 6 ++++++ + .../tests/dumper/CompositeSingleton/qmldir | 3 +++ + tests/auto/qml/qmlplugindump/tst_qmlplugindump.cpp | 14 ++++++++++++++ + 6 files changed, 40 insertions(+), 8 deletions(-) + create mode 100644 tests/auto/qml/qmlplugindump/tests/dumper/CompositeSingleton/Singleton.qml + create mode 100644 tests/auto/qml/qmlplugindump/tests/dumper/CompositeSingleton/qmldir + +diff --git a/src/qml/qml/qqmlimport.cpp b/src/qml/qml/qqmlimport.cpp +index f6f8c6e..d538199 100644 +--- a/src/qml/qml/qqmlimport.cpp ++++ b/src/qml/qml/qqmlimport.cpp +@@ -125,7 +125,9 @@ bool isPathAbsolute(const QString &path) + } + + // If the type does not already exist as a file import, add the type and return the new type +-QQmlType *getTypeForUrl(const QString &urlString, const QHashedStringRef& typeName, bool isCompositeSingleton, QList *errors) ++QQmlType *getTypeForUrl(const QString &urlString, const QHashedStringRef& typeName, ++ bool isCompositeSingleton, QList *errors, ++ int majorVersion=-1, int minorVersion=-1) + { + QUrl url(urlString); + QQmlType *ret = QQmlMetaType::qmlType(url); +@@ -140,8 +142,8 @@ QQmlType *getTypeForUrl(const QString &urlString, const QHashedStringRef& typeNa + QQmlPrivate::RegisterCompositeSingletonType reg = { + url, + "", //Empty URI indicates loaded via file imports +- -1, +- -1, ++ majorVersion, ++ minorVersion, + buf.constData() + }; + ret = QQmlMetaType::qmlTypeFromIndex(QQmlPrivate::qmlregister(QQmlPrivate::CompositeSingletonRegistration, ®)); +@@ -149,8 +151,8 @@ QQmlType *getTypeForUrl(const QString &urlString, const QHashedStringRef& typeNa + QQmlPrivate::RegisterCompositeType reg = { + url, + "", //Empty URI indicates loaded via file imports +- -1, +- -1, ++ majorVersion, ++ minorVersion, + buf.constData() + }; + ret = QQmlMetaType::qmlTypeFromIndex(QQmlPrivate::qmlregister(QQmlPrivate::CompositeRegistration, ®)); +@@ -416,6 +418,8 @@ void findCompositeSingletons(const QQmlImportNamespace &set, QListtypeName; + ref.prefix = set.prefix; ++ ref.majorVersion = cit->majorVersion; ++ ref.minorVersion = cit->minorVersion; + resultList.append(ref); + } + } +@@ -656,7 +660,10 @@ bool QQmlImportNamespace::Import::resolveType(QQmlTypeLoader *typeLoader, + } + + if (candidate != end) { +- QQmlType *returnType = getTypeForUrl(componentUrl, type, isCompositeSingleton, 0); ++ int major = vmajor ? *vmajor : -1; ++ int minor = vminor ? *vminor : -1; ++ QQmlType *returnType = getTypeForUrl(componentUrl, type, isCompositeSingleton, 0, ++ major, minor); + if (type_return) + *type_return = returnType; + return returnType != 0; +diff --git a/src/qml/qml/qqmlimport_p.h b/src/qml/qml/qqmlimport_p.h +index bda87f2..951b975 100644 +--- a/src/qml/qml/qqmlimport_p.h ++++ b/src/qml/qml/qqmlimport_p.h +@@ -118,6 +118,8 @@ public: + { + QString typeName; + QString prefix; ++ int majorVersion; ++ int minorVersion; + }; + + QList resolvedCompositeSingletons() const; +diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp +index 29f1ca7..1e67154 100644 +--- a/src/qml/qml/qqmltypeloader.cpp ++++ b/src/qml/qml/qqmltypeloader.cpp +@@ -2320,8 +2320,8 @@ void QQmlTypeData::resolveTypes() + m_namespaces.insert(csRef.prefix); + } + +- int majorVersion = -1; +- int minorVersion = -1; ++ int majorVersion = csRef.majorVersion > -1 ? csRef.majorVersion : -1; ++ int minorVersion = csRef.minorVersion > -1 ? csRef.minorVersion : -1; + + if (!resolveType(typeName, majorVersion, minorVersion, ref)) + return; +diff --git a/tests/auto/qml/qmlplugindump/tests/dumper/CompositeSingleton/Singleton.qml b/tests/auto/qml/qmlplugindump/tests/dumper/CompositeSingleton/Singleton.qml +new file mode 100644 +index 0000000..b47d2e9 +--- /dev/null ++++ b/tests/auto/qml/qmlplugindump/tests/dumper/CompositeSingleton/Singleton.qml +@@ -0,0 +1,6 @@ ++pragma Singleton ++import QtQuick 2.0 ++ ++QtObject { ++ property int test: 0 ++} +diff --git a/tests/auto/qml/qmlplugindump/tests/dumper/CompositeSingleton/qmldir b/tests/auto/qml/qmlplugindump/tests/dumper/CompositeSingleton/qmldir +new file mode 100644 +index 0000000..8df57f6 +--- /dev/null ++++ b/tests/auto/qml/qmlplugindump/tests/dumper/CompositeSingleton/qmldir +@@ -0,0 +1,3 @@ ++module tests.dumper.CompositeSingleton ++singleton Singleton 1.0 Singleton.qml ++depends QtQuick 2.0 +diff --git a/tests/auto/qml/qmlplugindump/tst_qmlplugindump.cpp b/tests/auto/qml/qmlplugindump/tst_qmlplugindump.cpp +index 28d687b..eb05e8c 100644 +--- a/tests/auto/qml/qmlplugindump/tst_qmlplugindump.cpp ++++ b/tests/auto/qml/qmlplugindump/tst_qmlplugindump.cpp +@@ -47,6 +47,7 @@ public: + private slots: + void initTestCase(); + void builtins(); ++ void singleton(); + + private: + QString qmlplugindumpPath; +@@ -102,6 +103,19 @@ void tst_qmlplugindump::builtins() + QVERIFY(result.contains(QLatin1String("Module {"))); + } + ++void tst_qmlplugindump::singleton() ++{ ++ QProcess dumper; ++ QStringList args; ++ args << QLatin1String("tests.dumper.CompositeSingleton") << QLatin1String("1.0") ++ << QLatin1String("."); ++ dumper.start(qmlplugindumpPath, args); ++ dumper.waitForFinished(); ++ ++ const QString &result = dumper.readAllStandardOutput(); ++ QVERIFY(result.contains(QLatin1String("exports: [\"Singleton 1.0\"]"))); ++} ++ + QTEST_MAIN(tst_qmlplugindump) + + #include "tst_qmlplugindump.moc" +-- +2.7.0 + diff -Nru qtdeclarative-opensource-src-5.5.1/debian/patches/QQuickItem-fix-an-infinite-loop-nextItemInFocusChain.patch qtdeclarative-opensource-src-5.5.1/debian/patches/QQuickItem-fix-an-infinite-loop-nextItemInFocusChain.patch --- qtdeclarative-opensource-src-5.5.1/debian/patches/QQuickItem-fix-an-infinite-loop-nextItemInFocusChain.patch 1970-01-01 00:00:00.000000000 +0000 +++ qtdeclarative-opensource-src-5.5.1/debian/patches/QQuickItem-fix-an-infinite-loop-nextItemInFocusChain.patch 2016-04-12 10:44:34.000000000 +0000 @@ -0,0 +1,85 @@ +From 0cc242c679b54d91d43b865414b250e644a1d879 Mon Sep 17 00:00:00 2001 +From: Liang Qi +Date: Wed, 20 Jan 2016 12:21:21 +0100 +Subject: [PATCH] QQuickItem: fix an infinite loop nextItemInFocusChain() + +When isTabFence is set to true and no children. + +Task-number: QTBUG-50516 +Change-Id: I8430336fde7ab041797f8f9d9dfe5b9d56fecddd +--- + src/quick/items/qquickitem.cpp | 2 ++ + tests/auto/quick/qquickitem2/data/qtbug_50516.qml | 9 +++++++++ + tests/auto/quick/qquickitem2/tst_qquickitem.cpp | 20 ++++++++++++++++++++ + 3 files changed, 31 insertions(+) + create mode 100644 tests/auto/quick/qquickitem2/data/qtbug_50516.qml + +diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp +index 224dece..059bb4b 100644 +--- a/src/quick/items/qquickitem.cpp ++++ b/src/quick/items/qquickitem.cpp +@@ -2508,6 +2508,8 @@ QQuickItem* QQuickItemPrivate::nextPrevItemInTabFocusChain(QQuickItem *item, boo + lastChild = prevTabChildItem(current, -1); + } + bool isTabFence = current->d_func()->isTabFence; ++ if (isTabFence && !hasChildren) ++ return current; + + // coming from parent: check children + if (hasChildren && from == current->parentItem()) { +diff --git a/tests/auto/quick/qquickitem2/data/qtbug_50516.qml b/tests/auto/quick/qquickitem2/data/qtbug_50516.qml +new file mode 100644 +index 0000000..5e2a60b +--- /dev/null ++++ b/tests/auto/quick/qquickitem2/data/qtbug_50516.qml +@@ -0,0 +1,9 @@ ++import QtQuick 2.1 ++import Test 1.0 ++ ++TabFence { ++ objectName: "root" ++ focus: true ++ width: 800 ++ height: 600 ++} +diff --git a/tests/auto/quick/qquickitem2/tst_qquickitem.cpp b/tests/auto/quick/qquickitem2/tst_qquickitem.cpp +index c7717b9..7225724 100644 +--- a/tests/auto/quick/qquickitem2/tst_qquickitem.cpp ++++ b/tests/auto/quick/qquickitem2/tst_qquickitem.cpp +@@ -74,6 +74,7 @@ private slots: + void nextItemInFocusChain3(); + + void tabFence(); ++ void qtbug_50516(); + + void keys(); + void standardKeys_data(); +@@ -1194,6 +1195,25 @@ void tst_QQuickItem::tabFence() + verifyTabFocusChain(window, fence1BacktabFocusChain, false /* forward */); + } + ++void tst_QQuickItem::qtbug_50516() ++{ ++ QQuickView *window = new QQuickView(0); ++ window->setBaseSize(QSize(800,600)); ++ ++ window->setSource(testFileUrl("qtbug_50516.qml")); ++ window->show(); ++ window->requestActivate(); ++ QVERIFY(QTest::qWaitForWindowActive(window)); ++ QVERIFY(QGuiApplication::focusWindow() == window); ++ QVERIFY(window->rootObject()->hasActiveFocus()); ++ ++ QQuickItem *contentItem = window->rootObject(); ++ QQuickItem *next = contentItem->nextItemInFocusChain(true); ++ QCOMPARE(next, contentItem); ++ next = contentItem->nextItemInFocusChain(false); ++ QCOMPARE(next, contentItem); ++} ++ + void tst_QQuickItem::keys() + { + QQuickView *window = new QQuickView(0); +-- +2.7.0.rc3 + diff -Nru qtdeclarative-opensource-src-5.5.1/debian/patches/QQuickItem-fix-another-infinite-loop-in-nextItemInFo.patch qtdeclarative-opensource-src-5.5.1/debian/patches/QQuickItem-fix-another-infinite-loop-in-nextItemInFo.patch --- qtdeclarative-opensource-src-5.5.1/debian/patches/QQuickItem-fix-another-infinite-loop-in-nextItemInFo.patch 1970-01-01 00:00:00.000000000 +0000 +++ qtdeclarative-opensource-src-5.5.1/debian/patches/QQuickItem-fix-another-infinite-loop-in-nextItemInFo.patch 2016-04-12 10:44:34.000000000 +0000 @@ -0,0 +1,316 @@ +From 6eff71ca4728639da1c83d88094041c40ab6dbf1 Mon Sep 17 00:00:00 2001 +From: Liang Qi +Date: Thu, 21 Jan 2016 13:19:24 +0100 +Subject: [PATCH] QQuickItem: fix another infinite loop in + nextItemInFocusChain() + +Task-number: QTBUG-50516 +Change-Id: I6a1513b22401b0fe45da758a239ad82038b83264 +--- + src/quick/items/qquickitem.cpp | 24 ++++++-- + .../quick/qquickitem2/data/qtbug_50516_2_1.qml | 13 +++++ + .../quick/qquickitem2/data/qtbug_50516_2_2.qml | 12 ++++ + .../quick/qquickitem2/data/qtbug_50516_2_3.qml | 16 ++++++ + .../quick/qquickitem2/data/qtbug_50516_2_4.qml | 15 +++++ + .../quick/qquickitem2/data/qtbug_50516_2_5.qml | 16 ++++++ + .../quick/qquickitem2/data/qtbug_50516_2_6.qml | 17 ++++++ + tests/auto/quick/qquickitem2/tst_qquickitem.cpp | 64 ++++++++++++++++++++++ + 8 files changed, 171 insertions(+), 6 deletions(-) + create mode 100644 tests/auto/quick/qquickitem2/data/qtbug_50516_2_1.qml + create mode 100644 tests/auto/quick/qquickitem2/data/qtbug_50516_2_2.qml + create mode 100644 tests/auto/quick/qquickitem2/data/qtbug_50516_2_3.qml + create mode 100644 tests/auto/quick/qquickitem2/data/qtbug_50516_2_4.qml + create mode 100644 tests/auto/quick/qquickitem2/data/qtbug_50516_2_5.qml + create mode 100644 tests/auto/quick/qquickitem2/data/qtbug_50516_2_6.qml + +diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp +index 53342d5..02685a7 100644 +--- a/src/quick/items/qquickitem.cpp ++++ b/src/quick/items/qquickitem.cpp +@@ -2471,6 +2471,7 @@ QQuickItem *QQuickItemPrivate::prevTabChildItem(const QQuickItem *item, int star + QQuickItem* QQuickItemPrivate::nextPrevItemInTabFocusChain(QQuickItem *item, bool forward) + { + Q_ASSERT(item); ++ qCDebug(DBG_FOCUS) << "QQuickItemPrivate::nextPrevItemInTabFocusChain: item:" << item << ", forward:" << forward; + + if (!item->window()) + return item; +@@ -2481,19 +2482,25 @@ QQuickItem* QQuickItemPrivate::nextPrevItemInTabFocusChain(QQuickItem *item, boo + bool all = QGuiApplication::styleHints()->tabFocusBehavior() == Qt::TabFocusAllControls; + + QQuickItem *from = 0; ++ bool isTabFence = item->d_func()->isTabFence; + if (forward) { +- from = item->parentItem(); ++ if (!isTabFence) ++ from = item->parentItem(); + } else { + if (!item->childItems().isEmpty()) + from = item->childItems().first(); +- else ++ else if (!isTabFence) + from = item->parentItem(); + } + bool skip = false; + QQuickItem * startItem = item; + QQuickItem * firstFromItem = from; + QQuickItem *current = item; ++ qCDebug(DBG_FOCUS) << "QQuickItemPrivate::nextPrevItemInTabFocusChain: startItem:" << startItem; ++ qCDebug(DBG_FOCUS) << "QQuickItemPrivate::nextPrevItemInTabFocusChain: firstFromItem:" << firstFromItem; + do { ++ qCDebug(DBG_FOCUS) << "QQuickItemPrivate::nextPrevItemInTabFocusChain: current:" << current; ++ qCDebug(DBG_FOCUS) << "QQuickItemPrivate::nextPrevItemInTabFocusChain: from:" << from; + skip = false; + QQuickItem *last = current; + +@@ -2507,7 +2514,7 @@ QQuickItem* QQuickItemPrivate::nextPrevItemInTabFocusChain(QQuickItem *item, boo + else + lastChild = prevTabChildItem(current, -1); + } +- bool isTabFence = current->d_func()->isTabFence; ++ isTabFence = current->d_func()->isTabFence; + if (isTabFence && !hasChildren) + return current; + +@@ -2562,9 +2569,14 @@ QQuickItem* QQuickItemPrivate::nextPrevItemInTabFocusChain(QQuickItem *item, boo + return startItem; + } + } +- if (!firstFromItem) { //start from root +- startItem = current; +- firstFromItem = from; ++ if (!firstFromItem) { ++ if (startItem->d_func()->isTabFence) { ++ if (current == startItem) ++ firstFromItem = from; ++ } else { //start from root ++ startItem = current; ++ firstFromItem = from; ++ } + } + } while (skip || !current->activeFocusOnTab() || !current->isEnabled() || !current->isVisible() + || !(all || QQuickItemPrivate::canAcceptTabFocus(current))); +diff --git a/tests/auto/quick/qquickitem2/data/qtbug_50516_2_1.qml b/tests/auto/quick/qquickitem2/data/qtbug_50516_2_1.qml +new file mode 100644 +index 0000000..d8b7833 +--- /dev/null ++++ b/tests/auto/quick/qquickitem2/data/qtbug_50516_2_1.qml +@@ -0,0 +1,13 @@ ++import QtQuick 2.1 ++import Test 1.0 ++ ++TabFence2 { ++ objectName: "root" ++ focus: true ++ width: 800 ++ height: 600 ++ Item { ++ objectName: "item" ++ focus: true ++ } ++} +diff --git a/tests/auto/quick/qquickitem2/data/qtbug_50516_2_2.qml b/tests/auto/quick/qquickitem2/data/qtbug_50516_2_2.qml +new file mode 100644 +index 0000000..445dc6d +--- /dev/null ++++ b/tests/auto/quick/qquickitem2/data/qtbug_50516_2_2.qml +@@ -0,0 +1,12 @@ ++import QtQuick 2.1 ++import Test 1.0 ++ ++TabFence2 { ++ objectName: "root" ++ focus: true ++ width: 800 ++ height: 600 ++ Item { ++ objectName: "item" ++ } ++} +diff --git a/tests/auto/quick/qquickitem2/data/qtbug_50516_2_3.qml b/tests/auto/quick/qquickitem2/data/qtbug_50516_2_3.qml +new file mode 100644 +index 0000000..806d48e +--- /dev/null ++++ b/tests/auto/quick/qquickitem2/data/qtbug_50516_2_3.qml +@@ -0,0 +1,16 @@ ++import QtQuick 2.1 ++import Test 1.0 ++ ++TabFence2 { ++ objectName: "root" ++ focus: true ++ width: 800 ++ height: 600 ++ Item { ++ objectName: "item2" ++ focus: true ++ } ++ Item { ++ objectName: "item2" ++ } ++} +diff --git a/tests/auto/quick/qquickitem2/data/qtbug_50516_2_4.qml b/tests/auto/quick/qquickitem2/data/qtbug_50516_2_4.qml +new file mode 100644 +index 0000000..6fcf513 +--- /dev/null ++++ b/tests/auto/quick/qquickitem2/data/qtbug_50516_2_4.qml +@@ -0,0 +1,15 @@ ++import QtQuick 2.1 ++import Test 1.0 ++ ++TabFence2 { ++ objectName: "root" ++ focus: true ++ width: 800 ++ height: 600 ++ Item { ++ objectName: "item2" ++ } ++ Item { ++ objectName: "item2" ++ } ++} +diff --git a/tests/auto/quick/qquickitem2/data/qtbug_50516_2_5.qml b/tests/auto/quick/qquickitem2/data/qtbug_50516_2_5.qml +new file mode 100644 +index 0000000..4f7b68a +--- /dev/null ++++ b/tests/auto/quick/qquickitem2/data/qtbug_50516_2_5.qml +@@ -0,0 +1,16 @@ ++import QtQuick 2.1 ++import Test 1.0 ++ ++TabFence2 { ++ objectName: "root" ++ focus: true ++ width: 800 ++ height: 600 ++ TextInput { ++ objectName: "item1" ++ activeFocusOnTab: true ++ } ++ Item { ++ objectName: "item2" ++ } ++} +diff --git a/tests/auto/quick/qquickitem2/data/qtbug_50516_2_6.qml b/tests/auto/quick/qquickitem2/data/qtbug_50516_2_6.qml +new file mode 100644 +index 0000000..2234763 +--- /dev/null ++++ b/tests/auto/quick/qquickitem2/data/qtbug_50516_2_6.qml +@@ -0,0 +1,17 @@ ++import QtQuick 2.1 ++import Test 1.0 ++ ++TabFence2 { ++ objectName: "root" ++ focus: true ++ width: 800 ++ height: 600 ++ TextInput { ++ objectName: "item1" ++ activeFocusOnTab: true ++ } ++ TextInput { ++ objectName: "item2" ++ activeFocusOnTab: true ++ } ++} +diff --git a/tests/auto/quick/qquickitem2/tst_qquickitem.cpp b/tests/auto/quick/qquickitem2/tst_qquickitem.cpp +index 8a75cba..58dca5c 100644 +--- a/tests/auto/quick/qquickitem2/tst_qquickitem.cpp ++++ b/tests/auto/quick/qquickitem2/tst_qquickitem.cpp +@@ -75,6 +75,8 @@ private slots: + + void tabFence(); + void qtbug_50516(); ++ void qtbug_50516_2_data(); ++ void qtbug_50516_2(); + + void keys(); + void standardKeys_data(); +@@ -309,6 +311,22 @@ public: + + QML_DECLARE_TYPE(TabFenceItem); + ++class TabFenceItem2 : public QQuickItem ++{ ++ Q_OBJECT ++ ++public: ++ TabFenceItem2(QQuickItem *parent = Q_NULLPTR) ++ : QQuickItem(parent) ++ { ++ QQuickItemPrivate *d = QQuickItemPrivate::get(this); ++ d->isTabFence = true; ++ setFlag(ItemIsFocusScope); ++ } ++}; ++ ++QML_DECLARE_TYPE(TabFenceItem2); ++ + tst_QQuickItem::tst_QQuickItem() + { + } +@@ -319,6 +337,7 @@ void tst_QQuickItem::initTestCase() + qmlRegisterType("Test",1,0,"KeyTestItem"); + qmlRegisterType("Test", 1, 0, "HollowTestItem"); + qmlRegisterType("Test", 1, 0, "TabFence"); ++ qmlRegisterType("Test", 1, 0, "TabFence2"); + } + + void tst_QQuickItem::cleanup() +@@ -1216,6 +1235,51 @@ void tst_QQuickItem::qtbug_50516() + QCOMPARE(next, contentItem); + } + ++void tst_QQuickItem::qtbug_50516_2_data() ++{ ++ QTest::addColumn("filename"); ++ QTest::addColumn("item1"); ++ QTest::addColumn("item2"); ++ ++ QTest::newRow("FocusScope TabFence with one Item(focused)") ++ << QStringLiteral("qtbug_50516_2_1.qml") << QStringLiteral("root") << QStringLiteral("root"); ++ QTest::newRow("FocusScope TabFence with one Item(unfocused)") ++ << QStringLiteral("qtbug_50516_2_2.qml") << QStringLiteral("root") << QStringLiteral("root"); ++ QTest::newRow("FocusScope TabFence with two Items(focused)") ++ << QStringLiteral("qtbug_50516_2_3.qml") << QStringLiteral("root") << QStringLiteral("root"); ++ QTest::newRow("FocusScope TabFence with two Items(unfocused)") ++ << QStringLiteral("qtbug_50516_2_4.qml") << QStringLiteral("root") << QStringLiteral("root"); ++ QTest::newRow("FocusScope TabFence with one Item and one TextInput(unfocused)") ++ << QStringLiteral("qtbug_50516_2_5.qml") << QStringLiteral("item1") << QStringLiteral("item1"); ++ QTest::newRow("FocusScope TabFence with two TextInputs(unfocused)") ++ << QStringLiteral("qtbug_50516_2_6.qml") << QStringLiteral("item1") << QStringLiteral("item2"); ++} ++ ++void tst_QQuickItem::qtbug_50516_2() ++{ ++ QFETCH(QString, filename); ++ QFETCH(QString, item1); ++ QFETCH(QString, item2); ++ ++ QQuickView *window = new QQuickView(0); ++ window->setBaseSize(QSize(800,600)); ++ ++ window->setSource(testFileUrl(filename)); ++ window->show(); ++ window->requestActivate(); ++ QVERIFY(QTest::qWaitForWindowActive(window)); ++ QVERIFY(QGuiApplication::focusWindow() == window); ++ QVERIFY(window->rootObject()->hasActiveFocus()); ++ ++ QQuickItem *contentItem = window->rootObject(); ++ QQuickItem *next = contentItem->nextItemInFocusChain(true); ++ QCOMPARE(next->objectName(), item1); ++ next = contentItem->nextItemInFocusChain(false); ++ QCOMPARE(next->objectName(), item2); ++ ++ delete window; ++} ++ + void tst_QQuickItem::keys() + { + QQuickView *window = new QQuickView(0); +-- +2.7.0 + diff -Nru qtdeclarative-opensource-src-5.5.1/debian/patches/QQuickItemView-forceLayout-Also-call-layout-when-d-f.patch qtdeclarative-opensource-src-5.5.1/debian/patches/QQuickItemView-forceLayout-Also-call-layout-when-d-f.patch --- qtdeclarative-opensource-src-5.5.1/debian/patches/QQuickItemView-forceLayout-Also-call-layout-when-d-f.patch 1970-01-01 00:00:00.000000000 +0000 +++ qtdeclarative-opensource-src-5.5.1/debian/patches/QQuickItemView-forceLayout-Also-call-layout-when-d-f.patch 2016-04-12 10:44:34.000000000 +0000 @@ -0,0 +1,76 @@ +From 201dec50b6f08b740aab9947725f8f5ec36349bb Mon Sep 17 00:00:00 2001 +From: Albert Astals Cid +Date: Mon, 7 Mar 2016 13:18:56 +0100 +Subject: [PATCH] QQuickItemView::forceLayout: Also call layout when + d->forceLayout + +This way callers of forceLayout get a relayout if the dimension +of a delegate that affects the itemview content size has just changed +but the itemview content size has not been updated yet. + +This is useful because sometimes in the QML side you want to do things when the +item view delegate size has changed but need the item view content size to be already updated. + +Change-Id: I846984a841e8e14c84d7a700a7ff736196b60afb +Reviewed-by: Michael Brasser +Reviewed-by: Shawn Rutledge +--- + src/quick/items/qquickitemview.cpp | 3 ++- + tests/auto/qmltest/listview/tst_listview.qml | 21 +++++++++++++++++++++ + 2 files changed, 23 insertions(+), 1 deletion(-) + +diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp +index 188b347..aff03b7 100644 +--- a/src/quick/items/qquickitemview.cpp ++++ b/src/quick/items/qquickitemview.cpp +@@ -1052,7 +1052,8 @@ QQuickItem *QQuickItemView::itemAt(qreal x, qreal y) const + void QQuickItemView::forceLayout() + { + Q_D(QQuickItemView); +- d->applyPendingChanges(); ++ if (isComponentComplete() && (d->currentChanges.hasPendingChanges() || d->forceLayout)) ++ d->layout(); + } + + void QQuickItemViewPrivate::applyPendingChanges() +diff --git a/tests/auto/qmltest/listview/tst_listview.qml b/tests/auto/qmltest/listview/tst_listview.qml +index 988d30f..75429c4 100644 +--- a/tests/auto/qmltest/listview/tst_listview.qml ++++ b/tests/auto/qmltest/listview/tst_listview.qml +@@ -51,6 +51,22 @@ Item { + } + + ListView { ++ id: singleElementList ++ height: 20 ++ width: 50 ++ model: 1 ++ property real heightForDelegate: 100 ++ property real contentHeightOnDelegateResize ++ delegate: Rectangle { ++ height: singleElementList.heightForDelegate ++ onHeightChanged: { ++ singleElementList.forceLayout(); ++ singleElementList.contentHeightOnDelegateResize = singleElementList.contentHeight; ++ } ++ } ++ } ++ ++ ListView { + id: viewmanyitems + model: manyitems + delegate: Text { text: model.name } +@@ -313,5 +329,10 @@ Item { + compare(listInteractiveCurrentIndexEnforce.currentIndex, 1); + tryCompare(listInteractiveCurrentIndexEnforce, "contentX", listInteractiveCurrentIndexEnforce.width); + } ++ ++ function test_forceLayoutForContentHeight() { ++ singleElementList.heightForDelegate = 200; ++ compare(singleElementList.contentHeightOnDelegateResize, 200); ++ } + } + } +-- +2.7.0 + diff -Nru qtdeclarative-opensource-src-5.5.1/debian/patches/series qtdeclarative-opensource-src-5.5.1/debian/patches/series --- qtdeclarative-opensource-src-5.5.1/debian/patches/series 2015-10-21 18:50:23.000000000 +0000 +++ qtdeclarative-opensource-src-5.5.1/debian/patches/series 2016-04-12 10:44:34.000000000 +0000 @@ -1,2 +1,24 @@ +# Backported patches +Make-sure-we-stop-animators-if-they-are-yet-to-be-st.patch +Add-QQuickAsyncImageProvider.patch +Don-t-change-the-currentItem-after-a-viewport-resize.patch +Fix-memory-leak-when-using-async-image-providers.patch +qmlplugindump-Don-t-try-to-import-Qt.test.qtestroot.patch +Don-t-make-currentIndex-skip-an-extra-item-on-remova.patch +Image-fix-crash-when-switching-between-multiple-scre.patch +Flickable-avoid-perturbing-the-timeline-further-whil.patch +MultiPointTouchArea-Fixed-released-duplication-on-mo.patch +Add-isTabFence-private-flag.patch +QQuickItem-fix-an-infinite-loop-nextItemInFocusChain.patch +QQuickItem-fix-another-infinite-loop-in-nextItemInFo.patch +QQuickItemView-forceLayout-Also-call-layout-when-d-f.patch +qml-preserve-composite-singleton-types.patch +Fix-crash-in-hasAtlasTexture.patch + # Debian patches check_system_double-conversion.patch + +# Ubuntu patches +fix_binary_location_for_tests.patch +disable_failing_tests.patch +QML-Compilation-unit-caching-and-JIT-changes.patch diff -Nru qtdeclarative-opensource-src-5.5.1/debian/rules qtdeclarative-opensource-src-5.5.1/debian/rules --- qtdeclarative-opensource-src-5.5.1/debian/rules 2016-04-16 15:17:01.000000000 +0000 +++ qtdeclarative-opensource-src-5.5.1/debian/rules 2016-04-12 10:44:34.000000000 +0000 @@ -3,9 +3,8 @@ # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 -export DPKG_GENSYMBOLS_CHECK_LEVEL=0 - DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH) +DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH) PRIVATE_HEADERS = debian/qtdeclarative5-private-dev/usr/include/$(DEB_HOST_MULTIARCH)/qt5 export CFLAGS := $(shell dpkg-buildflags --get CFLAGS) $(shell dpkg-buildflags --get CPPFLAGS) @@ -13,11 +12,14 @@ export LDFLAGS := $(shell dpkg-buildflags --get LDFLAGS) -Wl,--as-needed export QT_SELECT := qt5 +# Skip tests on the archs they are known to be flaky with current configuration +testskip_architectures := powerpc ppc64el + %: - dh $@ --parallel --with pkgkde_symbolshelper + dh $@ --parallel --with pkgkde_symbolshelper --dbg-package=qtdeclarative5-dbg override_dh_auto_configure: - qmake + qmake QT_BUILD_PARTS+=tests override_dh_auto_build-indep: dh_auto_build -Smakefile -- html_docs @@ -67,9 +69,22 @@ done override_dh_makeshlibs: - dh_makeshlibs -V + dh_makeshlibs # Check for private symbols not marked as such. Be verbose. pkgkde-mark-private-symbols debian/qtdeclarative5-private-dev/usr/include -# Requires X so disabled for now override_dh_auto_test: + cp -a src/imports/qtquick2/qmldir qml/QtQuick.2 + cp -a src/imports/folderlistmodel/qmldir qml/Qt/labs/folderlistmodel/ + cp -a src/imports/settings/qmldir qml/Qt/labs/settings/ + cp -a src/imports/window/qmldir qml/QtQuick/Window.2/ + cp -a src/imports/models/qmldir qml/QtQml/Models.2/ + cp -a src/imports/testlib/qmldir qml/QtTest + cp -a src/imports/testlib/TestCase.qml qml/QtTest + cp -a src/imports/testlib/SignalSpy.qml qml/QtTest + cp -a src/imports/testlib/testlogger.js qml/QtTest +ifneq ($(DEB_HOST_ARCH),$(findstring $(DEB_HOST_ARCH), $(testskip_architectures))) +ifeq (,$(findstring nocheck,$(DEB_BUILD_OPTIONS))) + xvfb-run -a -s "-screen 0 1024x768x24 +extension RANDR +extension RENDER +extension GLX" dh_auto_test -- QT_PLUGIN_PATH=$(CURDIR)/plugins LD_LIBRARY_PATH=$(CURDIR)/lib QML2_IMPORT_PATH=$(CURDIR)/qml +endif +endif