Skip to content

Conversation

@rjcamatos
Copy link

If there are 2 or more methods with the same name but reciving diferent arguments the QJSEngine Pickup the First One declared.

Example:
methodxyz(string)
methodxyz(objptr*)

It picks up the first one passing as argument a string and not the one that i was expecting an object as it was send.

qtprojectorg pushed a commit that referenced this pull request Dec 8, 2023
Using std::binary_search has the requirement that the passed
range fulfils ordering requirements, which was not the case
for the cppKeywords array here.

As the QString doc says [1]:

> QStrings can be compared using overloaded operators such as operator<(),
> operator<=(), operator==(), operator>=(), and so on. Note that
> the comparison is based exclusively on the numeric Unicode
> values of the characters. It is very fast, but is not what a
> human would expect; (...)

Therefore, sort the array accordingly and add an assert to
ensure it will remain sorted.

Fixes an crash/assert when building qtdeclarative with
CXXFLAGS='-D_GLIBCXX_DEBUG':

    /usr/include/c++/13/bits/stl_algo.h:2243:
    In function:
        bool std::binary_search(_FIter, _FIter, const _Tp&) [with _FIter = const
        QString*; _Tp = QStringView]

    Error: elements in iterator range [first, last) are not partitioned by the
    value __val.

    Objects involved in the operation:
        iterator "first" @ 0x7ffc4a2c4f18 {
          type = QString const* (constant iterator);
        }
        iterator "last" @ 0x7ffc4a2c4f10 {
          type = QString const* (constant iterator);
        }
    Aborted (core dumped)
    ninja: build stopped: subcommand failed.

GDB backtrace:

    Program terminated with signal SIGABRT, Aborted.
    #0  __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44
    44      ./nptl/pthread_kill.c: No such file or directory.
    (gdb) bt
    #0  __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44
    #1  0x00007f307e0a815f in __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78
    #2  0x00007f307e05a472 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
    #3  0x00007f307e0444b2 in __GI_abort () at ./stdlib/abort.c:79
    #4  0x00007f307e2a300d in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
    #5  0x00005639ff90471d in std::binary_search<QString const*, QStringView> (__first=0x5639ffa1a9c0 <QmltcVisitor::checkForNamingCollisionsWithCpp(QDeferredSharedPointer<QQmlJSScope const> const&)::cppKeywords>,
        __last=0x5639ffa1b2c0 <guard variable for QmltcVisitor::checkForNamingCollisionsWithCpp(QDeferredSharedPointer<QQmlJSScope const> const&)::cppKeywords>, __val=...) at /usr/include/c++/13/bits/stl_algo.h:2243
    #6  0x00005639ff8fb837 in operator() (__closure=0x7ffc4a2c52bf, word=...) at /home/michi/development/git/qt5/qtdeclarative/tools/qmltc/qmltcvisitor.cpp:764
    #7  0x00005639ff8fb89e in operator() (__closure=0x7ffc4a2c52a0, name=..., errorPrefix=...) at /home/michi/development/git/qt5/qtdeclarative/tools/qmltc/qmltcvisitor.cpp:768
    #8  0x00005639ff8fc99b in QmltcVisitor::checkForNamingCollisionsWithCpp (this=0x7ffc4a2c6070, type=...) at /home/michi/development/git/qt5/qtdeclarative/tools/qmltc/qmltcvisitor.cpp:787
    #9  0x00005639ff8f9dea in QmltcVisitor::endVisit (this=0x7ffc4a2c6070, program=0x563a002e0628) at /home/michi/development/git/qt5/qtdeclarative/tools/qmltc/qmltcvisitor.cpp:341
    #10 0x00007f307f6636fa in QQmlJS::AST::UiProgram::accept0 (this=0x563a002e0628, visitor=0x7ffc4a2c6070) at /home/michi/development/git/qt5/qtdeclarative/src/qml/parser/qqmljsast.cpp:1193
    #11 0x00007f3080159b8f in QQmlJS::AST::Node::accept (this=0x563a002e0628, visitor=0x7ffc4a2c6070)
        at /home/michi/development/git/qt5/qtbase/include/QtQml/6.7.0/QtQml/private/../../../../../../qtdeclarative/src/qml/parser/qqmljsast_p.h:272
    #12 0x00007f3080212f4b in QQmlJSTypeResolver::init (this=0x7ffc4a2c5b50, visitor=0x7ffc4a2c6070, program=0x563a002e0628) at /home/michi/development/git/qt5/qtdeclarative/src/qmlcompiler/qqmljstyperesolver.cpp:173
    #13 0x00005639ff8f0bd3 in QmltcTypeResolver::init (this=0x7ffc4a2c5b50, visitor=0x7ffc4a2c6070, program=0x563a002e0628) at /home/michi/development/git/qt5/qtdeclarative/tools/qmltc/qmltctyperesolver.cpp:19
    #14 0x00005639ff8c02d4 in main (argc=23, argv=0x7ffc4a2c7a68) at /home/michi/development/git/qt5/qtdeclarative/tools/qmltc/main.cpp:269

[1] https://doc.qt.io/qt-6/qstring.html#comparing-strings

Change-Id: I82ebbcdca4ab90155b935f9af24b3a3821134563
Reviewed-by: Sami Shalayel <[email protected]>
Reviewed-by: Ulf Hermann <[email protected]>
@cla-assistant
Copy link

cla-assistant bot commented Nov 15, 2024

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.
0 out of 12 committers have signed the CLA.

❌ michaelweghorn
❌ iCristalrope
❌ Dmitrii Akshintsev
❌ samishalayel
❌ eskilblomfeldt
❌ rlohning
❌ ulfhermannqt
❌ AhmadSamir
❌ dorisverria1
❌ alpqr
❌ vohi
❌ Dami-star


Dmitrii Akshintsev seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.
You have signed the CLA already but the status is still pending? Let us recheck it.

qtprojectorg pushed a commit that referenced this pull request Sep 9, 2025
Use dimmer as a context object rather than the test itself, which
outlives it.

