aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quickcontrols
Commit message (Collapse)AuthorAgeFilesLines
* Don't return too early from QQuickMenu::setVisible() when parentItem is nullOliver Eftevaag4 days2-2/+44
| | | | | | | | | | | | | | | | | | | | QQuickPopup::componentComplete() will automatically search for a parentItem in case there's no explicit binding on parent. Since componentComplete() also calls d->transitionManager.transitionEnter() in case visible was set to true via the visible property, it would make sense to simply set the visible member variable to true on a QQuickMenu::setVisible(true) call, and delay calling transitionEnter() on the transition manager until componentComplete() is called. If for whatever reason the parentItem is explicitly set to nullptr after componentComplete(), we can still prevent the menu from opening. I don't see any potential issues with having the safeguard in QQuickPopup::setVisible(), instead of QQuickMenu::setVisible(). Fixes: QTBUG-138193 Pick-to: 6.11 6.10 6.8 Change-Id: I869c81a6dc6977a4c7e1d88e2507ade08b84dabd Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* Change order tst_palette::comboBoxPopup to ensure theme is not fixedFrédéric Lefebvre13 days1-2/+2
| | | | | | | | | | | | | | Tst_palette::comboBoxPopupWithThemDefault fails on its first run because tst_palette:comboBoxPopup sets a theme beforehand. It always passes on its second run, as no theme as been fixed yet. Change the order of the two tests ensuring that comboBoxPopupWithThemDefault is passing on its first run. This is a workaround to prevent the theme being fixed before the test. Change-Id: I902f6b0cff9f35305cb5534d1318395677fa2748 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* Properly blacklist Switch mouse/touch tests on macOS 26Tor Arne Vestbø13 days1-2/+2
| | | | | | | | Amends 023cad2c2c815c3237fdd4636213084db63fdcb1. Task-number: QTBUG-142189 Change-Id: I4aac13fb790578ea69fb856e41ffc265f2330a01 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Stabilize tst_QQuickContextMenu::iOS::textControlsMenuKeyShawn Rutledge2025-12-091-2/+2
| | | | | | | | | | Avoid positioning items at fractional positions and then testing with a QContextMenuEvent at 0, 0 relative to the item: it may be outside the item by a fraction of a pixel and fail to "hit" during delivery. Pick-to: 6.11 Change-Id: I0f1f98a7ae88a23356026d2c6c7eeb4bf2a72a92 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Add test for menu navigation, when using popup windowsOliver Eftevaag2025-12-052-0/+210
| | | | | | | | | | | | | | | | Keyboard navigation between the MenuBar, MenuBarItems, Menus and MenuItems broke, when we introduced popup windows. Since then, we've added various patches (e.g. 2393c588bc9a5368c013952a4fb195c5b4017543) 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 <richard.gustavsen@qt.io>
* Qt Quick Controls: add DoubleSpinBoxXavier BESSON2025-12-041-0/+869
| | | | | | | | [ChangeLog][Controls] Added DoubleSpinBox. Fixes: QTBUG-67349 Change-Id: Icb2f02162825daf74778de725f80af63874a5d16 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Fix CalendarModel month count calculationJoni Poikelin2025-11-261-0/+9
| | | | | | | | | | CalendarModel used previously set from and to values to calculate the range and thus the count wasn't ever up to date. Fixes: QTBUG-141883 Pick-to: 6.10 6.8 Change-Id: Id3ef60810d2e8ebfcc060307e6d17cfca379cd78 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Fix flaky tst_QQuickMenuBar::subMenuFlipsPositionWhenOutOfBoundsFrédéric Lefebvre2025-11-261-1/+1
| | | | | | | | | | | tst_QQuickMenuBar::subMenuFlipsPositionWhenOutOfBounds is failing on ubuntu where a keyboard event is sent before the window became active. Check that the window is active instead of checking if it is exposed, ensuring the window can properly receive keyboard events. Change-Id: If4dd3533fc5788f44d6011f89683f4b74ecd77c0 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* Add iOS style for SearchFieldDilek Akcay2025-11-261-4/+26
| | | | | | | Task-number: QTBUG-137318 Pick-to: 6.10 Change-Id: Iead7b9ad0bf22c96d94ab70795fed854f613f6d7 Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
* Blacklist Switch mouse/touch tests on macOS 26Tor Arne Vestbø2025-11-251-0/+18
| | | | | | Task-number: QTBUG-142189 Change-Id: I863b5773f89528d3582dd83c84cff78d159990c4 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* Fix several flaky tst_QQuickStyle on different platformsFrédéric Lefebvre2025-11-211-1/+3
| | | | | | | | | | | | | | | | | Fix the flaky tests tst_QQuickStyle::commandLineArgument, configurationFile, environmentVariables. The tests were picking up the previously selected style, causing them to be unable to change and to fail the next tests. When re-running a test no style is selected yet, meaning the desired test can be selected succesfully. Change the order to have lookup as the last time as it will make other tests fail the first time. The lookup test is still failing the first time it is run due to the wrong font size. Reset the style inside of cleanup() Change-Id: Ic974316c856affbc5f3fe805aabd27588b021c4c Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* Dialog(ButtonBox): Prioritize popupItem subFocusItem over buttonBoxOliver Eftevaag2025-11-201-0/+36
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a followup to e323e508b61ce0a2615c9c8e8fbf897e27965173. In cases where a Dialog has an item with explicit focus, e.g: ``` Dialog { Button { focus: true text: "Foo" } footer: DialogButtonBox { standardButtons: DialogButtonBox.Ok } } ``` Then the "Foo" button should get focus, since it's explicitly set in QML. 4d1753b95f0343a68f80a1b482b8ab9a0397fecb changed this behavior to instead always give the buttonbox focus. If focus isn't explicitly set elsewhere, it should be fine to give it to the buttonbox. However, doing so unconditionally would be a significant behavior change that would break lots of user projects. Add a precondition to verify that the popupItem doesn't have a subFocusItem, before considering whether or not to give focus to the buttonbox. As a drive-by, also just call setFocus() instead of forceActiveFocus(). Both functions work for our purposes, so might as well use the less extreme option. Amends e323e508b61ce0a2615c9c8e8fbf897e27965173 Change-Id: Iea72f162669159082386966a1d9419c64abb7302 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Dialog: Don't give buttonBox focus when empty or buttons are disabledOliver Eftevaag2025-11-181-0/+34
| | | | | | | | | | | | | | | | | Focus behavior was changed in 4d1753b95f0343a68f80a1b482b8ab9a0397fecb to give the buttonBox focus when a dialog is opened. This will fundamentally conflict with user projects that manually set the focus property. Further discussion will be needed to arrive on a good solution for when the focus property is manually set. For now, we can at least make sure that the new focus behavior is limited to cases where the buttonBox actually contains buttons (aka, not empty), with at least one of them being enabled. Fixes: QTBUG-141998 Change-Id: I704e6a707f5b579e5f4de7b6197abc2fc5dfdf3e Reviewed-by: Jarkko Koivikko <jarkko.koivikko@code-q.fi>
* Account for icon color being set to transparentMitch Curtis2025-11-185-1/+39
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 Curtis2025-11-1818-0/+759
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* DialogButtonBox: add properties for setting a default buttonOliver Eftevaag2025-11-142-0/+197
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* tst_QQuickPopup::activeFocusOnClosingSeveralPopups: use active focus macrosMitch Curtis2025-11-071-3/+3
| | | | | | | | This will tell us which item had focus if the expected one doesn't. Pick-to: 6.10 Change-Id: I7252ba389b6bb113f866351fe7cda8e6bb2a62bf Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
* Improve stability of tst_QQuickPopup::invisibleToolTipOpenMitch Curtis2025-11-071-4/+4
| | | | | | | | | | | | | | | | | The failure was (with sped up animations): FAIL! : tst_QQuickPopup::Material::invisibleToolTipOpen() 'toolTip->isOpened()' returned FALSE. () Loc: [/Users/mitch/dev/qt-dev2/qtdeclarative/tests/auto/quickcontrols/qquickpopup/tst_qquickpopup.cpp(2090)] Use the same PointLerper approach used in other tests which always helps with test flakiness caused by mouse moves. The test didn't fail after several runs of tst_QQuickPopup (with all styles) after applying this patch. Pick-to: 6.8 6.10 Change-Id: I4ebb1247847965215a6c4e1fa0b28e68057694f7 Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
* ScrollBar: ensure cleanup functions are called regardless of flickableMitch Curtis2025-11-071-0/+49
| | | | | | | | | | | | 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>
* tst_slider.qml: add test_integerSteppingMitch Curtis2025-11-061-0/+44
| | | | | | | | | | Verify that using integer values for from, to and stepSize results in integer values. Task-number: QTBUG-141090 Pick-to: 6.8 6.10 Change-Id: Ideadd88bae45d3d9cfff9a4efd077a35368029e2 Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
* RangeSlider: keep values integer if everything is integerMitch Curtis2025-11-061-0/+48
| | | | | | | | | | | | | | | 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>
* Compiler: Rename QMLLINT_DEFAULT_CATEGORIES to BUILTIN in stead DEFAULTOlivier De Cannière2025-11-051-1/+1
| | | | | | | This helps avoid confusion with the default field for categories. Change-Id: Iceb9a2adeb928a0f801fab9c718a8ecc3ac8cd07 Reviewed-by: Sami Shalayel <sami.shalayel@qt.io>
* Dial::test_integerStepping: ensure we actually test changes in valueMitch Curtis2025-10-301-1/+3
| | | | | | | | | | By not comparing the Dial's value against 1 eight times. Amends 42687caf7bc7496b838995f3fa68194ca8323da3. Pick-to: 6.8 6.10 Change-Id: I67bc64c517d06a176ba4b2189f5755f954915ae1 Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
* Propagate attached properties for items within the popup windowSanthosh Kumar2025-10-281-0/+19
| | | | | | | | | | | | | | | | The attached property doesn't propagate to the sub-menu items within the pop when the pop-up type is configured as Popup.Window, as the attached property, is provided only for the immediate window (made as part of patch d824585075b0abaec12c0cbb6445aa4eb84b2cea) and not further up. This patch ensures that the attached property is provided for the window if configured for anything further up in the hierarchy. Fixes: QTBUG-139603 Pick-to: 6.10 6.9 6.8 Change-Id: I95b9f735b7e19ad9916562bf09445fd20f2ba1f4 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Skip tst_QQuickContextMenu::menuItemShouldntTriggerOnRelease()Axel Spoerl2025-10-231-0/+3
| | | | | | | | | | | | | | | tst_QQuickContextMenu::menuItemShouldntTriggerOnRelease() has always been flaky (introduced in dac8529dc3fac2ab57be9c72ef7f436e94317e25). Skip it to unblock submodule update. Task-number: QTBUG-133302 Task-number: QTBUG-137400 Task-number: QTBUG-141398 Task-number: QTBUG-141406 Pick-to: 6.10 6.9 Change-Id: I3bc1e02d7e5ac81296d85b6b40a602f820a25118 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* Make QQuickPopupPrivate::handleTouchEvent() use QEventPoint::scenePosition()Sze Howe Koh2025-10-212-1/+37
| | | | | | | | | | | | | | | QQuickPopupPrivate::handleMouseEvent() has already converted from `item->mapToScene(point.position())` to `point.scenePosition()`: 1. fe86b0fda7bcce099a0bca08e6925e89efc634c4 2. e481f1c414d7c243efabe4215b1865c616d25ce0 Give QQuickPopupPrivate::handleTouchEvent() the same treatment to fix swiping open Drawers by touch. Change-Id: Ieb4b8f0677043f09771e5700c8d441cc90d7fa75 Fixes: QTBUG-132914 Pick-to: 6.10 6.8 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* Android: skip test cases failing to acquire deadlock protectorAssam Boudjelthia2025-10-181-0/+6
| | | | | | | | | | | | | | | | | | | | | | | It crashes when failing to acquire UI thread deadlock protector that's acquired by input context. The reason this happens is that some QML tests have a TextEdit or TextInput based elements that ends up doing some operation that blocks the UI thread even after the test case is finished and then when a next test case tries to create a window surface it finds the UI thread blocked. Skip these for now, otherwise a solution needs to be found under QTBUG-139400. This includes: * tst_qquickwidget::focusOnClickInProxyWidget * tst_QQuickContextMenu::textControlsMenuKey() * tst_QQuickContextMenu::mouseAreaUnderTextArea() Fixes: QTBUG-141161 Task-number: QTBUG-139400 Pick-to: 6.10 6.8 6.5 Change-Id: I61eed34d79aaa88c46937610dec962dcecf5c716 Reviewed-by: Rami Potinkara <rami.potinkara@qt.io> Reviewed-by: Soheil Armin <soheil.armin@qt.io>
* a11y: Change role of QQuickPage to Pane from PageTabEven Oscar Andersen2025-10-161-2/+2
| | | | | | | | | PageTab is really like a button, or something you can click on to display the selected tab. It is not the contents of that tab. Change-Id: I4ddd87541512a3712d9ca65e7336c8d9018d1023 Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
* MaterialStyle: Fix reset behavior for foreground and backgroundJarkko Koivikko2025-10-151-0/+63
| | | | | | | | | | | | | | | | | | Resetting foreground and background values did not propagate to children when the earlier value matched theme default. Stop pre-clearing m_hasX/m_customX in reset. Clearing these variables prevents propagating the values to children due to early exit conditions in the inherit functions. Clear only m_explicitX and call inherit with the parent's values. m_hasX/m_customX values are then cleared in the inherit function, if changed. This guarantees propagation to children even when the color is unchanged. Pick-to: 6.10 6.8 Change-Id: Ie4f7276d43afbfaf5b4d10ccf658f27000d640d9 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* MaterialStyle: Fix early out conditions for background and foregroundMorteza Jamshidi2025-10-151-0/+32
| | | | | | | | | | | | | | | | | This change fixes setting the background or foreground explicitly to the theme default. The value did not persist. Example case for background: The default m_hasBackground is false and background color is globalBackground that is 0xFFFAFAFA, so if user sets the background color to 0xFFFAFAFA the logic skips it by doing early out and doesn't set m_hasBackground to true. Fixes: QTBUG-140068 Change-Id: I26f1182d808354f34800dc62760e5498cbd77b3b Pick-to: 6.10 6.8 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* ScrollBar::test_flashing: Use non-interactive scrollbar to stabilize testTor Arne Vestbø2025-10-131-1/+3
| | | | | | | | | | | | | | In rare cases the mouse was lingering over the exact position of the scroll bar as a result of other tests moving the mouse, which would make the scrollbar never leave the active state, and hence keep reporting a non-0 opacity. We're programmatically activating the scroll bar via increment(), so we don't need the scroll bar to be interactive to do the test. Pick-to: 6.10 6.8 6.5 Change-Id: Id75b22d51277c3515fd4f448360bd576b45d69d8 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* tst_styleimports: make attachedTypesAvailable use builtins stylesSami Shalayel2025-10-131-0/+2
| | | | | | | | | | | | | | Reset the style to "" to use the builtins styles, instead of reusing the last style set by a previous test. Before this change, `tst_styleimports attachedTypesAvailable` would test Basic, Fusion, ... styles while `tst_styleimports` would only test the `FileSystemStyle` style set by a previous test. This commit fixes a test failure in a later commit. Pick-to: 6.10 6.8 Task-number: QTBUG-133755 Change-Id: I693b976e786dce4bcf45dcf31b55142aed342a70 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Skip synthesis of QContextMenuEvent if eventpoint has a grabShawn Rutledge2025-10-097-18/+238
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In QQuickWindowPrivate::maybeSynthesizeContextMenuEvent(), if the mouse event's QEventPoint already has a grab (passive or exclusive), it may be that a TapHandler with default gesturePolicy has onTapped: menu.popup() or a MouseArea has onClicked: menu.popup() or something like that. We can at least detect that a MouseArea has an exclusive grab, or a TapHandler that handles the right mouse button has a passive grab, although we cannot see what it will do in the future when the right mouse button is released. We don't want to flash up a menu on press if the user's code is going to show a menu on release, so don't send the QContextMenuEvent, just in case. Amends 24ac76941e899a7a92c5c06f70bc2b9f0344daf0 and 9ac0e70cdbf99e06761b6edb28937fded8791bdb [ChangeLog][Controls] To fix QTBUG-134903, when the right mouse button is pressed, we don't send a QContextMenuEvent if we can detect that a right-mouse click might already be handled by a TapHandler or a MouseArea to open a Menu. But we recommend that you stop opening menus that way: either rely on the built-in menus provided by TextArea and TextField, or use the ContextMenu attached property to replace or add menus to controls. In Qt 7 we plan to send the QContextMenuEvent without checking for handlers first. Fixes: QTBUG-134903 Task-number: QTBUG-132384 Change-Id: I1ef5387fbddeed4e6fc81d538683248a05d6e03f Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* ScrollView: use padding if no rightPadding or bottomPadding is setMorteza Jamshidi2025-10-061-0/+23
| | | | | | | | | | | | | Because rightPadding and bottomPadding properties are set in the windows and macos ScrollView style implementation if the user try to set the padding property there will be no effect. So with this change we make sure that the padding property is used if rightPadding or bottomPadding aren't explicitly set by the user. Fixes: QTBUG-123631 Change-Id: I5078cec1774cef7b99e0735022ddb4ce84cd08df Pick-to: 6.10 6.8 6.7 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* SearchField: Keep currentIndex at -1 until user explicitly selectsDilek Akcay2025-10-021-5/+38
| | | | | | | | | | | | | | | | | | Until now, currentIndex was assigned to different values on different actions, like to 0 on model changes, or to the index of the highlighted index according to the arrow key actions. These caused unexpected behavior so the following changes were made: - Removed setting to 0 when model is set in the beginning. - Reset currentIndex to -1 on any user edit(typing/deleting) - Disabled arrow key interactions on currentIndex Now currentIndex only changes whether the user clicks an item in the popup or presses Enter on a highlighted item. Pick-to: 6.10 Change-Id: Ib1a991c87a767fe436b4b025a26834871401ca4b Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
* StackView: don't load new items if QML engine is nullMitch Curtis2025-10-015-0/+129
| | | | | | | | | | | | | | | | | | | | | | | | In the linked bug report, a Loader is deactivated after an Image within it has started loading. A slot was connected to the statusChanged signal of the Image, which calls replace(). This caused an assertion failure because the StackView's QML engine was null. Note that it's not enough to check if the QML context is non-null, because it still is at that point. There isn't an easy way to check for this in one place in QQuickStackView, let alone in user code, so we need a lot of engine checks. Add a C++ test for StackView, as I wasn't able to get it to crash with a QML-only test. For now we only need to test the Basic style, since most styles don't provide anything too interesting or complex for StackView. Fixes: QTBUG-140018 Pick-to: 6.8 6.10 Change-Id: I53ba016bf44c46b7734b0b2daeeb62177f9067db Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* SpinBox: accept touch eventsMitch Curtis2025-10-011-0/+29
| | | | | | | | | | | | | | | | If an item doesn't call setAcceptTouchEvents(true), touch events will be converted to mouse events. This mostly worked, except for hover, where the touch events don't translate in the way that we needed them to. Set this for SpinBox in the same way that 3c2eab829df900a4bcc308fe0d8d5a87cd8f56a3 did for other controls. Fixes: QTBUG-140481 Pick-to: 6.5 6.8 6.9 6.10 Change-Id: I18751f86c1af1aea019f441a90af443cd88dea8b Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io> Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* Revert "tst_qquickmenu: fail on warnings"Mitch Curtis2025-09-301-1/+1
| | | | | | | | | | | | This reverts commit 60e5d85921369cc6574e67c6d2cd18f2701ba0ce. Reason for revert: sporadic swapchain warnings on Windows make this flaky. Change-Id: I41183455bdbe15dc4b7b18d42f182c64b3d41667 Task-number: QTBUG-98718 Task-number: QTBUG-140242 Reviewed-by: Santhosh Kumar <santhosh.kumar.selvaraj@qt.io>
* tst_qquickmenu: fail on warningsMitch Curtis2025-09-171-1/+1
| | | | | | | Task-number: QTBUG-98718 Pick-to: 6.8 6.9 6.10 Change-Id: Idfedb0e9cb97833c7e144de7593cabf73522f88e Reviewed-by: Santhosh Kumar <santhosh.kumar.selvaraj@qt.io>
* QQDAP::deliverPressOrReleaseEvent: return true if event was acceptedMitch Curtis2025-09-162-0/+75
| | | | | | | | | | | | | | | Previously it was returning event->allPointsAccepted(), which can be false even if the event was accepted, because the event points' accepted states are set to false before delivery. This fixes an issue where a MouseArea under a ContextMenu created by a text editing control would emit its pressed signal when a MenuItem in a popup window above it was clicked. Fixes: QTBUG-139342 Change-Id: I4d4043929c316a8e70fecdb4a8b23b48f9442390 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io> Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* tst_QQuickPopup::fadeDimmer: fix stack-use-after-scopeMitch Curtis2025-09-091-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 ef8bde838ec708ff45ad68c5db899a86116b4e94. Pick-to: 6.8 6.9 6.10 Change-Id: Ie5c49b7d9ecd3c74f822590d296062b516563391 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Unblacklist a few tst_QQuickPopup tests on macOSMitch Curtis2025-09-091-7/+1
| | | | | | | | | | | These were added in 031da6519072529481b045e67d143bd55a120aef but don't have any test data listed in Grafana on 6.5, 6.8, 6.9, 6.10 or dev, so we can assume they're passing. Task-number: QTBUG-114718 Pick-to: 6.8 6.9 6.10 Change-Id: Ia7e6effc46b56c0e9985c00182de7436fc1ab037 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* Unblacklist tst_QQuickPopup::zOrder on macOSMitch Curtis2025-09-091-3/+0
| | | | | | | | | | | | | This test has no test data listed in Grafana on 6.5, 6.8, 6.9, 6.10 or dev, so we can assume it's passing. Amends 9231fbdb27b667b08464aa6560fedb0e8aee2c52 and 367edbfbc3a29827f9c34800b4de509c8629e38a. Pick-to: 6.5 6.8 6.9 6.10 Change-Id: Ib731b622ba25c7cc631b10eecf1bd1a23f0391a9 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* Android: enable qt quick tests after crash fixAssam Boudjelthia2025-09-057-5/+269
| | | | | | | | | | | | | | | | | | After the deadlock fix in QTBUG-139211, these can be enabled again since they were crashing for the same reason. The enables tst_controls and tst_focus. At the same time blacklist few test cases that still fail, doing this is still beneficial because get more test coverage anyways from re-enabling the skipped tests. Fixes: QTBUG-100259 Fixes: QTBUG-100258 Task-number: QTBUG-139415 Pick-to: 6.10 Change-Id: Id5b0a0e0870dd89bf4bc376b1b705ebeaa1b6ea0 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Android: unskip passing tst_qquickpopup test casesAssam Boudjelthia2025-09-051-8/+0
| | | | | | | | | Both overlay() and doubleClickInMouseArea() seem to be passing. Pick-to: 6.10 Task-number: QTBUG-118532 Change-Id: I24a9e4f991ed82b899e4e5ba0c03bbb8f9794fe2 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Fix Popup spacing and insets not supporting bindingsDheerendra Purohit2025-09-041-0/+51
| | | | | | | | | | | Connect spacing and inset change signals from the internal popupItem to the Popup,ensuring that QML bindings and UI updates reflect property changes. Pick-to: 6.10 6.9 6.8 Fixes: QTBUG-135249 Change-Id: Iab92430406e43942c2818a3f62976ccd2fca025d Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
* Fix flaky warning message in tst_qquickmenu::loadMenuAsynchronouslySanthosh Kumar2025-08-291-5/+7
| | | | | | | | | | | | | The test case tst_qquickmenu::loadMenuAsynchronously is getting flaky, w.r.t warning message, sometimes depending on the platform, and so it's required to extend the regex to consider that case. Amends patch: 28553473cfc55acd2f989769c2ea13c38997603a Task-number: QTBUG-139552 Change-Id: I4766c7ac52a586dcf5b470ce5a676a51e2503cb5 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* Blacklist tst_QQuickPopup::fadeDimmer on macOSMitch Curtis2025-08-291-0/+3
| | | | | | | | | It's causing a lot of flaky failures, so blacklist it until it can be fixed. Task-number: QTBUG-131695 Change-Id: I81835fe1af677899abcc26534c5fd95dc69004cb Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
* Android: adapt tst_QQuickApplicationWindow to safe area marginsAssam Boudjelthia2025-08-281-9/+13
| | | | | | | | | | | The test was still not account for safe margins in few places, it seems it didn't account for the fact that Android apps will have the margins set from the start. Fixes: QTBUG-139583 Pick-to: 6.9 6.10 Change-Id: Ia04a0ca2e7ad96a1e72a0d7fe9416634fb24e116 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* Skip warning from the loader for the test case loadMenuAsynchronouslySanthosh Kumar2025-08-271-0/+5
| | | | | | | | | | | | | The test case added as part of patch 36216db956096d6cabdb28b08368dd76db92c652 shows up warning "There are still \"n\" items in the process of being created at engine in destruction.\". This patch allow this test case to pass if fail on warning enabled for the quick menu auto test. Task-number: QTBUG-137160 Task-number: QTBUG-139552 Change-Id: I7f31ffd096cc10b514542092a85f346e413b40dd Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>