aboutsummaryrefslogtreecommitdiffstats
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* Fix the build with tracing enabledShawn Rutledge2022-06-111-4/+4
| | | | | | | | | | line() and column() are functions to be called, not variables. Task-number: QTBUG-102862 Change-Id: I0d447f1b3723efbcac7180c5253fd1ac2bd295ad Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> (cherry picked from commit 2b64cb61ba4993049efe7b6c2608c90a05fcc22c) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Use qtbase's new (private) QLocalTime for Date's UTC offsetsEdward Welbourne2022-06-101-133/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | This puts all use of system time_t functions in one place, instead of spreading it out. Its implementation improves on what was formerly done in V4 Date's offset calculations, while simplifying them and eliminating most of the #if-ery. Add four more test-cases to tst_qqmlqt::dateTimeConversion(), based on issues seen on MinGW, getting the time-zone wrong due to the failure of localtime_r(); MinGW can use localtime_s, as QLocalTime now does. Revised tst_qqmllocale::timeZoneUpdated()'s conditions. The QEXPECT_FAIL()s have stopped triggering, at least on Darwin, and the issue isn't that Date.timeZoneUpdated() wasn't working, it's that (now only on Android and Windows) we don't have a way to set the system time-zone referenced by the system functions that QLocalTime calls to get time-zone offsets. Setting the TZ environment variable only works on faithful POSIX implementations. Fixes: QTBUG-85149 Fixes: QTBUG-95993 Fixes: QTBUG-102971 Change-Id: I7bc983b9fd7167e3bab3db41dbc1c6f4a78665b9 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io> (cherry picked from commit dff02466a01caad885b6bd0759cf482342332306) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* QmlCompiler: Don't retrieve metaobjects for value and sequence typesUlf Hermann2022-06-101-8/+15
| | | | | | | | | | | | This is not valid QML, and the generated code crashes. Fixes: QTBUG-104092 Change-Id: If609acc2f2dc84a2e8f7c26d4d1b6c626f337cad Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Sami Shalayel <sami.shalayel@qt.io> Reviewed-by: Andrei Golubev <andrei.golubev@qt.io> (cherry picked from commit 2a4ec96ae00c7372b1827d3872990a47658d6ff5) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* qmltyperegistrar: Parse value type listsUlf Hermann2022-06-101-9/+22
| | | | | | | | | | | We need to generate isList properties for those, so that qmlcachegen and qmllint can handle them. Fixes: QTBUG-104129 Change-Id: I7e632279a605694c2fd5f583c8a6dcf9968eb634 Reviewed-by: Maximilian Goldstein <max.goldstein@qt.io> (cherry picked from commit 8e69558f2f7d44f83779f7e1f60f811dfab0c275) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Item views: fix error when accessing attached view from non-delegatesMitch Curtis2022-06-104-2/+38
| | | | | | | | | | | | | Ensure that the view is set on the relevant attached objects before QQmlComponent::completeCreate() is called, which would otherwise result in a TypeError because the view would be set too late. Fixes: QTBUG-104026 Task-number: QTBUG-98718 Change-Id: Ic65370bd4534e7452f2377ab4d60a74badf02079 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io> (cherry picked from commit dbd108a7997f129004bbed523db75d4aa9d0ab6c) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Allow subclasses of QQmlJSImportVisitor be used in QML importingAndrei Golubev2022-06-103-8/+44
| | | | | | | | | | | | Make it possible for different tools to supply specialized import visitor subclasses for import purposes. In particular, qmltc is interested in doing this as it could seed code generation specific information into the QQmlJSScope structure of imported documents Change-Id: I9087484a6e4dee09b4ff1bc291562a1896ea652e Reviewed-by: Ulf Hermann <ulf.hermann@qt.io> (cherry picked from commit 416df0858b506b5f3d16fb709b6f03b8b2d19eb6) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* qmltc: Move from QmlIR::Binding to QQmlJSMetaPropertyBindingAndrei Golubev2022-06-102-17/+18
| | | | | | | | | | | | | | | | This symbolizes the last piece of QmlIR dependency that qmltc has. We do still have some implicit dependencies on QmlIR, though, but that should go way once the remaining prototype code's logic is migrated to QmltcVisitor, QQmlJSScope and friends. This, however, is not attempted here as the patch itself is rather large In the process of switching to QQmlJSMetaPropertyBinding, observe and fix issues in QmltcVisitor and surroundings Change-Id: I752b68a7f57baf354de16dc0bb466a3f693a4e49 Reviewed-by: Maximilian Goldstein <max.goldstein@qt.io> (cherry picked from commit bf7aaeda87d409253f8d114273cc71f4244973af) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* QQmlJSImportVisitor: make ctor-initialized member stand outAndrei Golubev2022-06-101-6/+6
| | | | | | | | | | Looking at this class without IDEs is slowly becoming a pure pain. Make it a little better by grouping "main" members together and moving them Change-Id: I3a4451a89d66ac0dbd3572dbae1cba9a628dbf60 Reviewed-by: Maximilian Goldstein <max.goldstein@qt.io> (cherry picked from commit be541df34b1f4fd0f8b1e42fea5f5c15660ec955) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* QQmlJSImportVisitor: rename parseLiteralOrScriptBinding()Andrei Golubev2022-06-102-17/+17
| | | | | | | | | It also handles translations for a while now, a generic name is better Change-Id: I469eb141d877e822a17a4c4e66a00039b4558442 Reviewed-by: Maximilian Goldstein <max.goldstein@qt.io> (cherry picked from commit f912d7654faf786e1f5cf5dea218c83e97b2cbcc) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* QmlCompiler: Fix script indices calculationAndrei Golubev2022-06-103-62/+99
| | | | | | | | | | | | | | | | | | | The logic is misbehaving on multiple occasions. For instance, same-named signal handlers in different scopes and script bindings inside array scopes were wrongly handled. Fix that by revising the mechanism of inner function computation As a drive by, fix parseLiteralOrScriptBinding() to distinguish translation bindings from script bindings (they are vitally different now) Extend the script calculation test in tst_qqmljsscope to cover the findings Change-Id: Ic4cf0a4539f0d714a416b61f4635eb6494e89922 Reviewed-by: Maximilian Goldstein <max.goldstein@qt.io> (cherry picked from commit 99178a947c0c73ce400d2dce1c7da2c1b624a634) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* iOS Style: Add some more colors to the palette and minor adjustmentsDoris Verria2022-06-096-27/+42
| | | | | | | Change-Id: Ie6a3eb4b59fb586ad5c48f25d5fe04fcab28bec9 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io> (cherry picked from commit 76ba0738bd346ed76b9bfa5fafb409f18a187e2b) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Canvas: Add support for specifying a size when saving to an imageAndy Shaw2022-06-052-7/+16
| | | | | | | | | | | | This will make it possible for the image to be scaled into the given size, subsequently if this is set then it will make the DPR for the image be 1.0. [ChangeLog][QtQuick][Canvas] Canvas.save() now takes an optional size argument, which sets the size of the image to save, and sets DPR=1. Change-Id: I25f2d65a528282a26f46ef7dd1c62894307360cc Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* QQuickTreeViewDelegate: toggle expanded on pressRichard Moe Gustavsen2022-06-041-1/+1
| | | | | | | | | | | | | When TreeView is interactive, it should expand tree nodes on mouse release (to not interfere with flicking). Otherwise, if interactive is false, it should expand already on mouse press (equal to how e.g Widgets work). The current if-test that implemented this logic was broken, and would fail when TreeView was not interactive. Change-Id: I801a694b2dfd03875893bb2bda5c8ef3883dec75 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* QQuickTreeView: implement support for selecting cellsRichard Moe Gustavsen2022-06-046-6/+82
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Selecting cells in a table is quite different from selecting cells in a tree. The reason is that in a table, all model items share the same model parent. And ItemSelectionModel is optimized for this case, meaning that you can select an area of cells by simply specifying the top-left index, and the bottom-right index, as long as the cells in-between all have the same parent. A tree is not structured this way. Instead it's structured as a hierarchy of parent-child relationships, where the requirement that all model items should have the same parent obviously will not hold. Because of this, the implementation in TreeView that lets the user select cells, needs to be quite different from the optimized version in TableView. Instead, it basically needs to divide the selected area into individual rows, and sometimes indices, that can be selected, or deselected, one-by-one. This patch overrides the 'updateSelection()' function for QQuickTreeView, and rewrites the logic to take all this into account. This will make selecting cells work for TreeView. Change-Id: I2157efcd0e83b5a0342f6af4018323b64d31f6f3 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* QJSEngine: optimize isInterrupted handlingMarc Mutz2022-06-044-10/+10
| | | | | | | | | | | The isInterrupted flag is just that: a flag, so it doesn't require acquire/release semantics when loading/storing. Use relaxed loads and stores instead. Change-Id: I6d733a6bebcfc7f2b786265fc28f9ba7e25bb1c7 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* DomUniverse: optimize counter handling in guaranteeUniverse()Marc Mutz2022-06-041-3/+5
| | | | | | | | | | | | | | | Atomic counters are the prime examples for when relaxed atomic loads suffice, so don't use the fully-ordered pre-increment operator, but fetch_add(1, relaxed). Add Q_CONSTINIT and wrap in a lambda as a drive-by. The Q_CONSTINIT will be in dev only; it doesn't exist in 6.3. Pick-to: 6.3 6.2 Change-Id: I0e40bf68ba61e4cfd4094254466e41ae5d659b02 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Fawzi Mohamed <fawzi.mohamed@qt.io>
* QQuickTableView: fix deprecated [=] capture of *thisMarc Mutz2022-06-041-2/+2
| | | | | | | | | | | | | | Reach *this through d->q_func() instead, so it doesn't need to be captured. Amends de1672713ae413b563eefec37d1aad155d78a1f8. An alternative would be to use [&], but the function is long and I was too lazy to review whether capture-by-reference would have the same effect as capture-by-value. Change-Id: If595e9b5c9c64e5a807dc999c3f0c228ff9f2cce Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* QQmlJS: Import: fix UB (uninitialized read)Marc Mutz2022-06-041-2/+2
| | | | | | | | | | | | | | | Found by UBSAN: qqmljsimporter_p.h:122:12: runtime error: load of value 4, which is not a valid value for type 'bool' qqmljsimporter.cpp:412:20: runtime error: load of value 4, which is not a valid value for type 'bool' Fix by explicitly initializing the bools in Import. This is what adjacent classes do, and in line what the users apparently expect. Amends 687609f2f3a98ade4b8e074615c3d1db1228fce0. Change-Id: I143be1a8d239bbe8c6f00be554b5b678238de91f Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* iOS Style: Add ScrollBar controlDoris Verria2022-06-042-0/+86
| | | | | | | | | Use the same assets as for the scroll indicator, as there is typically no scrollbar on iOS, but we do support adding scrollbars to ScrollView in our controls. Change-Id: Icdf426d394548ac617b202ceed063a78f41a0225 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* QQuickTreeViewDelegate: remove selection on pointer clickRichard Moe Gustavsen2022-06-041-2/+8
| | | | | | | | | Removing the selection after a pointer click is normally done by TableView. But since TreeViewDelegate accepts mouse events, it needs to do this explicitly. Change-Id: Id0d6879f5b0e014aa05f50487f89dd0a08bb21f5 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* QQuickTableView: document the importance of using an ItemSelectionModelRichard Moe Gustavsen2022-06-041-1/+18
| | | | | | | | Clarify that you need to assign an ItemSelectionModel to TableView in order for other parts of the API to work as expected. Change-Id: Ib0ded94ef157be13cf3ab022aadba9f2a67f9602 Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
* QSGBatchRenderer: look for ShaderManager by type only, ignore nameMarc Mutz2022-06-041-1/+1
| | | | | | | | | | | | | | | There's only ever one of them, and accessing objectName() from a different than the owning thread is UB (data race). The default-constructed QString() is needed, cf. QTBUG-103986. This is a hotfix for QTBUG-102403, which ran afoul of the guards added in qtbase/3f32dcd1ddcbe04c77ccd83e2eaa566d7212e732 to fix QTBUG-99775. Task-number: QTBUG-102403 Pick-to: 6.3 6.3.1 6.2 Change-Id: Idf07b1119ec393e7fd179e8b545cfeb70f5916ec Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* QQuickTableView: don't scroll when tapping on a cellRichard Moe Gustavsen2022-06-031-1/+0
| | | | | | | | | | | | There is no reason why tableview should scroll a cell to become completely visible when the user taps on it. This is convenient when navigating with keys, but not with mouse. If needed, the app can listen to currentIndex changes, and call postitionViewAtCell() explicitly. Change-Id: I5b34c87e2befe718d0f37b5993ecf30efd6a7f20 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* iOS Style: Add TreeViewDelegate controlDoris Verria2022-06-038-0/+109
| | | | | Change-Id: I4e0e8f4a0c0dd29a2dd0303f87127d9c91073584 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* Fix QQuickStackLayout::rearrange for newly added itemsJan Arve Sæther2022-06-032-9/+8
| | | | | | | | | | | | | | | | | | | | Removes redundant calls to ensureLayoutItemsUpdated() Add childItemsChanged(), which will keep count and currentIndex properties updated, and emitting the corresponding signals for those properties whenever children are added or removed. Notice that these two properties will be updated immediately (not until we get a updatePolish() call). Only size hints and rearranges might be scheduled later until a updatePolish() call. This also makes the implementation of updateLayoutItems() empty, basically because there is no shadow structure for holding the list of layout items in this layout, so to keep that list of layout items "updated" is therefore not needed. Change-Id: Ibf8232ea1ad41a3d96b25bd2ea6aab6b5018e3bb Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* QQuickItem: ignore double-clicks by default; remove allowDoubleClickShawn Rutledge2022-06-033-8/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Because Qt has a pattern that events arrive pre-accepted, most event-handling functions in QQuickItem call ignore(), and it's up to subclasses to override those functions to allow the event to remain accepted, if they choose to handle it. So it was odd that QQuickItem::mouseDoubleClickEvent() did not call ignore(). Pointer handlers don't handle MouseButtonDblClick events, so QQuickDeliveryAgent does not send those events to handlers. Since 0e3adb65b0e9c44fa6e202630ff57c907ecf0820 though, we disallowed delivery of double-click events to Items after any handler has already accepted the single point in a mouse event. This caused some inconsistencies; in fact the allowDoubleClick variable was getting thrashed a lot, making it hard to reason about the logic. Items that contained handlers behaved differently than items that did not. One scenario being fixed here was absurd: a parent Rectangle (which never handles pointer events on its own) got an implicit grab in deliverMatchingPointsToItem() and thus stole the grab from a handler (!), during delivery of a MouseButtonDblClick (!!), just because the event happened to remain accepted, even though no item or handler reacted to it directly. The Rectangle needs to ignore() the event to avoid that, just as all Items now do by default. Then it turns out that we don't need a stateful allowDoubleClick anymore: the logic is more consistent without it. Items can handle double-clicks, but they don't by default, as with any other pointer event. Pointer handlers don't handle MouseButtonDblClick because they detect double-clicks in their own way, and that's enforced by simply not sending those events to handlers. Passive grabs should be retained regardless of the interloper MouseButtonDblClick event: items that handle it cannot cancel a handler's passive grab. They can steal a handler's exclusive grab, but that should be prevented in other ways, such as ignoring the event so that there is no accidental implicit grab. Reverts 0e3adb65b0e9c44fa6e202630ff57c907ecf0820. DeliveryAgent no longer calls clearPassiveGrabbers() directly as QQuickWindow did then; and it also no longer delivers MouseButtonDblClick the same as a press event. QSinglePointEvent::isBeginEvent() returns false in that case, so deliverPressOrReleaseEvent() is not called. A couple of existing tests now need to avoid generating double-clicks, but they were not trying to test that anyway. New tests are added (test coverage of double-clicks has been unfortunately sparse so far). Pick-to: 6.3 Fixes: QTBUG-102625 Change-Id: If74baff68ffc46b8b403d37f4e10ddf6b159d40c Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Doris Verria <doris.verria@qt.io> Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* QQuickTableView: add new property 'selectionBehavior'Richard Moe Gustavsen2022-06-033-16/+88
| | | | | | | | | | | | | | | | This patch will add a 'selectionBehavior' property to TableView. It will let the developer specify if the user should be able to select individual cells, rows, columns, or if selections should be disabled. This is equal to the selectionBehavior enum in QAbstractItemView. [ChangeLog][Quick][TableView] A new property 'selectionBehavior' has been added that specifies if the user should be able to select rows, columns, or cells. Change-Id: Ia8855ae032bb02d278b284ed35049d9237523139 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* QmlCompiler: Don't crash when trying to resolve null list typesUlf Hermann2022-06-021-0/+3
| | | | | | | | | If the element type is unknown the list type is also unknown. This will happen if we cannot resolve the type. Fixes: QTBUG-103920 Change-Id: If1b05d99a1e64961981b5adb3974a51c11e776d2 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* qqmlsa: Make property pass check base and extension types as wellMaximilian Goldstein2022-06-023-26/+55
| | | | | | | | | | In many cases we need to also check base an extension types since we don't always have direct inheritance (i.e. very common with QtQuick.Controls) Change-Id: I66307b7d0081d49611a9e61847e4363d5819bf82 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* QQmlListCompositor: suppress GCC 12 -Warray-bounds warningsMarc Mutz2022-06-021-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Despite my best efforts in teaching GCC 12 to understand that groupCount is always <= MaxGroupCount, it continued to issue these warnings: In member function ‘void QQmlListCompositor::iterator::incrementIndexes(int, uint)’, inlined from ‘void QQmlListCompositor::iterator::incrementIndexes(int)’ at qtdeclarative/src/qmlmodels/qqmllistcompositor_p.h:138:65, inlined from ‘void QQmlListCompositor::move(Group, int, Group, int, int, Group, QVector<Remove>*, QVector<Insert>*)’ at qtdeclarative/src/qmlmodels/qqmllistcompositor.cpp:852:40: qtdeclarative/src/qmlmodels/qqmllistcompositor_p.h:336:20: error: array subscript 28 is above array bounds of ‘int [11]’ [-Werror=array-bounds] 336 | index[i] += difference; | ~~~~~~~^ qtdeclarative/src/qmlmodels/qqmllistcompositor_p.h: In member function ‘void QQmlListCompositor::move(Group, int, Group, int, int, Group, QVector<Remove>*, QVector<Insert>*)’: qtdeclarative/src/qmlmodels/qqmllistcompositor_p.h:154:13: note: while referencing ‘QQmlListCompositor::iterator::index’ 154 | int index[MaximumGroupCount] = { 0 }; | ^~~~~ In member function ‘void QQmlListCompositor::iterator::incrementIndexes(int, uint)’, inlined from ‘void QQmlListCompositor::iterator::incrementIndexes(int)’ at qtdeclarative/src/qmlmodels/qqmllistcompositor_p.h:138:65, inlined from ‘void QQmlListCompositor::move(Group, int, Group, int, int, Group, QVector<Remove>*, QVector<Insert>*)’ at qtdeclarative/src/qmlmodels/qqmllistcompositor.cpp:852:40: qtdeclarative/src/qmlmodels/qqmllistcompositor_p.h:336:20: error: array subscript 28 is above array bounds of ‘int [11]’ [-Werror=array-bounds] 336 | index[i] += difference; | ~~~~~~~^ qtdeclarative/src/qmlmodels/qqmllistcompositor_p.h: In member function ‘void QQmlListCompositor::move(Group, int, Group, int, int, Group, QVector<Remove>*, QVector<Insert>*)’: qtdeclarative/src/qmlmodels/qqmllistcompositor_p.h:154:13: note: while referencing ‘QQmlListCompositor::iterator::index’ 154 | int index[MaximumGroupCount] = { 0 }; | ^~~~~ cc1plus: all warnings being treated as errors Therefore, I see no other solution than to suppress the warning the hard way. Pick-to: 6.3 6.2 5.15 Fixes: QTBUG-103924 Change-Id: Ic46009daa35357c6e6bb0fd1c16d020e360b7525 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Set bindings on QQmlJSScope after AST traversalAndrei Golubev2022-06-022-50/+99
| | | | | | | | | | | | | | | | | | We can get into situations when binding creation is problematic due to the relevant scopes being yet unresolved. In particular, this happens when processing attached/group properties script bindings Avoid having this situation by postponing the actual binding setting until after the relavant scopes are resolved (mainly, the binding owner). However, do relevant AST order dependent operations beforehand to avoid accidental errors This commit amends 25098b7a4fdb8920874a817956f659e6393548d2 Fixes: QTBUG-103897 Change-Id: I671955dbe321d03e5f1ab9891cc79dc0a936deda Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* Inherit base type access semantics in QQmlJSScopesAndrei Golubev2022-06-021-0/+4
| | | | | | | | | | | Group scopes may be value types so they require access semantics different from a default value Ordinary scopes and attached scopes seem unaffected, only groups are thus covered with an extra logic Change-Id: Ia9012548a602ca7ca07296491d27a295f4455f91 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* Address extension types in qmltcAndrei Golubev2022-06-024-3/+124
| | | | | | | | | | | | | | | | | | | | | Whenever working with properties (reading, writing, aliasing, etc.) of the type that has extensions, prefer the same-named properties from extension objects over type-owned properties (this is the internal QML mechanism) To achieve that, we need to query the extension object: * for Q_GADGETs use a dummy model of assuming we can cast the object to the extension type and use that * for Q_OBJECTs use a qmlExtendedObject() with additional logic of figuring out which extension should be picked in each specific case Create QQmlProxyMetaObject via a custom dynamic meta object API for qmltc-compiled objects that are derived from base types with extensions Task-number: QTBUG-91956 Change-Id: I5e783768ae2abdb9dddf894de7e79960244352bd Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* Document that QML_EXTENDED properties are practically FINALAndrei Golubev2022-06-021-0/+2
| | | | | | | | | | | This is de-facto how it always was before ff0b9ec6bf817f741e3c9fefbfcd55592e9b2542. As we plan to revert back to the "original" behavior, document the FINALity of the properties so that users know how it behaves (and we could not be held responsible for this mess) Change-Id: I4afed215fd66875821b7ce8d824b81782388324b Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* FileDialog: make selectedFile writableMitch Curtis2022-06-0211-40/+213
| | | | | | | | | | | | This allows setting an initially selected file. [ChangeLog][QtQuickDialogs] FileDialog's selectedFile property can now be set to an initially selected file. Fixes: QTBUG-101975 Pick-to: 6.3 Change-Id: I399f9379e1ac54917edbc31f9029d5522a914340 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* QQmlChangeSet: don't leak nospace() from operator<<Mitch Curtis2022-06-021-4/+6
| | | | | | | | Save the state with QDebugStateSaver. Pick-to: 6.2 6.3 Change-Id: Ie25f92dd72e480f5976a4230409ebea29635ef8f Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* DialogButtonBox: test item deletion orderMitch Curtis2022-06-021-0/+7
| | | | | | | | | | Ensure that items declared before and after the control itself do not cause heap-use-after-frees due to deletion order. Task-number: QTBUG-100396 Pick-to: 6.2 6.3 Change-Id: I3989bf1b9fc64b4ec86f241de2cb8bcd05c2f89d Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* QtQuickTest: add API for checking for polish at window levelMitch Curtis2022-06-025-5/+83
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This adds a qIsPolishScheduled(QQuickWindow *) overload of qIsPolishScheduled(QQuickItem *) (added in 40d6072bc8a4df0fe1a16025fe30fe653463a446) and deprecates qWaitForItemPolished() (added in 7a3cad0619662b992154e075ec6b840bfc8a46a7) in favor of qWaitForPolish(), which has QQuickItem* and QQuickWindow* overloads. The existing functions that take QQuickItem are useful, but testing Qt Quick applications can be made even easier by allowing users to check if a window has any items that need to be polished. This information is already present (in QQuickWindowPrivate::itemsToPolish), so it's very efficient to check for. This is especially useful now that Qt Quick Layouts using polishing for their layouting, for example, as it's no longer necessary to find individual polishable items in complex hierarchies before proceeding to interact with child items. [ChangeLog][QtQuickTest][QQuickTest] Added QQuickTest::qIsPolishScheduled(QQuickWindow *) and QQuickTest::qWaitForPolish(QQuickWindow *) functions for verifying that updatePolish() was called on one or more items managed by a window. [ChangeLog][QtQuickTest][QQuickTest] Deprecated QQuickTest::qWaitForItemPolished(QQuickItem *). Use the new QQuickTest::qWaitForPolish(QQuickItem *) function instead. Fixes: QTBUG-93757 Change-Id: I95b6e051b3c9fd2fa93604f4d9ccda486bb29f9d Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* Allow retrieval of sequences from QJSValueUlf Hermann2022-06-026-452/+481
| | | | | | | | | | | | | | As we can store sequence types in QJSValue, we should be able to retrieve them, too. Move the declaration of the QV4::Sequence struct into a header to make it less of a hassle to identify sequences. Change-Id: I3e45bfe193c669107f90cd6c502765c0c9f60fb0 Reviewed-by: Andrei Golubev <andrei.golubev@qt.io> Reviewed-by: Sami Shalayel <sami.shalayel@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* qqmldebug.h: Wrap the QML debugging enabler into an unnamed namespaceUlf Hermann2022-06-022-3/+25
| | | | | | | | | | This way compilers will hopefully not complain about the use of global constructors anymore. It's clear now that we want a separate QQmlDebuggingEnabler for each CU. Change-Id: Ief8e748a87612c04a8ca9a8535f10d905675b918 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Marc Mutz <marc.mutz@qt.io>
* QV4::CompiledData: fix GCC 12 -Werror=uninitialized errorsMarc Mutz2022-06-021-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The non-default ctors tried to call m_data.set(), where m_data uninitialized. Says GCC 12: In member function ‘QSpecialIntegerAccessor<S, pos, width, T>& QSpecialIntegerAccessor<S, pos, width, T>::operator=(Type) [with S = QLittleEndianStorageType<unsigned int>; int pos = 0; int width = 5; T = unsigned int]’, inlined from ‘void QSpecialIntegerBitfieldUnion<S, Accessors>::set(typename A::Type) [with A = QSpecialIntegerAccessor<QLittleEndianStorageType<unsigned int>, 0, 5, unsigned int>; S = QLittleEndianStorageType<unsigned int>; Accessors = {QSpecialIntegerAccessor<QLittleEndianStorageType<unsigned int>, 0, 5, unsigned int>, QSpecialIntegerAccessor<QLittleEndianStorageType<unsigned int>, 5, 27, unsigned int>}]’ at qtbase/src/corelib/global/qendian_p.h:214:21, inlined from ‘QV4::CompiledData::RegExp::RegExp(quint32, quint32)’ at qtdeclarative/src/qml/common/qv4compileddata_p.h:187:31, inlined from ‘int QV4::Compiler::JSUnitGenerator::registerRegExp(QQmlJS::AST::RegExpLiteral*)’ at qtdeclarative/src/qml/compiler/qv4compiler.cpp:198:34: qtbase/src/corelib/global/qendian_p.h:179:40: error: ‘<unnamed>.QV4::CompiledData::RegExp::m_data.QSpecialIntegerBitfieldUnion<QLittleEndianStorageType<unsigned int>, QSpecialIntegerAccessor<QLittleEndianStorageType<unsigned int>, 0, 5, unsigned int>, QSpecialIntegerAccessor<QLittleEndianStorageType<unsigned int>, 5, 27, unsigned int> >::storage.QSpecialIntegerStorage<QLittleEndianStorageType<unsigned int> >::val’ is used uninitialized [-Werror=uninitialized] 179 | UnsignedType i = S::fromSpecial(storage->val); | ~~~~~~~~~~~~~~^~~~~~~~~~~~~~ qtdeclarative/src/qml/compiler/qv4compiler.cpp: In member function ‘int QV4::Compiler::JSUnitGenerator::registerRegExp(QQmlJS::AST::RegExpLiteral*)’: qtdeclarative/src/qml/compiler/qv4compiler.cpp:198:90: note: ‘<anonymous>’ declared here 198 | regexps.append(CompiledData::RegExp(flags, registerString(regexp->pattern.toString()))); | ^ Fix by calling the default ctor (which initialized m_data) before calling m_data.set(). Pick-to: 6.3 6.2 5.15 Task-number: QTBUG-103924 Change-Id: I44ff404e5509e24601893e539639f213defdc80d Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* Doc: QQuickTextInput: Mark all readonly properties as suchIvan Tkachenko2022-06-011-3/+20
| | | | | | Pick-to: 6.3 6.2 5.15 Change-Id: I5fa12286ac594bafff89a56358bdda4051733e05 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* iOS Style: Add StackView controlDoris Verria2022-06-012-0/+72
| | | | | Change-Id: I450c81c884a012aad8188912875ace3f160f1a1e Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* iOS Style: Add SwipeDelegate controlDoris Verria2022-06-012-0/+96
| | | | | Change-Id: Ice980682e8221f8a83754e2978e48010fbb0b8a3 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* iOS Style: Add CheckDelegate controlDoris Verria2022-06-012-0/+112
| | | | | Change-Id: I1d5b76b9c420302c1551622635842921ca047ae8 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* iOS Style: Add RadioDelegate controlDoris Verria2022-06-018-0/+112
| | | | | Change-Id: I573fe81d393debe0bf4ee139d3069a13e1c965c3 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* iOS Style: Add SwitchDelegate controlDoris Verria2022-06-012-0/+139
| | | | | Change-Id: Ie1eb22b99402c408fc0c16eeddd500020d889f0d Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Use the unified check for the DEPFILE supportAlexey Edelev2022-06-011-2/+2
| | | | | | | Task-number: QTBUG-99354 Change-Id: Ib87d3a3a1b234346f61c7d78efcb1b61a8e705e9 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Remove unused constant definitions for GL texture importLaszlo Agocs2022-06-011-252/+0
| | | | | | | | | Amends 1df2cf6bad7207f16ddca17344cc1324e50f287e Change-Id: I6fd6504bf42a37f8bed2d4d8f200ddfa657d6a33 Reviewed-by: JiDe Zhang <zhangjide@uniontech.com> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* Clean up overload docs in QQuickRenderTargetLaszlo Agocs2022-06-011-24/+92
| | | | | | | | Amends 1df2cf6bad7207f16ddca17344cc1324e50f287e Change-Id: Ica7142c5efa29f222a828bd672d60503f54f3822 Reviewed-by: JiDe Zhang <zhangjide@uniontech.com> Reviewed-by: Andy Nichols <andy.nichols@qt.io>