The backtrace was:

    FAIL!  : tst_QQuickPopup::Basic::fadeDimmer(modal) The computed value is expected to be greater than the baseline, but is not
       Computed (opacityChangeCount): 2
       Baseline (2)                 : 2
       Loc: [/Users/mitch/dev/qt-dev2/qtdeclarative/tests/auto/quickcontrols/qquickpopup/tst_qquickpopup.cpp(2629)]
    =================================================================
    ==68826==ERROR: AddressSanitizer: stack-use-after-scope on address 0x00016b7f7140 at pc 0x000104743c68 bp 0x00016b7ecfd0 sp 0x00016b7ecfc8
    READ of size 4 at 0x00016b7f7140 thread T0
        #0 0x000104743c64 in tst_QQuickPopup::fadeDimmer()::$_0::operator()() const tst_qquickpopup.cpp:2625
        #1 0x000104743bc0 in QtPrivate::FunctorCall<std::__1::integer_sequence<unsigned long>, QtPrivate::List<>, void, tst_QQuickPopup::fadeDimmer()::$_0>::call(tst_QQuickPopup::fadeDimmer()::$_0&, void**)::'lambda'()::operator()() const qobjectdefs_impl.h:116
        #2 0x000104743b64 in void QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::__1::integer_sequence<unsigned long>, QtPrivate::List<>, void, tst_QQuickPopup::fadeDimmer()::$_0>::call(tst_QQuickPopup::fadeDimmer()::$_0&, void**)::'lambda'()>(void**, QtPrivate::FunctorCall<std::__1::integer_sequence<unsigned long>, QtPrivate::List<>, void, tst_QQuickPopup::fadeDimmer()::$_0>::call(tst_QQuickPopup::fadeDimmer()::$_0&, void**)::'lambda'()&&) qobjectdefs_impl.h:65
        #3 0x000104743ab4 in QtPrivate::FunctorCall<std::__1::integer_sequence<unsigned long>, QtPrivate::List<>, void, tst_QQuickPopup::fadeDimmer()::$_0>::call(tst_QQuickPopup::fadeDimmer()::$_0&, void**) qobjectdefs_impl.h:115
        #4 0x000104743930 in void QtPrivate::FunctorCallable<tst_QQuickPopup::fadeDimmer()::$_0>::call<QtPrivate::List<>, void>(tst_QQuickPopup::fadeDimmer()::$_0&, void*, void**) qobjectdefs_impl.h:337
        #5 0x000104743848 in QtPrivate::QCallableObject<tst_QQuickPopup::fadeDimmer()::$_0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) qobjectdefs_impl.h:547
        #6 0x00011694273c in QtPrivate::QSlotObjectBase::call(QObject*, void**) qobjectdefs_impl.h:461
        #7 0x000116e49454 in void doActivate<false>(QObject*, int, void**) qobject.cpp:4284
        #8 0x000116e467a0 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) qobject.cpp:4344
        #9 0x00010c1462d4 in QQuickItem::opacityChanged() moc_qquickitem.cpp:1019
        #10 0x00010c1461c8 in QQuickItem::setOpacity(double) qquickitem.cpp:6517
        #11 0x00010c168638 in QQuickItem::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) moc_qquickitem.cpp:850
        #12 0x000113847100 in QQmlPropertyData::writeProperty(QObject*, void*, QFlags<QQmlPropertyData::WriteFlag>) const qqmlpropertydata_p.h:413
        #13 0x000113c33468 in QQmlPropertyPrivate::write(QObject*, QQmlPropertyData const&, QVariant const&, QQmlRefPointer<QQmlContextData> const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1668
        #14 0x000113c32638 in QQmlPropertyPrivate::writeValueProperty(QObject*, QQmlPropertyData const&, QQmlPropertyData const&, QVariant const&, QQmlRefPointer<QQmlContextData> const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1326
        #15 0x000113c32390 in QQmlPropertyPrivate::writeValueProperty(QVariant const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1270
        #16 0x000113c391b4 in QQmlPropertyPrivate::write(QQmlProperty const&, QVariant const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1947
        #17 0x00010c9949ac in QQuickAnimationPropertyUpdater::setValue(double) qquickanimation.cpp:2740
        #18 0x00010c992444 in QQuickBulkValueAnimator::updateCurrentTime(int) qquickanimation.cpp:2069
        #19 0x000114345428 in QAbstractAnimationJob::setCurrentTime(int) qabstractanimationjob.cpp:481
        #20 0x000114349c3c in QAbstractAnimationJob::setState(QAbstractAnimationJob::State) qabstractanimationjob.cpp:367
        #21 0x00011434bc34 in QAbstractAnimationJob::start() qabstractanimationjob.cpp:514
        #22 0x00010c9ff568 in QQuickBehavior::write(QVariant const&) qquickbehavior.cpp:419
        #23 0x00010c9ff88c in non-virtual thunk to QQuickBehavior::write(QVariant const&) qquickbehavior.cpp
        #24 0x000113f53b7c in QQmlInterceptorMetaObject::doIntercept(QMetaObject::Call, int, void**) qqmlvmemetaobject.cpp:392
        #25 0x000113f532e4 in QQmlInterceptorMetaObject::intercept(QMetaObject::Call, int, void**) qqmlvmemetaobject_p.h:153
        #26 0x000113f59788 in QQmlVMEMetaObject::metaCall(QObject*, QMetaObject::Call, int, void**) qqmlvmemetaobject.cpp:750
        #27 0x0001138474d0 in void QQmlPropertyData::doMetacall<(QMetaObject::Call)2>(QObject*, int, void**) const qqmlpropertydata_p.h:395
        #28 0x000113847128 in QQmlPropertyData::writeProperty(QObject*, void*, QFlags<QQmlPropertyData::WriteFlag>) const qqmlpropertydata_p.h:415
        #29 0x000113c33468 in QQmlPropertyPrivate::write(QObject*, QQmlPropertyData const&, QVariant const&, QQmlRefPointer<QQmlContextData> const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1668
        #30 0x000113c32638 in QQmlPropertyPrivate::writeValueProperty(QObject*, QQmlPropertyData const&, QQmlPropertyData const&, QVariant const&, QQmlRefPointer<QQmlContextData> const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1326
        #31 0x000113c32390 in QQmlPropertyPrivate::writeValueProperty(QVariant const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1270
        #32 0x000113c391b4 in QQmlPropertyPrivate::write(QQmlProperty const&, QVariant const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1947
        #33 0x000113c38f84 in QQmlProperty::write(QVariant const&) const qqmlproperty.cpp:1863
        #34 0x000113c39358 in QQmlProperty::write(QObject*, QString const&, QVariant const&) qqmlproperty.cpp:1880
        #35 0x000107c1db04 in QQuickPopupPrivate::hideDimmer() qquickpopup.cpp:1290
        #36 0x000107c16a68 in QQuickPopupPrivate::prepareExitTransition() qquickpopup.cpp:821
        #37 0x000107c1e038 in QQuickPopupTransitionManager::transitionExit() qquickpopup.cpp:1326
        #38 0x000107c23fd4 in QQuickPopup::setVisible(bool) qquickpopup.cpp:2496
        #39 0x000107c104d8 in QQuickPopup::close() qquickpopup.cpp:1408
        #40 0x000107c1ba80 in QQuickPopup::setParentItem(QQuickItem*) qquickpopup.cpp:2180
        #41 0x000107c1b324 in QQuickPopupPrivate::itemDestroyed(QQuickItem*) qquickpopup.cpp:1063
        #42 0x000107c1bb8c in non-virtual thunk to QQuickPopupPrivate::itemDestroyed(QQuickItem*) qquickpopup.cpp
        #43 0x00010c117f70 in void QQuickItemPrivate::notifyChangeListeners<void (QQuickItemChangeListener::*)(QQuickItem*), QQuickItem*>(QFlags<QQuickItemPrivate::ChangeType>, void (QQuickItemChangeListener::*&&)(QQuickItem*), QQuickItem*&&) qquickitem_p.h:413
        #44 0x00010c113d7c in QQuickItem::~QQuickItem() qquickitem.cpp:2420
        #45 0x00010c50e3e8 in QQuickRootItem::~QQuickRootItem() qquickwindow_p.h:62
        #46 0x00010c4ed840 in QQuickRootItem::~QQuickRootItem() qquickwindow_p.h:62
        #47 0x00010c4ed86c in QQuickRootItem::~QQuickRootItem() qquickwindow_p.h:62
        #48 0x00010c4da1c0 in QQuickWindow::~QQuickWindow() qquickwindow.cpp:1197
        #49 0x00010c531f34 in QQuickWindowQmlImpl::~QQuickWindowQmlImpl() qquickwindowmodule.cpp:73
        #50 0x00010cf2d4f4 in QQmlPrivate::QQmlElement<QQuickWindowQmlImpl>::~QQmlElement() qqmlprivate.h:104
        #51 0x00010cf2d3e0 in QQmlPrivate::QQmlElement<QQuickWindowQmlImpl>::~QQmlElement() qqmlprivate.h:102
        #52 0x00010cf2d40c in QQmlPrivate::QQmlElement<QQuickWindowQmlImpl>::~QQmlElement() qqmlprivate.h:102
        #53 0x00010472efa8 in QScopedPointerDeleter<QObject>::cleanup(QObject*) qscopedpointer.h:24
        #54 0x00010472eefc in QScopedPointer<QObject, QScopedPointerDeleter<QObject>>::~QScopedPointer() qscopedpointer.h:81
        #55 0x00010466f0e8 in QScopedPointer<QObject, QScopedPointerDeleter<QObject>>::~QScopedPointer() qscopedpointer.h:79
        #56 0x00010471246c in QQuickVisualTestUtils::QQuickApplicationHelper::~QQuickApplicationHelper() visualtestutils_p.h:192
        #57 0x00010468ff88 in QQuickVisualTestUtils::QQuickApplicationHelper::~QQuickApplicationHelper() visualtestutils_p.h:192
        #58 0x0001046a953c in tst_QQuickPopup::fadeDimmer() tst_qquickpopup.cpp:2635
        [...]

