aboutsummaryrefslogtreecommitdiffstats
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
...
* Account for icon color being set to transparentMitch Curtis14 days2-5/+46
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In QQuickAbstractButtonPrivate::updateEffectiveIcon we need to resolve the icon's color so that QQuickIconLabel knows which of defaultIconColor and icon.color should win. In both QQuickAbstractButtonPrivate::updateEffectiveIcon and QQuickAction::setIcon, we need to unconditionally set the icon and be more strict about when we return early. This fixes the case where setting "transparent" as the icon color wouldn't result in the original image's colors being used, but would instead result in the style's default icon color: Button { text: "Original icon color" icon.source: "heart.svg" icon.color: "transparent" } Button { text: "Original icon color (action)" action: Action { icon.source: "heart.svg" icon.color: "transparent" } } Task-number: QTBUG-87459 Change-Id: Ic490e3b37a8174b8c034b84a1ad551a78088e44d Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* Fix QQuickIconLabel action icon color being overridden by style defaultMitch Curtis14 days74-279/+377
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Styles need a way to set the default icon color for controls. Until now, that was done like this: icon.color: "tomato" contentItem: IconLabel { icon: control.icon } This breaks the use case of e.g. an Action that sets its own icon.color, because the icon property of the control always takes precedence (see 146bc9517c56feda4eba34282d3cc53bd47b6267). This patch adds a defaultIconColor property to IconLabel, which allows styles to specify a color without overriding any potential action's icon: contentItem: IconLabel { icon: control.icon defaultIconColor: "tomato } If icon.color was explicitly set, it is used instead. This does mean that overriding the contentItem will result in the icon color being lost, but that is already the case for style customizations in general. All controls that set icon.color and using IconLabel to display their icon are affected and are therefore adapted: Button, CheckDelegate, DelayButton, ItemDelegate, MenuBarItem, MenuItem, RadioDelegate, RoundButton, SwipeDelegate, SwitchDelegate, TabButton, ToolButton. Add FlowPane to the shared folder of the baseline test and use it in the tests that we touch. This fixes two issues: - Using Pane as the background fixes text being invisible for some styles. - Using Flow provides the most space-efficient layouting of items now that we have more than would fit in the old layout. Task-number: QTBUG-87459 Change-Id: I455ce7202a46b7cfa7545650574e48ad72796675 Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
* macOS, TextField: update the focus frame radius for a TextFieldRichard Moe Gustavsen14 days1-1/+1
| | | | | | | | | | When running with Liquid Glass, a TextField/NSTextField have a more rounded appearance. As such, this patch will tweak the focus frame radius accordingly. Pick-to: 6.10 6.9 6.8 6.5 Change-Id: I7918e4de5ca71aea2b5c080e58341bb4fa53c147 Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
* quick/items: fix build when qreal is floatNick Shaforostov2025-11-172-4/+4
| | | | | | Pick-to: 6.10 6.8 Change-Id: Idc096a96c3c6895b09a97b6ef2d644d8b0454b60 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
* Add effectivelyClipsEventHandlingChildren; skip event delivery when irrelevantShawn Rutledge2025-11-177-25/+206
| | | | | | | | | | | | | | | If a QEventPoint is clearly outside an item _and_ the bounds of all its children, or is simply outside the bounds of an item that clips its children, we can stop recursion, for purposes of QPointerEvent delivery, finding which items/handlers are hovered, or which could control the cursor shape. effectivelyClipsEventHandlingChildren() is also recursive, but at least the result gets cached. Task-number: QTBUG-140340 Task-number: QTBUG-115179 Change-Id: I085e38964de6993fa82ad3bd1256868125fde090 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* qmlls: fix hover on import messageSami Shalayel2025-11-171-2/+2
| | | | | | | | | | | | | | The message is markdown, so actually use bullet points to show a list of import paths. Previously, the single newlines got removed by Markdown renderers (Markdown requires two newlines to render a newline) which makes the list hard to read because all import paths were on the same line. Amends 299c449d4a250790f74942727a2c053989d8fe26. Task-number: QTBUG-140915 Change-Id: I39fd4ddb653ba93bf92705788f51d378321015e4 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* qqmldebugserverfactory: use file-based includeSami Shalayel2025-11-171-4/+4
| | | | | | | Qt Code should use file based includes. Change-Id: I19a5b583c0df9c2c418c322ee1221afa1517f77b Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* qqmldebugserverfactory: add qFatal() on QApplication leakSami Shalayel2025-11-173-2/+20
| | | | | | | | | | | | It seems that the QML debugger framework cleanup does not happen correctly when QApplication is leaked. Instead of running into the asserts of QQmlDebugServerImpl::removeService and ~QObject (during destruction of QQuickProfilerAdapter), warn the user with qFatal() about the possible leak of QApplication. Task-number: QTBUG-139131 Change-Id: If0497b3d4de4a1dec1bf968760d9fa79eb24683e Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* qmllint: fix required property detection with aliasSami Shalayel2025-11-171-17/+14
| | | | | | | | | | | | | | | Iterate over all aliases that directly or indirectly points to the required property, and check whether it is in the root file scope. If it is in the root scope, than the required property can be satisfied by setting the alias, and we shouldn't warn about unsatisfied required properties int the QML component itself. Instead, we warn at the place where the QML component is instantiated if the alias is not set. Pick-to: 6.10 Task-number: QTBUG-141086 Change-Id: I9237d0afd2e427558ebc2b5cbc97beb5248ec6a3 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io> Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
* cmake: unify import paths for qmlls, qmllint, qmlimportscannerSami Shalayel2025-11-171-41/+38
| | | | | | | | | | | | | | | | | | | | | Use _qt_internal_collect_qml_import_paths() to collect import paths for qmlls, qmllint and qmlimportscanner. _qt_internal_collect_qml_import_paths was previously only used to collect import paths for qmlimportscanner. Adapt _qt_internal_collect_qml_import_paths to add the special qmllint import path, and remove the duplicate code for qmllint and qmlls's import path. Fixes QTBUG-141242 where the path of the QML module is not in the import path of qmlls when the QML module path is a subfolder of the build folder. Pick-to: 6.10 Fixes: QTBUG-141242 Fixes: QTBUG-141555 Change-Id: I9fa2cc091ca08be6df9da5d6cf4794c08d3dd0ce Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Doc: Make images readable in a dark theme in Positioning and AnchoringAlexei Cazacov2025-11-178-0/+0
| | | | | | | Task-number: QTBUG-141543 Pick-to: 6.10 Change-Id: I72690a203d429a033160cc52c40c815de22356a9 Reviewed-by: Mats Honkamaa <mats.honkamaa@qt.io>
* quicktemplates: fix build with -no-feature--quicktemplates2-containerNick Shaforostov2025-11-152-2/+17
| | | | | | Pick-to: 6.10 Change-Id: Ie2d73970be8ca81c1dc755a8684f8067c83f56bc Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* snippet: correct usage demo for SortFilterProxyModelWang Zichong2025-11-141-2/+2
| | | | | | | | | | The usage is incorrect with invalid QML syntax, this patch fixes the issue. Fixes: QTBUG-141913 Pick-to: 6.10 Change-Id: I39dd9141a7058a8948e40718d8d75821aea8e0f0 Reviewed-by: Santhosh Kumar <santhosh.kumar.selvaraj@qt.io>
* DialogButtonBox: add properties for setting a default buttonOliver Eftevaag2025-11-1429-4/+227
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Qt Quick Controls lacked the ability for setting a default button in a dialog button box. This is something that we support in QtWidgets, and it makes sense to allow dialogs with a DialogButtonBox set as the footer to decide if a particular button should be default, and have focus when the dialog is opened. With this patch, we're introducing two different ways for selecting a default button. The first is the usage of the DialogButtonBox::defaultButton property, which works like this: ``` DialogButtonBox { defaultButton: Button { text: qsTr("Ok") } Button { text: qsTr("Cancel") } } ``` In the snippet above, the Button that is set as default should both be highlighted, and be the sub focus item of the DialogButtonBox. However, since the standardButtons property can be used to dynamically create buttons on the fly, we also needed an alternative way for picking a default button. In cases where standardButtons is being used to create buttons in the DialogButtonBox, the new defaultStandardButton property can be used: ``` DialogButtonBox { standardButtons: DialogButtonBox.Yes | DialogButtonBox.No defaultStandardButton: DialogButtonBox.Yes } ``` Something worth noting, is that the DialogButtonBox's contentItem is typically a ListView. ListView have the ItemIsFocusScope flag set, meaning that we need to give focus to both the ListView, and the default Button. In addition, the FontDialog and ColorDialog will now make the Ok button default, and give it focus when the dialogs are opened. The FileDialog and FolderDialog will continue to give the ListView focus, since that's IMO more user friendly. The MessageDialog will need new API to take full advantage of this new feature, which will be introduced later. [ChangeLog][DialogButtonBox] The DialogButtonBox now has two new properties, defaultButton and defaultStandardButton. When one of these properties are being used, a button set as default will be highlighted and receive activeFocus whenever the DialogButtonBox gets focus. If a DialogButtonBox is assigned as a Dialog's footer, it will also get focus when the Dialog is opened. This means that a Dialog with a DialogButtonBox as its footer, will give focus to a default button when opened. If both of these properties are unset, the first button with the AcceptRole will get focus, but it will not be highlighted. Fixes: QTBUG-58246 Fixes: QTBUG-139352 Change-Id: Ic083410184dd63e0e790694f782a7a98c1dc8b6e Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* QQmlObjectCreator: Extract + refactor posthoc required property handlingFabian Kosmale2025-11-132-41/+47
| | | | | | | | | Move the code out of populateInstance to improve readability. Do not try to unify the three similarily shaped loops to keep a readable diff, and to avoid potential mistakes during refactoring. Change-Id: Ia85652c14f794ec04764904fe6f04bf662ac08c4 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* tableview: fix build with -no-feature-cursorNick Shaforostov2025-11-131-1/+3
| | | | | | | Pick-to: 6.10 Change-Id: I2667210311de7ee41db1d90fff71d4d4bb388ee2 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io> Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
* QQuickView::showView() return true if the platform is WaylandFrederic Lefebvre2025-11-131-0/+4
| | | | | | | | | | | | | | | | | QQuickView::showView() return true if the platform is Wayland, this is done before the position check. setPos and setFramePosition do not work properly on Wayland causing all tests that are calling showView to consistently fail due to this. If the platform used is Wayland, showView return true before the position check has been performed. Fix the following failing tests: tst_HoverHandler::changeCursor, tst_HoverHandler::deviceCursor,tst_HoverHandler::touchDrag tst_HoverHandler::window Change-Id: I18a4145643eb9cc76ce7fe55dd964904dcffa95e Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* Check for a null instance before unregisterTypes()Jacek Poplawski2025-11-131-1/+2
| | | | | | | | | | | Avoid crash when unloading invalid or partially loaded plugins Amends 97fe92bd8ee55f4b6a44a052925b643366734f1d Fixes: QTBUG-141911 Pick-to: 6.10 6.8 Change-Id: I3423c4c161cf499f84bbc0fa3bcdf4727a158562 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* JSRuntime: Don't immediately connect reference objectsOlivier De Cannière2025-11-133-47/+90
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The change in a7349e6433d092398d76cafa5408753f06892cd7 reduced the number of readbacks of reference objects by using connections to set the dirty state only when necessary. Establishing connections, however, comes at a cost and this introduced a regression in the delegates_item_childrenRect QmlBench benchmark. The mitigation introduced in this patch is to delay creating the connection. When a reference object is created, it does not read or create a connection but is simply marked as dirty. Only on a subsequent read from within a different statement than the reference object's creation's statement, does a connection get created. This keeps the benefit of reducing unnecessary reads on objects that are used multiple times while not spending too much on creating connections. This brings back the benchmark to its original level of performance. The referenceObjectChainReadsBackAsRequiredBasedOnParentSignals test was changed to expect 8 reads instead of 4. Since all the accesses are part of the same statement, no connection is ever created and more reads are required than before. The referenceObjectDoesNotFetchWithoutNotifyEventDateObject test is reformatted to separate the assignment from the reads. Otherwise no connection is ever created. The referenceObjectDoesNotLeakAConnectionToTheDestroyedSignalOnANotifyBindable test can be updated to expect 0 connections. With this change, we only connect if the reference object is read again from a different statement. Amends a7349e6433d092398d76cafa5408753f06892cd7 Fixes: QTBUG-140757 Pick-to: 6.10 Change-Id: I5d02ec6266c51fbbe5f2e01405081dd5a167a833 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* JSRuntime: Extract ReferenceObject::init lambdas into functionsOlivier De Cannière2025-11-132-64/+67
| | | | | | Pick-to: 6.10 Change-Id: I489b515388f9aba9250bfb05687331c92578ca57 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* Doc: Fix small typos in ReferenceObject's documentationOlivier De Cannière2025-11-132-7/+7
| | | | | Change-Id: I71ba63cdde7c8f3e18b89a1a4e35da30202fd8e4 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* QQuickText: re-layout eliding text that grows in widthOliver Eftevaag2025-11-121-2/+2
| | | | | | | | | | | | | | | | | | | | | 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 <bror.vedeld@qt.io> Reviewed-by: Santhosh Kumar <santhosh.kumar.selvaraj@qt.io>
* CMake: Fix defer call for directories with spacesAlexandru Croitor2025-11-121-1/+1
| | | | | | | | | Amends ddcafa0a51c65d86f6b5481f06fce5faeb75920d Pick-to: 6.10 Fixes: QTBUG-141893 Change-Id: I509a58c14a7081d90917058b3952ef03bc855085 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Context menus: rename control to editorMitch Curtis2025-11-1232-86/+86
| | | | | | | | | | | | | | 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 <oliver.eftevaag@qt.io>
* QSGThreadedRenderLoop: Drop dead codeKonstantin Ritt2025-11-121-17/+1
| | | | | | | syncResultedInChanges is not used since 27d674e9ec2 (v6.0.0-alpha1). Change-Id: I13e413dd47b391c279d6fc8a15d23d728fef1e58 Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* Reduce QTransform use in event delivery and cursor-finding functionsShawn Rutledge2025-11-116-60/+83
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 f5140d62082e9b06e0ca6c8e2175b5836286f52e: 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 <richard.gustavsen@qt.io>
* QmlCompiler: Fix rejection of dynamic properties in object literalsUlf Hermann2025-11-111-25/+10
| | | | | | | | | | | | | | | | 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 f839171eefbba670536262fa3b847d24bfdc627b and f47df45b4981d2d3eedfdbcf7574a7d2e2625627 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 <fabian.kosmale@qt.io> Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
* QmlModels: Clarify ownership of submodels stored in QVariantUlf Hermann2025-11-111-8/+7
| | | | | | | | | | | | | | | | 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 <fabian.kosmale@qt.io>
* Doc: Enable QML markup for inline code snippetsDavid Boddie2025-11-111-18/+18
| | | | | Change-Id: I7f236b614b3f84b37a9954389cd39ee2c5f621aa Reviewed-by: Jerome Pasion <jerome.pasion@qt.io>
* Add JIT to VxWorksKarim Pinter2025-11-114-6/+21
| | | | | | | | | 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 <ulf.hermann@qt.io>
* QmlDebug: Support QtQuick3D profiler eventsUlf Hermann2025-11-104-1/+51
| | | | | | | | | | | | 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 <sami.shalayel@qt.io> Reviewed-by: Ulf Hermann <ulf.hermann@qt.io> Reviewed-by: Antti Määttä <antti.maatta@qt.io>
* CRA review: mark qml/common subfolderFabian Kosmale2025-11-1015-0/+15
| | | | | | | | | | | | | | | | 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 <olivier.decanniere@qt.io> Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* QQuickSelectionRectanglePrivate: port away from 3-arg connectAhmad Samir2025-11-091-8/+13
| | | | | | | | Pick-to: 6.10 Task-number: QTBUG-116296 Change-Id: Ic408673f79e12708c1594577cdeb37898caf2cb6 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* QQmlContext: Add methods for querying childrenUlf Hermann2025-11-072-11/+105
| | | | | | | | | | | | | 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 <volker.hilsheimer@qt.io>
* Doc: Mark internal APIs with \internal commandJerome Pasion2025-11-0713-2/+81
| | | | | | | | | | | 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 <shawn.rutledge@qt.io> Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* Tooling: Add an event replay debug serviceUlf Hermann2025-11-079-1/+360
| | | | | | | | | | | 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 <sami.shalayel@qt.io> Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* QtQml: Try harder to find a propertyCache for destroy() and toString()Ulf Hermann2025-11-074-12/+17
| | | | | | | | | | | | | Those are conceptually part of the QObject property cache, even though they have no property data. So, if the object at hand does not have a property cache of itself (e.g. because its fully dynamic), look up the QObject one and use that. Fixes: QTBUG-141704 Pick-to: 6.10 6.8 6.5 Change-Id: Ia333ac8c29f3797fb4b3ff37863b7c01fae8b076 Reviewed-by: Sami Shalayel <sami.shalayel@qt.io> Reviewed-by: Joshua GPBeta <studiocghibli@gmail.com>
* Doc: Use explicit links instead of auto-linkingDavid Boddie2025-11-072-9/+10
| | | | | | | | | This ensures that QDoc will always link to the QML types page and not to the corresponding C++ classes overview. Change-Id: I60cd6475ecf87190101507e8508e5c9403a2ed90 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io> Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* Doc: Add documentation dependencies to make all QML types availableDavid Boddie2025-11-071-1/+3
| | | | | | | | | | To be able to list all QML types that inherit from Item, the Qt Quick documentation needs to depend on the modules that rely on Item and other QML types. Task-number: QTBUG-130152 Change-Id: I15bd63a4cffa1f1852b78bdd23b1f06c66ef468b Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
* Doc: Fix QDoc warnings for internal classes and functionsJerome Pasion2025-11-0715-16/+59
| | | | | | | | | | -Mark internal functions with \internal -Sometimes the solution is to have a \class command and marked internal -Fixed whitespace issues when the new marking introduced them Task-number: QTBUG-141665 Change-Id: I4f744aa94ca679da74b6c5e846e49a73346e2625 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* ScrollBar: ensure cleanup functions are called regardless of flickableMitch Curtis2025-11-071-6/+14
| | | | | | | | | | | | Otherwise the old scroll bar can be visible in certain situations. Extends 908aa77d16e00f2bccc0ddae0f8b61955c56a6a1. Amends bb2a6c61777e2500fa00710c8bb752fa7b99f079. Fixes: QTBUG-141229 Pick-to: 6.8 6.10 Change-Id: I5c8a02f90e68c42d21078b945cc1ea0c84066635 Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
* doc: delegateModelAccess was added in Qt 6.10Kai Uwe Broulik2025-11-066-0/+6
| | | | | | Pick-to: 6.10 Change-Id: I795c2a35e2fec71d8dbe481ff334b9bcfdf6692a Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* Document native menu support for ContextMenuMitch Curtis2025-11-061-0/+8
| | | | | | | | Task-number: QTBUG-134798 Task-number: QTBUG-141556 Pick-to: 6.9 6.10 Change-Id: Ib2c674c96b21b7e93c0c9498df722cce5100d1ee Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* RangeSlider: keep values integer if everything is integerMitch Curtis2025-11-064-8/+62
| | | | | | | | | | | | | | | Based on 42687caf7bc7496b838995f3fa68194ca8323da3. If a user uses integer values for stepSize, from and to, they most likely want the actual values of the handles to be integers, too. Detect this condition, and store it in a new boolean member. If the condition is met, we round the value in valueAt() (which, due to floating point math, might not be an exact integer). Fixes: QTBUG-141090 Pick-to: 6.8 6.10 Change-Id: If9507534db8fceb113e7426b5d46c6a023919d66 Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
* Add dev-only static item statistics in QQuickItemPrivateJan Arve Sæther2025-11-063-0/+32
| | | | | | | | | | | | | | Statistics are useful for profiling. - count of total items ever created, obviously has many uses - how many of those also have ItemExtra? - how many times did we call the QTransform-construction functions during the course of event delivery and for other reasons? (This is one of the most expensive runtime costs at present.) Task-number: QTBUG-140340 Change-Id: Id7443f0dcf9e038f446304f371e29bfa612fcad2 Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
* Binding: Fix "value changed" detection and restore logicFabian Kosmale2025-11-051-1/+46
| | | | | | | | | | | | | | | | | | | | | | | | | We need to keep in mind that the value might have changed compared to what we initially had when writing to a property. In a future dev only change, we might rather make Binding a (conditional) interceptor. That would avoid the read and comparison, as we could track invalidations more directly. However, for picking back to stable branches, we want a more minimal change in any case. This requires us to do a similar conversion as QQmlProperty::write does. Moreover, we need to take additional care for QQmlListProperty: There, we would so far store a QQmlListReference, referencing whatever the Binding wrote to the property. Instead, we need to create a snapshot of the list. Moreover, we can't just store a QList of QObjects, as the objects might get garbage collected. Instead, put them into a QQmlListWrapper (in "owning" mode). Amends 6a8478829747289cdcce2a6e9628b31cfd865f15 Pick-to: 6.10 6.8 Fixes: QTBUG-140858 Change-Id: I5d0ec4ee5f1a20a6ee4b5f1696f561b2638bd07e Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* QQmlListWrapper: add createOwnedFabian Kosmale2025-11-052-0/+25
| | | | | | | | | | | | We are going to need a way to store a copy of a QQmlList in Binding, which doesn't reflect changes to the list. For that, we'll use QQmlListWrapper in its "owning" mode. Add a helper function to make its construction easier. Pick-to: 6.10 6.8 Task-number: QTBUG-140858 Change-Id: Iee8af6d5d8f9772366f44f2a29cf90dbeada8823 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* QQmlProperty: Split write handling for listsFabian Kosmale2025-11-052-62/+110
| | | | | | | | | | | | | | | The code working with lists backed by QQmlListProperty is quite different than the one used to handle other types of lists. Separate the two methods, which makes the function smaller, and which will allow more focused unit testing later on. Moreover, separate the code dealing with list properties in a part dealing with the conversion logic, and a part which takes care of the signal handling. Task-number: QTBUG-140858 Pick-to: 6.10 6.8 Change-Id: Ie05cfca99fd0bdc668d320e1587abb68784ee1c2 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* QmlModels: Make drain() safe against being called recursivelyUlf Hermann2025-11-051-7/+22
| | | | | | | | | | | | | | | | | | The callback can do pretty much anything, including another recursive call to drain(). We need to make sure we're done with the container and its iterators before we let that happen. In the common case of maxPoolTime == 0, this is really easy. Simply swap the container into a temporary and drain that. The case of maxPoolTime != 0 is a bit more complicated, but the algorithms library gives us a way to do it with std::stable_partition and std::move that should be good enough. Fixes: QTBUG-102811 Pick-to: 6.10 6.8 6.5 Change-Id: Id67a9b9c2a7279536e5c2a315b139fcd8024e243 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io> Reviewed-by: Sami Shalayel <sami.shalayel@qt.io>
* QtQml: Don't delete the Qt object when clearing singletonsUlf Hermann2025-11-051-1/+12
| | | | | | | | | | | | | | | | | We need the object not only as singleton but also as member of the global object. If there is a QJSEngine, parent it to the engine and make it explicitly C++-owned. This way clearSingletons() won't delete it. If there is no QJSEngine, there can't be any clearSingletons(). Therefore we're safe in that case. The only known example for an ExecutionEngine without a QJSEngine is the WorkerScript case, but since ExecutionEngine is exported, it could be instantiated on its own in other Qt modules. Amends commit 9dc7a22b212c18215942b9a4bfa17bd16dd5151b. Pick-to: 6.10 6.8 Task-number: QTBUG-95788 Change-Id: I5a0aa35fadd552af208538ab2715efaff77f8f4e Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>