Amends ef8bde8.

Pick-to: 6.8 6.9 6.10
Change-Id: Ie5c49b7d9ecd3c74f822590d296062b516563391
Reviewed-by: Volker Hilsheimer <[email protected]>
qtprojectorg pushed a commit that referenced this pull request Sep 12, 2025
Use dimmer as a context object rather than the test itself, which
outlives it.

The backtrace was:

    FAIL!  : tst_QQuickPopup::Basic::fadeDimmer(modal) The computed value is expected to be greater than the baseline, but is not
       Computed (opacityChangeCount): 2
       Baseline (2)                 : 2
       Loc: [/Users/mitch/dev/qt-dev2/qtdeclarative/tests/auto/quickcontrols/qquickpopup/tst_qquickpopup.cpp(2629)]
    =================================================================
    ==68826==ERROR: AddressSanitizer: stack-use-after-scope on address 0x00016b7f7140 at pc 0x000104743c68 bp 0x00016b7ecfd0 sp 0x00016b7ecfc8
    READ of size 4 at 0x00016b7f7140 thread T0
        #0 0x000104743c64 in tst_QQuickPopup::fadeDimmer()::$_0::operator()() const tst_qquickpopup.cpp:2625
        #1 0x000104743bc0 in QtPrivate::FunctorCall<std::__1::integer_sequence<unsigned long>, QtPrivate::List<>, void, tst_QQuickPopup::fadeDimmer()::$_0>::call(tst_QQuickPopup::fadeDimmer()::$_0&, void**)::'lambda'()::operator()() const qobjectdefs_impl.h:116
        #2 0x000104743b64 in void QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::__1::integer_sequence<unsigned long>, QtPrivate::List<>, void, tst_QQuickPopup::fadeDimmer()::$_0>::call(tst_QQuickPopup::fadeDimmer()::$_0&, void**)::'lambda'()>(void**, QtPrivate::FunctorCall<std::__1::integer_sequence<unsigned long>, QtPrivate::List<>, void, tst_QQuickPopup::fadeDimmer()::$_0>::call(tst_QQuickPopup::fadeDimmer()::$_0&, void**)::'lambda'()&&) qobjectdefs_impl.h:65
        #3 0x000104743ab4 in QtPrivate::FunctorCall<std::__1::integer_sequence<unsigned long>, QtPrivate::List<>, void, tst_QQuickPopup::fadeDimmer()::$_0>::call(tst_QQuickPopup::fadeDimmer()::$_0&, void**) qobjectdefs_impl.h:115
        #4 0x000104743930 in void QtPrivate::FunctorCallable<tst_QQuickPopup::fadeDimmer()::$_0>::call<QtPrivate::List<>, void>(tst_QQuickPopup::fadeDimmer()::$_0&, void*, void**) qobjectdefs_impl.h:337
        #5 0x000104743848 in QtPrivate::QCallableObject<tst_QQuickPopup::fadeDimmer()::$_0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) qobjectdefs_impl.h:547
        #6 0x00011694273c in QtPrivate::QSlotObjectBase::call(QObject*, void**) qobjectdefs_impl.h:461
        #7 0x000116e49454 in void doActivate<false>(QObject*, int, void**) qobject.cpp:4284
        #8 0x000116e467a0 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) qobject.cpp:4344
        #9 0x00010c1462d4 in QQuickItem::opacityChanged() moc_qquickitem.cpp:1019
        #10 0x00010c1461c8 in QQuickItem::setOpacity(double) qquickitem.cpp:6517
        #11 0x00010c168638 in QQuickItem::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) moc_qquickitem.cpp:850
        #12 0x000113847100 in QQmlPropertyData::writeProperty(QObject*, void*, QFlags<QQmlPropertyData::WriteFlag>) const qqmlpropertydata_p.h:413
        #13 0x000113c33468 in QQmlPropertyPrivate::write(QObject*, QQmlPropertyData const&, QVariant const&, QQmlRefPointer<QQmlContextData> const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1668
        #14 0x000113c32638 in QQmlPropertyPrivate::writeValueProperty(QObject*, QQmlPropertyData const&, QQmlPropertyData const&, QVariant const&, QQmlRefPointer<QQmlContextData> const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1326
        #15 0x000113c32390 in QQmlPropertyPrivate::writeValueProperty(QVariant const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1270
        #16 0x000113c391b4 in QQmlPropertyPrivate::write(QQmlProperty const&, QVariant const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1947
        #17 0x00010c9949ac in QQuickAnimationPropertyUpdater::setValue(double) qquickanimation.cpp:2740
        #18 0x00010c992444 in QQuickBulkValueAnimator::updateCurrentTime(int) qquickanimation.cpp:2069
        #19 0x000114345428 in QAbstractAnimationJob::setCurrentTime(int) qabstractanimationjob.cpp:481
        #20 0x000114349c3c in QAbstractAnimationJob::setState(QAbstractAnimationJob::State) qabstractanimationjob.cpp:367
        #21 0x00011434bc34 in QAbstractAnimationJob::start() qabstractanimationjob.cpp:514
        #22 0x00010c9ff568 in QQuickBehavior::write(QVariant const&) qquickbehavior.cpp:419
        #23 0x00010c9ff88c in non-virtual thunk to QQuickBehavior::write(QVariant const&) qquickbehavior.cpp
        #24 0x000113f53b7c in QQmlInterceptorMetaObject::doIntercept(QMetaObject::Call, int, void**) qqmlvmemetaobject.cpp:392
        #25 0x000113f532e4 in QQmlInterceptorMetaObject::intercept(QMetaObject::Call, int, void**) qqmlvmemetaobject_p.h:153
        #26 0x000113f59788 in QQmlVMEMetaObject::metaCall(QObject*, QMetaObject::Call, int, void**) qqmlvmemetaobject.cpp:750
        #27 0x0001138474d0 in void QQmlPropertyData::doMetacall<(QMetaObject::Call)2>(QObject*, int, void**) const qqmlpropertydata_p.h:395
        #28 0x000113847128 in QQmlPropertyData::writeProperty(QObject*, void*, QFlags<QQmlPropertyData::WriteFlag>) const qqmlpropertydata_p.h:415
        #29 0x000113c33468 in QQmlPropertyPrivate::write(QObject*, QQmlPropertyData const&, QVariant const&, QQmlRefPointer<QQmlContextData> const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1668
        #30 0x000113c32638 in QQmlPropertyPrivate::writeValueProperty(QObject*, QQmlPropertyData const&, QQmlPropertyData const&, QVariant const&, QQmlRefPointer<QQmlContextData> const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1326
        #31 0x000113c32390 in QQmlPropertyPrivate::writeValueProperty(QVariant const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1270
        #32 0x000113c391b4 in QQmlPropertyPrivate::write(QQmlProperty const&, QVariant const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1947
        #33 0x000113c38f84 in QQmlProperty::write(QVariant const&) const qqmlproperty.cpp:1863
        #34 0x000113c39358 in QQmlProperty::write(QObject*, QString const&, QVariant const&) qqmlproperty.cpp:1880
        #35 0x000107c1db04 in QQuickPopupPrivate::hideDimmer() qquickpopup.cpp:1290
        #36 0x000107c16a68 in QQuickPopupPrivate::prepareExitTransition() qquickpopup.cpp:821
        #37 0x000107c1e038 in QQuickPopupTransitionManager::transitionExit() qquickpopup.cpp:1326
        #38 0x000107c23fd4 in QQuickPopup::setVisible(bool) qquickpopup.cpp:2496
        #39 0x000107c104d8 in QQuickPopup::close() qquickpopup.cpp:1408
        #40 0x000107c1ba80 in QQuickPopup::setParentItem(QQuickItem*) qquickpopup.cpp:2180
        #41 0x000107c1b324 in QQuickPopupPrivate::itemDestroyed(QQuickItem*) qquickpopup.cpp:1063
        #42 0x000107c1bb8c in non-virtual thunk to QQuickPopupPrivate::itemDestroyed(QQuickItem*) qquickpopup.cpp
        #43 0x00010c117f70 in void QQuickItemPrivate::notifyChangeListeners<void (QQuickItemChangeListener::*)(QQuickItem*), QQuickItem*>(QFlags<QQuickItemPrivate::ChangeType>, void (QQuickItemChangeListener::*&&)(QQuickItem*), QQuickItem*&&) qquickitem_p.h:413
        #44 0x00010c113d7c in QQuickItem::~QQuickItem() qquickitem.cpp:2420
        #45 0x00010c50e3e8 in QQuickRootItem::~QQuickRootItem() qquickwindow_p.h:62
        #46 0x00010c4ed840 in QQuickRootItem::~QQuickRootItem() qquickwindow_p.h:62
        #47 0x00010c4ed86c in QQuickRootItem::~QQuickRootItem() qquickwindow_p.h:62
        #48 0x00010c4da1c0 in QQuickWindow::~QQuickWindow() qquickwindow.cpp:1197
        #49 0x00010c531f34 in QQuickWindowQmlImpl::~QQuickWindowQmlImpl() qquickwindowmodule.cpp:73
        #50 0x00010cf2d4f4 in QQmlPrivate::QQmlElement<QQuickWindowQmlImpl>::~QQmlElement() qqmlprivate.h:104
        #51 0x00010cf2d3e0 in QQmlPrivate::QQmlElement<QQuickWindowQmlImpl>::~QQmlElement() qqmlprivate.h:102
        #52 0x00010cf2d40c in QQmlPrivate::QQmlElement<QQuickWindowQmlImpl>::~QQmlElement() qqmlprivate.h:102
        #53 0x00010472efa8 in QScopedPointerDeleter<QObject>::cleanup(QObject*) qscopedpointer.h:24
        #54 0x00010472eefc in QScopedPointer<QObject, QScopedPointerDeleter<QObject>>::~QScopedPointer() qscopedpointer.h:81
        #55 0x00010466f0e8 in QScopedPointer<QObject, QScopedPointerDeleter<QObject>>::~QScopedPointer() qscopedpointer.h:79
        #56 0x00010471246c in QQuickVisualTestUtils::QQuickApplicationHelper::~QQuickApplicationHelper() visualtestutils_p.h:192
        #57 0x00010468ff88 in QQuickVisualTestUtils::QQuickApplicationHelper::~QQuickApplicationHelper() visualtestutils_p.h:192
        #58 0x0001046a953c in tst_QQuickPopup::fadeDimmer() tst_qquickpopup.cpp:2635
        [...]

Amends ef8bde8.

Pick-to: 6.9 6.8
Change-Id: Ie5c49b7d9ecd3c74f822590d296062b516563391
Reviewed-by: Volker Hilsheimer <[email protected]>
(cherry picked from commit f8742ca)
Reviewed-by: Qt Cherry-pick Bot <[email protected]>
qtprojectorg pushed a commit that referenced this pull request Sep 12, 2025
Use dimmer as a context object rather than the test itself, which
outlives it.

The backtrace was:

    FAIL!  : tst_QQuickPopup::Basic::fadeDimmer(modal) The computed value is expected to be greater than the baseline, but is not
       Computed (opacityChangeCount): 2
       Baseline (2)                 : 2
       Loc: [/Users/mitch/dev/qt-dev2/qtdeclarative/tests/auto/quickcontrols/qquickpopup/tst_qquickpopup.cpp(2629)]
    =================================================================
    ==68826==ERROR: AddressSanitizer: stack-use-after-scope on address 0x00016b7f7140 at pc 0x000104743c68 bp 0x00016b7ecfd0 sp 0x00016b7ecfc8
    READ of size 4 at 0x00016b7f7140 thread T0
        #0 0x000104743c64 in tst_QQuickPopup::fadeDimmer()::$_0::operator()() const tst_qquickpopup.cpp:2625
        #1 0x000104743bc0 in QtPrivate::FunctorCall<std::__1::integer_sequence<unsigned long>, QtPrivate::List<>, void, tst_QQuickPopup::fadeDimmer()::$_0>::call(tst_QQuickPopup::fadeDimmer()::$_0&, void**)::'lambda'()::operator()() const qobjectdefs_impl.h:116
        #2 0x000104743b64 in void QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::__1::integer_sequence<unsigned long>, QtPrivate::List<>, void, tst_QQuickPopup::fadeDimmer()::$_0>::call(tst_QQuickPopup::fadeDimmer()::$_0&, void**)::'lambda'()>(void**, QtPrivate::FunctorCall<std::__1::integer_sequence<unsigned long>, QtPrivate::List<>, void, tst_QQuickPopup::fadeDimmer()::$_0>::call(tst_QQuickPopup::fadeDimmer()::$_0&, void**)::'lambda'()&&) qobjectdefs_impl.h:65
        #3 0x000104743ab4 in QtPrivate::FunctorCall<std::__1::integer_sequence<unsigned long>, QtPrivate::List<>, void, tst_QQuickPopup::fadeDimmer()::$_0>::call(tst_QQuickPopup::fadeDimmer()::$_0&, void**) qobjectdefs_impl.h:115
        #4 0x000104743930 in void QtPrivate::FunctorCallable<tst_QQuickPopup::fadeDimmer()::$_0>::call<QtPrivate::List<>, void>(tst_QQuickPopup::fadeDimmer()::$_0&, void*, void**) qobjectdefs_impl.h:337
        #5 0x000104743848 in QtPrivate::QCallableObject<tst_QQuickPopup::fadeDimmer()::$_0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) qobjectdefs_impl.h:547
        #6 0x00011694273c in QtPrivate::QSlotObjectBase::call(QObject*, void**) qobjectdefs_impl.h:461
        #7 0x000116e49454 in void doActivate<false>(QObject*, int, void**) qobject.cpp:4284
        #8 0x000116e467a0 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) qobject.cpp:4344
        #9 0x00010c1462d4 in QQuickItem::opacityChanged() moc_qquickitem.cpp:1019
        #10 0x00010c1461c8 in QQuickItem::setOpacity(double) qquickitem.cpp:6517
        #11 0x00010c168638 in QQuickItem::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) moc_qquickitem.cpp:850
        #12 0x000113847100 in QQmlPropertyData::writeProperty(QObject*, void*, QFlags<QQmlPropertyData::WriteFlag>) const qqmlpropertydata_p.h:413
        #13 0x000113c33468 in QQmlPropertyPrivate::write(QObject*, QQmlPropertyData const&, QVariant const&, QQmlRefPointer<QQmlContextData> const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1668
        #14 0x000113c32638 in QQmlPropertyPrivate::writeValueProperty(QObject*, QQmlPropertyData const&, QQmlPropertyData const&, QVariant const&, QQmlRefPointer<QQmlContextData> const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1326
        #15 0x000113c32390 in QQmlPropertyPrivate::writeValueProperty(QVariant const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1270
        #16 0x000113c391b4 in QQmlPropertyPrivate::write(QQmlProperty const&, QVariant const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1947
        #17 0x00010c9949ac in QQuickAnimationPropertyUpdater::setValue(double) qquickanimation.cpp:2740
        #18 0x00010c992444 in QQuickBulkValueAnimator::updateCurrentTime(int) qquickanimation.cpp:2069
        #19 0x000114345428 in QAbstractAnimationJob::setCurrentTime(int) qabstractanimationjob.cpp:481
        #20 0x000114349c3c in QAbstractAnimationJob::setState(QAbstractAnimationJob::State) qabstractanimationjob.cpp:367
        #21 0x00011434bc34 in QAbstractAnimationJob::start() qabstractanimationjob.cpp:514
        #22 0x00010c9ff568 in QQuickBehavior::write(QVariant const&) qquickbehavior.cpp:419
        #23 0x00010c9ff88c in non-virtual thunk to QQuickBehavior::write(QVariant const&) qquickbehavior.cpp
        #24 0x000113f53b7c in QQmlInterceptorMetaObject::doIntercept(QMetaObject::Call, int, void**) qqmlvmemetaobject.cpp:392
        #25 0x000113f532e4 in QQmlInterceptorMetaObject::intercept(QMetaObject::Call, int, void**) qqmlvmemetaobject_p.h:153
        #26 0x000113f59788 in QQmlVMEMetaObject::metaCall(QObject*, QMetaObject::Call, int, void**) qqmlvmemetaobject.cpp:750
        #27 0x0001138474d0 in void QQmlPropertyData::doMetacall<(QMetaObject::Call)2>(QObject*, int, void**) const qqmlpropertydata_p.h:395
        #28 0x000113847128 in QQmlPropertyData::writeProperty(QObject*, void*, QFlags<QQmlPropertyData::WriteFlag>) const qqmlpropertydata_p.h:415
        #29 0x000113c33468 in QQmlPropertyPrivate::write(QObject*, QQmlPropertyData const&, QVariant const&, QQmlRefPointer<QQmlContextData> const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1668
        #30 0x000113c32638 in QQmlPropertyPrivate::writeValueProperty(QObject*, QQmlPropertyData const&, QQmlPropertyData const&, QVariant const&, QQmlRefPointer<QQmlContextData> const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1326
        #31 0x000113c32390 in QQmlPropertyPrivate::writeValueProperty(QVariant const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1270
        #32 0x000113c391b4 in QQmlPropertyPrivate::write(QQmlProperty const&, QVariant const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1947
        #33 0x000113c38f84 in QQmlProperty::write(QVariant const&) const qqmlproperty.cpp:1863
        #34 0x000113c39358 in QQmlProperty::write(QObject*, QString const&, QVariant const&) qqmlproperty.cpp:1880
        #35 0x000107c1db04 in QQuickPopupPrivate::hideDimmer() qquickpopup.cpp:1290
        #36 0x000107c16a68 in QQuickPopupPrivate::prepareExitTransition() qquickpopup.cpp:821
        #37 0x000107c1e038 in QQuickPopupTransitionManager::transitionExit() qquickpopup.cpp:1326
        #38 0x000107c23fd4 in QQuickPopup::setVisible(bool) qquickpopup.cpp:2496
        #39 0x000107c104d8 in QQuickPopup::close() qquickpopup.cpp:1408
        #40 0x000107c1ba80 in QQuickPopup::setParentItem(QQuickItem*) qquickpopup.cpp:2180
        #41 0x000107c1b324 in QQuickPopupPrivate::itemDestroyed(QQuickItem*) qquickpopup.cpp:1063
        #42 0x000107c1bb8c in non-virtual thunk to QQuickPopupPrivate::itemDestroyed(QQuickItem*) qquickpopup.cpp
        #43 0x00010c117f70 in void QQuickItemPrivate::notifyChangeListeners<void (QQuickItemChangeListener::*)(QQuickItem*), QQuickItem*>(QFlags<QQuickItemPrivate::ChangeType>, void (QQuickItemChangeListener::*&&)(QQuickItem*), QQuickItem*&&) qquickitem_p.h:413
        #44 0x00010c113d7c in QQuickItem::~QQuickItem() qquickitem.cpp:2420
        #45 0x00010c50e3e8 in QQuickRootItem::~QQuickRootItem() qquickwindow_p.h:62
        #46 0x00010c4ed840 in QQuickRootItem::~QQuickRootItem() qquickwindow_p.h:62
        #47 0x00010c4ed86c in QQuickRootItem::~QQuickRootItem() qquickwindow_p.h:62
        #48 0x00010c4da1c0 in QQuickWindow::~QQuickWindow() qquickwindow.cpp:1197
        #49 0x00010c531f34 in QQuickWindowQmlImpl::~QQuickWindowQmlImpl() qquickwindowmodule.cpp:73
        #50 0x00010cf2d4f4 in QQmlPrivate::QQmlElement<QQuickWindowQmlImpl>::~QQmlElement() qqmlprivate.h:104
        #51 0x00010cf2d3e0 in QQmlPrivate::QQmlElement<QQuickWindowQmlImpl>::~QQmlElement() qqmlprivate.h:102
        #52 0x00010cf2d40c in QQmlPrivate::QQmlElement<QQuickWindowQmlImpl>::~QQmlElement() qqmlprivate.h:102
        #53 0x00010472efa8 in QScopedPointerDeleter<QObject>::cleanup(QObject*) qscopedpointer.h:24
        #54 0x00010472eefc in QScopedPointer<QObject, QScopedPointerDeleter<QObject>>::~QScopedPointer() qscopedpointer.h:81
        #55 0x00010466f0e8 in QScopedPointer<QObject, QScopedPointerDeleter<QObject>>::~QScopedPointer() qscopedpointer.h:79
        #56 0x00010471246c in QQuickVisualTestUtils::QQuickApplicationHelper::~QQuickApplicationHelper() visualtestutils_p.h:192
        #57 0x00010468ff88 in QQuickVisualTestUtils::QQuickApplicationHelper::~QQuickApplicationHelper() visualtestutils_p.h:192
        #58 0x0001046a953c in tst_QQuickPopup::fadeDimmer() tst_qquickpopup.cpp:2635
        [...]

Amends ef8bde8.

Pick-to: 6.8
Change-Id: Ie5c49b7d9ecd3c74f822590d296062b516563391
Reviewed-by: Volker Hilsheimer <[email protected]>
(cherry picked from commit f8742ca)
Reviewed-by: Qt Cherry-pick Bot <[email protected]>
(cherry picked from commit cc726a4)
ulfhermannqt and others added 25 commits November 7, 2025 14:13
The event replay service can funnel input events recorded by the QML
profiler service back into the program. This way we can re-create the
exact behavior of a previous execution, including user input.

Task-number: QTBUG-141569
Change-Id: I069cf546f6c62b3abb7637fb064ebb1b3158129f
Reviewed-by: Sami Shalayel <[email protected]>
Reviewed-by: Fabian Kosmale <[email protected]>
These internal APIs have function documentation but are missing
class documentation. Adding an internal class documentation fixes
QDoc warnings.

Task-number: QTBUG-141697
Change-Id: Iecb289d39e34ddaa964fbe0a1404830cd2269caa
Reviewed-by: Shawn Rutledge <[email protected]>
Reviewed-by: Paul Wicking <[email protected]>
childContexts() returns the immediate child contexts.
findObjectRecursively() does the equivalent of objectForName() on all
child contexts recursively, returning the first non-null one.
findObjectsRecursively() does the same but returns the first non-null
result. We use BFS since that should return "closer" results when
iterating many contexts.

Fixes: QTBUG-140389
Change-Id: Ic34b5f4916768c0a0b8ed0e615d6f73c0aa5d06b
Reviewed-by: Volker Hilsheimer <[email protected]>
Pick-to: 6.10
Task-number: QTBUG-116296
Change-Id: Ic408673f79e12708c1594577cdeb37898caf2cb6
Reviewed-by: Fabian Kosmale <[email protected]>
Reviewed-by: Mitch Curtis <[email protected]>
Give most things default significance, except for qjsnumbercoercion.cpp
which only contains documentation and qv4compileddata.cpp which gets
flagged as critical for being a data-parser. That's somewhat debatable,
given that we also excepect qmlc files to be as trustworthy as qml
files, but while that is not explicitly stated anywhere we might want to
err on the side of caution.

Pick-to: 6.10 6.8
Task-number: QTBUG-136194
QUIP: 23
Change-Id: I2987cea2453dcc3b828dc4ecf0ad22fdfd0d1000
Reviewed-by: Olivier De Cannière <[email protected]>
Reviewed-by: Ulf Hermann <[email protected]>
The client definitions should provide the same event types as the
service definitions.

Adapt the code for reading and writing the events from Qt Creator.

Change-Id: Ib714304a5b56f7d1bd9c1f53656554b9705f630b
Reviewed-by: Sami Shalayel <[email protected]>
Reviewed-by: Ulf Hermann <[email protected]>
Reviewed-by: Antti Määttä <[email protected]>
Change-Id: Ib4ad28bbe95d27a6413df7a827830b5a213cdc4f
Reviewed-by: Qt Submodule Update Bot <[email protected]>
Also remove unused qmake files.

Pick-to: 6.8 6.10
Change-Id: I3a29e1b40361d852b4a87c748e8838b99fbd8805
Reviewed-by: Oliver Eftevaag <[email protected]>
Pick-to: 6.8 6.10
Change-Id: Iabfea6ceddb85a58b24180e09c20980b383e5fb5
Reviewed-by: Oliver Eftevaag <[email protected]>
This allows us to test setting icon.color to "transparent".

Pick-to: 6.8 6.10
Change-Id: I5b4523a8c4d45de3455302cf582dd33a23399ae3
Reviewed-by: Oliver Eftevaag <[email protected]>
Pick-to: 6.8 6.10
Change-Id: Ia9a58cfe033b4243bb75c1250b75c8080ad7042d
Reviewed-by: Oliver Eftevaag <[email protected]>
Qt 5.15 for VxWorks had JIT and this change brings back this feature.

Task-number: QTBUG-133449
Pick-to: 6.8 6.10
Change-Id: I0ce487ca01e5578f47fdb5cddac9ea4e5804b857
Reviewed-by: Ulf Hermann <[email protected]>
Change-Id: I7f236b614b3f84b37a9954389cd39ee2c5f621aa
Reviewed-by: Jerome Pasion <[email protected]>
Holding them in a local pointer makes it look like they leak. In actual
fact they are "owned" by the QVariant and assigned to a property later.

Also, check for model earlier. Apparently it can be nullptr if we're
dealing with a translation binding. In that case we don't hit the code
path that evaluates script bindings and therefore won't crash or leak.
However, the return statement after creating the QVariant is confusing
when trying to understand the ownership structure.

Coverity-Id: 897095
Coverity-Id: 897097
Change-Id: I770632d7e8aba7803ffe36363a6f9665873e3e61
Reviewed-by: Fabian Kosmale <[email protected]>
Since we early-return in a number of places, the condition needs to be
checked first. Also, remove the dead code that tries to implement
dynamic properties in object literals.

Amends commits f839171 and
f47df45 which were mistaken in trying
to support this case.

Pick-to: 6.10 6.8
Fixes: QTBUG-141849
Change-Id: I34a6c47375b9e8fa1320259e3f335d304ce8e589
Reviewed-by: Fabian Kosmale <[email protected]>
Reviewed-by: Olivier De Cannière <[email protected]>
Pass localPos to deliverHoverEventRecursive, deliverHoverEventToItem and
sendHoverEvent, so that deliverHoverEventRecursive() can merely
transform from its own coordinate space to each child's space by calling
itemToParentTransform(). That doesn't require up-the-tree recursion like
mapFromScene() does.

Apply the same trick to QQuickWindowPrivate::findCursorItemAndHandler().

Apply the same trick to QQuickPointerHandler::parentContains(local, scene):
now QQuickPointerHandler::parentContains(QEventPoint) also calls that
with both local and scene positions, which it already has, so this
likely optimizes some use cases outside of the hover and cursor cases.
But to make that work, we need to apply the same trick to
QQuickDeliveryAgentPrivate::eventTargets() as well, and now it needs to
localize the QEventPoint before calling the predicate.

Usually, global position is QGuiApplicationPrivate::lastCursorPosition;
but when no mouse events occur, only touch events, lastCursorPosition
may remain offscreen. So we use the QEventPoint::globalPosition when
possible; so it's useful to pass globalPos along to each of these
hover functions, so that deliverHoverEventToItem() can construct the
QMouseEvent with it, and sendHoverEvent() can construct the QHoverEvent
with it.

Also amends f5140d6: that looked rather
CPU-intensive to call several mapping functions. The test is retained.

Task-number: QTBUG-134099
Task-number: QTBUG-140340
Change-Id: I2c520d430e58ec7c00ada2207541b2936c7ae596
Reviewed-by: Richard Moe Gustavsen <[email protected]>
Change-Id: I32d3fce877b97bb1b5ef80967c495477c40c0910
Reviewed-by: Qt Submodule Update Bot <[email protected]>
syncResultedInChanges is not used since 27d674e (v6.0.0-alpha1).

Change-Id: I13e413dd47b391c279d6fc8a15d23d728fef1e58
Reviewed-by: Andy Nichols <[email protected]>
This better reflects what it is and avoids naming conflicts with the
controls themselves.

Pick down to 6.9 (where QQuickContextMenu was introduced) to avoid
future cherry-pick conflicts.

Task-number: QTBUG-133556
Task-number: QTBUG-134903
Pick-to: 6.9 6.10
Change-Id: If0af26c5f16ee56cc909fcc66d1421109786343e
Reviewed-by: Oliver Eftevaag <[email protected]>
Change-Id: Ibc388a7db13bb3b0b12b6529d879d4a7e7fb98ec
Reviewed-by: Qt Submodule Update Bot <[email protected]>
Amends ddcafa0

Pick-to: 6.10
Fixes: QTBUG-141893
Change-Id: I509a58c14a7081d90917058b3952ef03bc855085
Reviewed-by: Joerg Bornemann <[email protected]>
Makes Qt configure error out with

   called with non-existent target "animations"

cmake errors.

Change-Id: Iefe85831ad4c3fad7bd8f0b062e4b587307e1b6e
Reviewed-by: Alexandru Croitor <[email protected]>
Reviewed-by: Even Oscar Andersen <[email protected]>
Our test won't generate Quick3D events because Quick3D is not available
when testing qtdeclarative.

Amends commit 25694b6.

Change-Id: I7045ff7bd5bb0e56d3110128f74188f40e56a12d
Reviewed-by: Fabian Kosmale <[email protected]>
Laying out text is somewhat expensive, which is why the geometryChange
function tries to determine whether or not it's necessary.

However, when growing the width of multi-line eliding text, we would
over-optimize, and stop relayouting, when there would have been more
space for text.

This worked for single line text, since then the widthExceeded flag
would always be set to true, when the natural text width exceeds the
layouts width. However, we don't always set that flag for multi-line
text, thus it's possible that we skip the relayout step every time we
increase the width of the Item.

Fixes: QTBUG-140875
Pick-to: 6.10 6.8
Change-Id: I1f7758bed2c52044d0179a83d4bf4a774f22e4e3
Reviewed-by: Bror Wetlesen Vedeld <[email protected]>
Reviewed-by: Santhosh Kumar <[email protected]>
Change-Id: I71ba63cdde7c8f3e18b89a1a4e35da30202fd8e4
Reviewed-by: Fabian Kosmale <[email protected]>
samishalayel and others added 30 commits December 4, 2025 21:01
Describe the option and how to set it via a setting file, a commandline
argument or a environment variable.

Task-number: QTBUG-142352
Change-Id: I37da4ebed65e4228aaed0973b8d98b43af9f53e0
Reviewed-by: Ulf Hermann <[email protected]>
It's wasteful to set off pointer space for all the possible
states that can be nested. Usually a state will not
use nested states at all. E.g the assignment
'button.pressed.spacing' would cause the 'pressed' state
to also set off space for all the states that can be nested
inside it, even if they are never used.

In addition, the current implementation would, by accident,
lazy create all the nested states while traversing up the
parent chain of states. And as it turns out, by just
storing the nested state flag inside the state, we don't
need to do any traveral at all.

This patch will make sure that we only allocate space for
nested states if we encounter that at least one of them
are being used, and store the nested state to avoid
unnecessary traversal.

Change-Id: Ied87f0c6b04057cb4c9f3e31f275a2d4b87c3efb
Reviewed-by: Doris Verria <[email protected]>
This patch will implement support for styling
TabBar and TabButton.

Change-Id: I31658cf6cb923a06efa0cc4b02275a26c1968577
Reviewed-by: Doris Verria <[email protected]>
This patch will implement support for styling
ProgressBar.

Change-Id: Ic6d48bbb61b068ff967289736236f2d21992dc0a
Reviewed-by: Doris Verria <[email protected]>
This patch will implement support for styling ScrollBar
and ScrollIndicator. It also includes ScrollView, since
otherwise, if we inherited the one from the Basic style,
it would also use the ScrollBars from the Basic style.

Change-Id: I8163824aec61ce3c84303b6add3fdb1b7701532e
Reviewed-by: Doris Verria <[email protected]>
Change-Id: I90337fc840fce07ab9346ebc04fc0eacf3594710
Reviewed-by: Qt Submodule Update Bot <[email protected]>
While qtsvg now supports ligatures of multiple characters the existing
code here does not yet. Fixing that is out of scope for this patch. It's
only meant to keep the code working the way it did before.

Pick-to: 6.10
Change-Id: Ie62d3b3d5764a6bcb3d75e6594a8729652c0dcf4
Reviewed-by: Ulf Hermann <[email protected]>
Reviewed-by: Eskil Abrahamsen Blomfeldt <[email protected]>
QSequentialIterable is deprecated.

Task-number: QTBUG-140181
Change-Id: I797c18fa5c319e5c1a0114448d98a38aad33ae04
Reviewed-by: Olivier De Cannière <[email protected]>
Keyboard navigation between the MenuBar, MenuBarItems, Menus and
MenuItems broke, when we introduced popup windows.

Since then, we've added various patches
(e.g. 2393c58) to gradually fix
key event handling.

Add a test, to verify that menubar navigation now works.

Task-number: QTBUG-121363
Pick-to: 6.8
Change-Id: I64d720a07fc300040ce1670082f9628befb73f5b
Reviewed-by: Richard Moe Gustavsen <[email protected]>
Add QT_WARNING_DISABLE_DEPRECATED around the newVariant() test function
to suppress deprecation warnings for QJSValue::isVariant() which was
deprecated in Qt 6.9.

The isVariant() method returns rather unexpected results and is only
true in very limited cases. While the test still validates the API
behavior, the deprecation warnings are suppressed to keep the build
clean.

Amends eaad950

Change-Id: I7b27375fa2c6f6a77aed43cfc4d752db5395824a
Reviewed-by: Ulf Hermann <[email protected]>
This path focuses on the actual expansion of Override Semantics
with regard to newly added virtual and override keywords.

Since Override Semantics is central to the way PropertyCache is
being populated, expanding it requires additional care.
To ensure smooth and reliable iteration, this patch isolates
data-flows: within this patch adding properties from MetaObject
stay "unaffected" by the expansion, as well as the paths adding
Methods and Signals from the IR.
This is done with the help of 3 things:
1. Separating logging logic from the Override logic
2. Extracting Override Semantics into it's own namespace
3. Adding a nob to control the set of rules

To facilitate and separate testing of the logging logic and
override semantics, the principle of dependency injection is
being used, allowing us to easily Fake handling of override
semantics, simplifying testing of PropertyCache::appendPropertyAttr

Logging logic (messages) is kept on the side of QQmlPropertyCache
mostly because this entity logically has more context to do proper
logging. Taking into account how the class name and name of the
property are handled, those are kept to be "requested on demand",
a.k.a. query them only in cases when the logging indeed needs to be
performed.

Multiple append* methods have been moved to the private section to
avoid invalidation of caches. See comment above QQmlPropertyCache.

As a workaround to enable unit-testing of some methods,
tst_qqmlpropertycache has been added as a friend class.

This patch updates tests/auto/quick/qquicklistview/data/negativeDisplayMargin.qml to remove an unintended override of ListView’s built-in count property. The test declared its own count property, which implicitly shadowed ListView.count. The newly introduced validation correctly flagged this conflict, so the test has been adjusted accordingly.

Change-Id: I809e58e421fa50f5ee7f21b31edbf926ad472736
Task-number: QTBUG-98320
Reviewed-by: Fabian Kosmale <[email protected]>
This amends 39ec01e.

On Android, we need to ensure implicit imports are known
to the tools. When adding support for the blur effect, we
also added an implicit dependency on MultiEffect, but since
no one told the deployment tool, we would get a test failure
when loading files.

Fixes: QTBUG-142472
Change-Id: Ic2f91c9fce94a90ca05314827edb77b7f9cdec4a
Reviewed-by: Eirik Aavitsland <[email protected]>
It now stores one additional string relative to before, namely the class
def's content hash. And the header has increased by 1 to store that
string's index into the string table.

Also, keep handling revision 13 temporarily to allow for a smoother
transition and remove that version asap.

Task-number: QTBUG-142186
Change-Id: I2b190f3a4b6bdd9cd95ac00b65359957860c8187
Reviewed-by: Fabian Kosmale <[email protected]>
Change-Id: I2a985ab1900afb8c027405fb0ec76c250c7535e0
Reviewed-by: Mitch Curtis <[email protected]>
Use valueAsAbsolutePathlist instead of duplicating code in
buildPathsForFileUrl().

Change-Id: Ia2db7356efe8401178f28b55f72d3c113dbbe6f3
Reviewed-by: Fabian Kosmale <[email protected]>
The setup part is mainly meant for qmlls client developers, so mark it
as such. Add the download links to the standalone qmlls, in addition to
qmlls's location inside of qt. Also document that build directories can
be passed via an LSP extension, to support multiple workspaces.

Remove the parts about import paths and documentation directories, those
are handled by CMake's .qmlls.build.ini and can lead to weird behaviors
when set incorrectly.

Change-Id: I59496d20a9d02504636af6374818260c1e5f622d
Reviewed-by: Leena Miettinen <[email protected]>
Reviewed-by: Ulf Hermann <[email protected]>
It gets added to the json output of moc for every object. Include it in
the object's qmltypes representation too and add it to the corresponding
qqmljsscope when parsing them.

Task-number: QTBUG-142186
Change-Id: Id551a4edb1284018dee8d9afbe3b7189660478b8
Reviewed-by: Sami Shalayel <[email protected]>
The ToolBar missed a binding to spacing.

A ToolBar doesn't actually layout its items, the
application is responsible for that. Still, it might
want to query the spacing set from the style for
doing the layout.

Change-Id: I1613ba519e8edaeb58fe2b4cc6f7e5599dd02dff
Reviewed-by: Doris Verria <[email protected]>
A Qt Quick Control will use StyleKitControl.text.color as its
text color. But as it stood, it was not initialized to anything
in the FallbackStyle. The result was that all controls got a black
text color, regardless of what was set in the theme palette. It
would also not respect any palette overrides done from the app.

This patch will make sure that we, by default, bind text.color
for the various control types to the matching color in the
Qt Quick Control's palette. This color will, unless overriden by
the app, be initialized to the color set by the theme.

Change-Id: I6d4f67c81c57c9a30940a720816fa4ed2675b8bd
Reviewed-by: Doris Verria <[email protected]>
Change-Id: If1285165aa28fea401bbff061fcdfd4563bce334
Reviewed-by: Richard Moe Gustavsen <[email protected]>
Change-Id: I9cc429c5a5e229983cb68648df239260903a0af4
Reviewed-by: Richard Moe Gustavsen <[email protected]>
Fallback property lookups are created for completely dynamic
metaobjects. Anything about them may change between any two calls.

Pick-to: 6.10 6.8 6.5
Fixes: QTBUG-142331
Change-Id: Ib732c37a6f27ab8105bea0eeae000af7eb9c36d7
Reviewed-by: Sami Shalayel <[email protected]>
We don't need to repeatedly query the metaobject for its properties just
to determine the type. We can instead store the type right away. The
same holds for the "resettable" flag.

Task-number: QTBUG-142331
Change-Id: Ia8bb96587a344a2981e766e4bc2f13bcac7b4561
Reviewed-by: Sami Shalayel <[email protected]>
Fix the cleanup method to disconnect the signals in m_server, otherwise
m_server might use an outdated m_protocol in a later test case.

Change-Id: I4ae3b02bc0ed5cae585dc637c037e56bc4976adf
Reviewed-by: Ulf Hermann <[email protected]>
Don't mix build and import paths in qmlls. Use build paths for build
path operation (finding .qmlls.build.ini, eventually resource files,
CMake invocations, ...) and the import paths for imports (when linting
and constructing the DOM). Only use build paths as import paths as a
fallback, for projects running on Qt < 6.10.

It turns out that our tests were making heavy use of "build folders are
import paths". Modernize the tst_qmlls_modules tests to write a
.qmlls.build.ini file in the build folder which contains the import paths.

Also don't read the import path twice from the qmlls.build.ini file, and
read it from the QQmlCodeModelManager, not the QQmlCodeModel. Add a test
for importPathsForFileUrl() that used to duplicate the import paths.

Task-number: QTBUG-141707
Change-Id: I9eceb743bf37bc0f743954a0e7b1e5831f1989fa
Reviewed-by: Ulf Hermann <[email protected]>
We can't find resource files by iterating on the build folder without
causing QTBUG-141707, therefore implement reading resource files from
the .qmlls.build.ini files. A later commit will make CMake add the
resource file information in the generated .qmlls.build.ini files.

A separate commit will take care of usages of
resourceFilesFromBuildFolders() in the dom.

Keep a fallback for projects without resource files, for example
projects targeting qt < 6.11.

Task-number: QTBUG-141707
Change-Id: I279d193aa6a2849526c2f56c6a40e83492050f74
Reviewed-by: Ulf Hermann <[email protected]>
We can use the resource files from the .qmlls.build.ini also when
constructing the DOM, instead of iterating over the build and import
folders.

Fix and rename a test in tst_qmldomitem.

Task-number: QTBUG-141707
Change-Id: I9dcbd4cd307aba251e5de1d8c00c97b22dd87eb4
Reviewed-by: Ulf Hermann <[email protected]>
The native Windows (XP) styling code cannot render controls in the dark
color scheme. Our code detects that the application is running in dark
mode, and then explicitly creates a light palette that gets set on the
QQuickTheme singleton.

However, the palette that the style is actually using isn't always based
on the QQuickTheme palette, so we get inconsistent colors: the window
background is dark, a button font is light, while the button itself is
also light. This makes the UI unusable.

QGuiApp has no knowledge of Qt Quick's styling infrastructure, or of
QQuickTheme, so it cannot ask the style to "polish" the palette like we
do in widgets.

As a quick fix, override the global QGuiApplication palette with the
light palette.

[ChangeLog][Controls] The Windows native style will use a light palette
as the application global palette on Windows systems running in dark
mode. The style cannot render dark controls, and mixing a dark
application palette with some UI elements rendered in light mode using
the Control style results in inconsistent and unusable user interfaces.
For Dark mode UIs, use a style that supports dark mode, like the
FluentWinUI3 or Fusion styles.

Pick-to: 6.10 6.8
Change-Id: I5e279b88ba018baa03936624e07f48e8986eb1c6
Reviewed-by: Oliver Eftevaag <[email protected]>
Change-Id: I01bcdaea8a7014c3bd2f1c65b7d00a048700b91f
Reviewed-by: Doris Verria <[email protected]>
Set the same width, height, fillColor, strokeColor and strokeWidth
values for rectangle, star, ellipse and regular polygon shapes

Task-number: QTBUG-142450
Change-Id: I1920d22e80944ee4f220b927b4c1fcbbe2bb077a
Reviewed-by: Henning Gründl <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.