aboutsummaryrefslogtreecommitdiffstats
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* ScrollBar: fix value not changing when scrolling via VoiceOverMitch Curtis2019-04-241-1/+15
| | | | | | | | | Connect to the QQuickAccessibleAttached::increaseAction() and QQuickAccessibleAttached::decreaseAction() signals. Change-Id: I9d6b37ac68d8790edcb3d4d72f155ec8511cabe2 Fixes: QTBUG-75072 Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
* QQuickComboBox: don't hide popup if focusedAlberto Mardegan2019-04-101-5/+5
| | | | | | | | | | | | | The ComboBox popup should be closed when the ComboBox loses focus, but not if the control gaining focus is the popup itself. While all the styles implemented in this module implement the ComboBox popup as an unfocusable window and handle all the keyboard events in QQuickComboBox itself, the developer can choose to replace the popup with a custom implementation, which might need the keyboard focus. Fixes: QTBUG-74661 Change-Id: I838ab9cb697df63ea2099e68f1ae99eadb06be08 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* Doc: expand upon Pane's Content Sizing sectionMitch Curtis2019-04-081-0/+16
| | | | | | | | | Mention what happens if its contentItem has no implicit size and only one child item. Change-Id: I646ca2baad89ac195836268b14108b43beaec2bf Fixes: QTBUG-69096 Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* Doc: add a Size section to explain StackView's sizing behaviorMitch Curtis2019-04-081-0/+29
| | | | | | Task-number: QTBUG-74902 Change-Id: I3f77459028de48729bb78353d8d95e92c7fc98f6 Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* SpinBox: fix indicators being hovered when mouse is moved while pressedMitch Curtis2019-04-081-2/+4
| | | | | | | | | | | We also need to update the hovered state of each indicator when the mouse is moved while pressed, not just when we get hover move events. Change-Id: I6fa71344fd540f648683958e5804ae735523e72d Fixes: QTBUG-74688 Reviewed-by: Henning Gründl <henning.gruendl@qt.io> Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
* Doc: Add the moduleheader informationVenugopal Shivashankar2019-04-031-0/+1
| | | | | | | | | | | | | Although the doc project is named QtQuickControls, the repo is still called qtquickcontrols2 and the exported headers are installed under QT_INSTALL_PREFIX/include/QtQuickControls2. By default, Qdoc tries to look for the headers in a directory that matches the doc project name, which is not the right include directory in this case. Change-Id: I77889fe35c028a2fc903d49b571a564c57326c21 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Fix typo in ScrollBar's documentationMitch Curtis2019-03-281-1/+1
| | | | | Change-Id: I3a26f24ad16f6330715ce62151895f28e4b856d3 Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* Default: fix highlighted ItemDelegate colorsMitch Curtis2019-03-273-3/+4
| | | | | | | | | | | | | | | | - Make ItemDelegate respect highlightedText - Change ItemDelegate's highlightedText palette role from white to almost black (i.e inversion of "light" which is 0xFF090909), so that text shows up against a highlighted background. This also allows easily switching ComboBox to a dark style via palette customization. Fixes: QTBUG-72786 Fixes: QTBUG-74678 Change-Id: I5ad0d86de112f869edf0488d06bb308cdc900363 Reviewed-by: Massimo Callegari <massimocallegari@yahoo.it> Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* DialogButtonBox: don't sort buttons based on their memory addressesMitch Curtis2019-03-221-2/+3
| | | | | | | | | | | | | | | | | | | | | | | When two buttons' roles are equal, the code would fall back to comparing the buttons' memory addresses. This leads to random results, which are especially noticeable on Windows and with release builds. This patch fixes the issue by instead returning false if the roles are equal. This still satisfies the "comp(a,a)==false" requirement of strict weak ordering: https://en.cppreference.com/w/cpp/named_req/Compare The patch also changes the sorting algorithm used from std::sort() to std::stable_sort(). Although it doesn't appear to be necessary from the testing that I did, it is good to ensure that the order of equal elements is maintained. Fixes: QTBUG-70451 Change-Id: I47561604108b12bf8ec0c794a2372767f0b2e04e Reviewed-by: Kai Koehne <kai.koehne@qt.io> Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io> Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* QQuickComboBox: ensure we don't close popup on iOSRichard Moe Gustavsen2019-03-211-4/+15
| | | | | | | | | | | | | | | | | | | | On iOS (and Android), we give focus to a control on touch release (rather than on touch begin, which is normal on desktop). For a QQuickCombobox, this means that we will both handle focus and open the popup on touch release, and not focus on touch begin and open popup on touch release, like on desktop. Because of this, we need to be more careful about when we choose to close the popup as well, otherwise it will close down before it gets a chance to show on iOS. This patch will check why we lose focus on both the inner line edit and the combobox itself, and based on this, choose whether we should close the popup. Basically, if focus is just transferred between the popup button and the line edit, we choose to keep the popup open. Fixes: QTBUG-70161 Change-Id: Iec242c0b5570844868085480fdf96fc49d189b82 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io> Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Fix DialogButtonBox content size calculationMitch Curtis2019-03-154-9/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Some history: - f1f884d3 worked around an issue in DialogButtonBox. - c2fd8f7d fixed it by using contentWidth; i.e. the implicit width of the contentItem. It caused QTBUG-72372. - I tried to fix QTBUG-72372 with 6476de0b, but created (or exposed) QTBUG-73860. The problem in QTBUG-73860 can be seen with the following example: Dialog { id: dialog visible: true standardButtons: Dialog.Ok } The single 'Ok' button here will go outside of the dialog. The underlying issue can be seen by looking into DialogButtonBox.qml: implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, (control.count === 1 ? contentWidth * 2 : contentWidth) + leftPadding + rightPadding) implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, contentHeight + topPadding + bottomPadding) The implicit width of the box in this case is contentWidth * 2 (there is one button, so control.count === 1). This should result in the button taking half the width of the box and being aligned to the right: alignment: count === 1 ? Qt.AlignRight : undefined ... delegate: Button { width: control.count === 1 ? control.availableWidth / 2 : undefined } What actually happens is that the contentItem (ListView) is temporarily 0 until it gets its final size of 100. However, QQuickDialogButtonBox doesn't respond to this change in the ListView's contentWidth. This problem can be fixed by returning to c2fd8f7d's resizeContent() implementation, which uses contentWidth. Then, there is a second issue: Dialog { id: dialog visible: true standardButtons: Dialog.Ok width: 300 } The button here is also positioned outside of the box. The problem is that the contentWidth is based on implicitContentWidth: QQuickContainerPrivate::updateContentWidth() { // ... contentWidth = implicitContentWidth; // ... } implicitContentWidth is calculated by calling getContentWidth(): void QQuickControlPrivate::updateImplicitContentWidth() { // ... implicitContentWidth = getContentWidth(); // ... } In the case of horizontal alignment, QQuickDialogButtonBoxPrivate::getContentWidth() uses the implicit width of the largest button: for (int i = 0; i < count; ++i) { QQuickItem *item = q->itemAt(i); if (item) { totalWidth += item->implicitWidth(); maxWidth = qMax(maxWidth, item->implicitWidth()); } } // ... if ((alignment & Qt::AlignHorizontal_Mask) == 0) totalWidth = qMax(totalWidth, count * maxWidth + totalSpacing); The Default style button has an implicitWidth of 100. The DialogButtonBox in the example above is 300 pixels wide, so the button should be 150, and it is, thanks to its width binding. However, the DialogButtonBox uses contentWidth to size its contentItem (ListView), and the contentWidth is, as mentioned, 100: the implicit width of the button. So, the button ends up hanging over the side of the box, as it's larger than the box thinks it is. This problem is fixed by setting DialogButtonBox's contentWidth to the contentWidth of the contentItem (ListView). This makes DialogButtonBox use the explicit widths of the buttons rather than their implicit widths. Since the contentWidth is no longer implicit, we must also change any use of contentWidth in the implicitWidth binding to implicitContentWidth. While writing auto tests for this, they caught an issue where contentWidth wasn't updated, so now we call resizeContent() in QQuickContainer::setContentWidth(). Change-Id: I99ffda21b47aeb14d4382e453e87c4312f343a1c Fixes: QTBUG-72886 Fixes: QTBUG-73860 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* Fix attached ToolTips using the timeout of the last shown tool tipMitch Curtis2019-03-081-1/+2
| | | | | | | | | | | | | | | | | | | | | Attached ToolTips share a single ToolTip item and set properties (such as delay) on it before showing it. Before 63899f3185, this wasn't a problem, but now QQuickToolTip has its own show() function that QQuickToolTipAttached calls. QQuickToolTipAttached passes -1 by default, which QQuickToolTip sees as the "default" and hence doesn't set a timeout at all. However, since that QQuickToolTip instance is shared, it still has a previous timeout value from the last time it was shown by a different QQuickToolTipAttached object. So, instead of QQuickToolTipAttached passing the timeout to QQuickToolTip::show(), make it set it on the QQuickToolTip instead. This ensures that it has the correct value if no timeout was specified for an attached tool tip. Task-number: QTBUG-74226 Change-Id: Iceed17bbb640a929fae3b9c975519df36cc2d210 Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
* QQuickScrollView: respect the content size set on/by the flickableRichard Moe Gustavsen2019-03-051-27/+39
| | | | | | | | | | | | | | | | | | | | | | | | | | | | If the flickable inside a scrollview has an explicit content size assigned, or if the flickable was created by the application, then don't fall back to calculate the content size. The reason is that it should not try to change the content size of a flickable that is controlled by the application (or by the flickable itself, in the case of ListView, ScrollView and TextArea). Sometimes e.g ListView will report a negative contentWidth, which is not considered illegal. From before we used to just check if the child flickable had a negative content size, and if so, take that as a evidence that the flickable was owned by the scrollview. But with this patch, we instead add two extra variables that keeps explicit track of whether or not we should read the content size from the flickable, regardless of the values it might return. With the two new variables, we also no longer need the "ownsFlickable" property, as we can instead use the new variables to check for the same. Fixes: QTBUG-72536 Fixes: QTBUG-74000 Fixes: QTBUG-72940 Change-Id: Iec87cc953557bf8c1bdb32a3c11b721c607fc19a Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* qtlite: Fix build the source code with -no-feature-shortcutMikhail Svetkin2019-02-284-7/+43
| | | | | Change-Id: I7247659b3c9f4634ff57bce1e55187def604e161 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* QQuickMenu: allow enter/return to be used to activate itemsMitch Curtis2019-02-284-2/+16
| | | | | | | | | | | Before this patch, only space was allowed. Windows 10 and macOS 10.14.2 both allow using enter to activate menu items. Change-Id: I64476347669ff73f233efd129563a18ba51618a5 Fixes: QTBUG-73354 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* Remove the internal_module config to enable generation of cmake filesAndy Shaw2019-02-271-1/+0
| | | | | | | | | | After checking, it seems that this is not needed and was likely added by accident, so removing internal_module will enable the cmake file generation so QtQuickTemplates2 can be used in a project. Change-Id: I4a3287147c3c8afb715ba8e4d21b8af6fc1e48f6 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Doc: state that negative scales for Popup are not supportedMitch Curtis2019-02-251-2/+2
| | | | | | | | This sentence was probably copied from Item's docs. Task-number: QTBUG-73687 Change-Id: If9f7554c78cbc47abc7c9fdabacc8025864b76e0 Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* Doc: restructure and fill in Imagine customization sectionMitch Curtis2019-02-251-6/+23
| | | | | Change-Id: I1b34fe2df28c734395dc2a55340f2a7cb1629692 Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* Drawer: fix infinite positioning loopMitch Curtis2019-02-222-1/+3
| | | | | | | | | This fixes the issue where Drawer would try to reposition itself forever, but does not address the fact that it is incorrectly positioned afterwards. Task-number: QTBUG-71290 Change-Id: Ibbd4baa84b66ab446ce3af2ef326f8c50e74216d Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* Page: fix binding loopMitch Curtis2019-02-202-0/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When Dialog (which derives from Page) has only its title set, there'd be a binding loop. A simplified version of the call stack: - QQuickPopup::componentComplete - QQuickPopupPrivate::prepareEnterTransition - QQuickItem::setVisible - QQuickPagePrivate::itemVisibilityChanged - QQuickDialog::implicitHeaderWidthChanged - QQmlBinding::expressionChanged <== Dialog.qml's implicitWidth binding - QQmlPropertyData::readProperty - QQuickDialog::implicitHeaderWidth - QQuickPage::implicitHeaderWidth - QQuickItem::implicitWidth <== QQuickPagePrivate::header, aka Label - QQuickTextPrivate::getImplicitWidth - QQuickTextPrivate::updateSize - QQuickTextPrivate::setupTextLayout - QQuickItem::setImplicitSize - QQuickItemPrivate::implicitWidthChanged - QQuickPagePrivate::itemImplicitWidthChanged - QQuickDialog::implicitHeaderWidthChanged - QQmlBinding::expressionChanged - QQmlAbstractBinding::printBindingLoopError Fix the issue by not emitting change signals if we're already in the process of doing so. Change-Id: I37d6fa35b1e70420e436c0e001f55035d7630542 Fixes: QTBUG-66494 Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
* Doc: Fix incorrect link to Number.toLocaleString()Topi Reinio2019-02-191-1/+2
| | | | | | | Task-number: QTBUG-73849 Change-Id: I02b32f55fabc6274a071536234dd485bf4e9bd02 Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io> Reviewed-by: Nico Vertriest <nico.vertriest@qt.io>
* QQuickScrollView: only forward content size to flickable if set explicitRichard Moe Gustavsen2019-02-181-3/+14
| | | | | | | | | | | | | | TableView monitors if the application sets an explicit contentWidth/Height, and skips calculating it when that is the case. So be more careful from ScrollView, and don't set it on the flickable if the application did not set it explicitly. By doing it this way, you can now set an explicit contentWidth/Height both in ScrollView and TableView, and it will be respected. Task-number: QTBUG-72536 Change-Id: Ib87fa6958881fccdc47f50133e996484392281b6 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io> Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* QQuickTheme: make sure QQuickTheme instance gets destroyed before qAppKonstantin Ritt2019-02-141-0/+12
| | | | | | | | QFont data must not be held at the application destruction time to make the font database correctly dispose all acquired resources. Change-Id: Ifc4a28a89701cf5622e8289a688eb0d4344c81fd Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Fusion: fix buttons colorsMitch Curtis2019-02-111-1/+4
| | | | | | | | | Make Active and Disabled colors closer to Widgets' Fusion style. Task-number: QTBUG-70819 Change-Id: I61cf22eb4449b5443fa71349da8df2ff57ee9158 Reviewed-by: Nils Jeisecke <nils.jeisecke@saltation.com> Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* Popup: ensure that "palette" is reevaluated when enabled state changesMitch Curtis2019-02-055-1/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | When changing the enabled state of a Menu after component completion, the background would not change. The problem was that QQuickPopup::paletteChanged() was not being emitted when the enabled state changed, resulting in QQuickControl::palette() (which QQuickPopup::palette() forwards calls to via its popupItem) not being called. QQuickControl::palette() changes the palette's current color group to QPalette::Disabled when it is disabled, so if it's not called, the popup's colors won't change. Fix the issue by adding a virtual enabledChange() function to QQuickControl, which QQuickPopupItem can override to emit both QQuickPopup::enabledChanged() (saving a connection in the process) and QQuickPopup::paletteChanged(). This ensures that bindings to QQuickPopup::palette are re-evaluated. The patch adds a virtual instead of just emitting paletteChanged() in QQuickPopup::setEnabled(), because we also want to be notified of indirect enabled state changes, such as those coming from parent items. Change-Id: Ibdbd05f27b5a74fe731bda9d6698cbf6b8f81785 Fixes: QTBUG-73447 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* Doc: elaborate on event behavior with Popup::modalMitch Curtis2019-02-051-2/+6
| | | | | Change-Id: I598bffe4a7908b5731ea12076d8bafaa447b2b5d Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* Doc: add more \sa links to Popup's pageMitch Curtis2019-02-051-1/+3
| | | | | Change-Id: I2ce6e2183e783c50655e67946d8bb607ba89f705 Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* Doc: remove references to deprecated ApplicationWindow::overlayMitch Curtis2019-02-051-3/+2
| | | | | Change-Id: I87f6f89695708b60d5065621a58d6fc59dac4edb Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* QQuickMenu: don't give focus to disabled menu itemsMitch Curtis2019-02-041-2/+2
| | | | | | Change-Id: I7eb394ca3991eae585fbbd8e665c46b11ef64a07 Fixes: QTBUG-70181 Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
* Menu: fix disabled sub-menu items being highlightedMitch Curtis2019-02-042-4/+25
| | | | | | | | | | | When a menu item with a sub-menu was triggered by key or mouse, it would open the sub-menu with the first menu item highlighted. This doesn't make sense for disabled menu items, so this patch makes it find the first enabled item. Change-Id: I9df1c750749e5a77b027b6f476b8ae1f5ea035bd Fixes: QTBUG-69540 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* Fix font and palette settings in .conf files not being respectedMitch Curtis2019-02-041-0/+8
| | | | | | | | | | | | | | | | | | | | In 5.11, the font palette read from the qtquickcontrols2.conf file was respected. After some large architectural changes (around the time of 94780538) required to fix a crash, 5.12 stopped respecting these settings. This patch fixes the issue by setting the default font as the System scope font, because that's what QQuickControlPrivate::parentFont() uses as its fallback if no parent item has a font explicitly set. QQuickControlPrivate::parentFont() is used as the starting point for font inheritance/resolution for each control. The same fix is used for palettes. Change-Id: I706a9f109c9959b8ea6b91f842146dbfc876cb2b Fixes: QTBUG-72023 Reviewed-by: Nils Jeisecke <nils.jeisecke@saltation.com> Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
* Fix Menu not being dismissed when the triggered item disables itselfMitch Curtis2019-02-041-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem Consider the following code: Menu { title: "Menu" Action { text: "Item" onTriggered: enabled = false } } A MenuItem (AbstractButton) is created for the Action, and when it is clicked, this function is called: void QQuickAbstractButtonPrivate::trigger() { Q_Q(QQuickAbstractButton); if (action && action->isEnabled()) QQuickActionPrivate::get(action)->trigger(q, false); else if (effectiveEnable) emit q->clicked(); } QQuickActionPrivate::get(action)->trigger(q, false) results in this function being called: void QQuickAbstractButtonPrivate::click() { Q_Q(QQuickAbstractButton); if (effectiveEnable) emit q->clicked(); } Since the action (and hence the menu item) was disabled in the signal handler, the effectiveEnable check fails and clicked() is not emitted. This causes the menu to not be dismissed. Solution Before calling QQuickActionPrivate::get(action)->trigger(), store the button's enabled state. If triggering the action causes the action to be disabled (due to the signal handler), we can then choose whether or not we emit QQuickAbstractButton::clicked(). Specifically, we emit clicked() if: - we were enabled before triggering the action, and - we have no associated action, or it's no longer enabled Task-number: QTBUG-69682 Change-Id: Ib4e3c313b776decc74089a6beffe415605c430be Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* Fusion: use white ButtonText when a dark system theme is in useMitch Curtis2019-01-311-1/+5
| | | | | | | | | | Button's text was previously black on a dark background with macOS' dark mode. This patch makes it more readable. Task-number: QTBUG-70819 Change-Id: Iaa9d31133434e67e04d5d831dcb8eeba191cbab4 Reviewed-by: Nils Jeisecke <nils.jeisecke@saltation.com> Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
* Update Qt Creator-related filesMitch Curtis2019-01-313-34/+125
| | | | | | | | | - Add Dial's new inputMode property to DialSpecifics.qml - Update plugins.qmltypes files Fixes: QTBUG-73412 Change-Id: Id9e3818db49d6d130da1256d3019a5074902c66d Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
* Doc: explain how to move active focus out of TextArea with tabMitch Curtis2019-01-301-0/+18
| | | | | | | Task-number: QTBUG-73202 Change-Id: Id0f760f0dd41079c823234b916b5419bf8c68552 Reviewed-by: Liang Qi <liang.qi@qt.io> Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* qquickfusionstyle: do not force a fixed white color for highlightedTextNils Jeisecke2019-01-291-17/+0
| | | | | | | | | just like the previous fix for for the highlight color: use the system palette. Task-number: QTBUG-70652 Change-Id: I5c31927c53ba386f54de7c46ec9fe66c26e7a31b Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* ComboBox: propagate palette colors to popupMassimo Callegari2019-01-241-1/+4
| | | | | | | | | | This allows a quick alternative to redefining the whole popup item by just acting on palette colors. Fixes: QTBUG-72786 Change-Id: I19e5158e2ad18fa9bf512f02d4bbe74cb06aba35 Reviewed-by: Massimo Callegari <massimocallegari@yahoo.it> Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Fix Qt.labs.platform.FileDialog not honoring folder propertyPaolo Angelelli2019-01-232-1/+6
| | | | | | Fixes: QTBUG-73179 Change-Id: I99fb1c7cfcf61920889da909152b23b40bc96104 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* QQuickAbstractButton: fix clicked() not being emitted after long pressMitch Curtis2019-01-231-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When a button is pressed long enough (QStyleHints::mousePressAndHoldInterval()) and there is a connection (e.g. signal handler) to the pressAndHold() signal, it is emitted. If nothing is connected to the signal, clicked() is emitted. Before this patch, QQuickAbstractButton used QObjectPrivate::isSignalConnected() to check whether or not anything was connected to pressAndHold(). The problem with this function is described by Olivier: "[...] there is an optimisation for the first 64 signals we store a bit in a 64bit integer to quickly see if a signal is connected. There is also the problem that it can return true even if the signal has been disconnected." This is also mentioned in a comment in the code: Returns \c true if the signal with index \a signal_index from object \a sender is connected. Signals with indices above a certain range are always considered connected (see connectedSignals in QObjectPrivate). When 5adce04 added inset signals to QQuickControl, it meant that signals in QQuickAbstractButton (which derives from QQuickControl) were pushed outside of that 64 signal range, resulting in the IS_SIGNAL_CONNECTED macro returning true. This patch fixes the issue by using QObject::isSignalConnected(), which does not use the 64 signal optimization. Fixes: QTBUG-72811 Change-Id: Ic6e54d6cab062e528522ef7e3cf27c1023d31347 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* QQuickPopupPositioner: fix crash on application exitMitch Curtis2019-01-141-1/+1
| | | | | | | | | | | | Don't add duplicate change listeners, since only one of them will be removed. Coincidentally, this is the same fix as d56c193e, which was reverted for unrelated reasons as part of a bulk revert in d3545dbd. Change-Id: If6fde09f884929c7928f3a1f78625559c9fcbf07 Fixes: QTBUG-72746 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* Doc: Give a hint to Popup's margins property in the positioning sectionNils Jeisecke2019-01-111-0/+3
| | | | | Change-Id: I6878b06d67b6066da1ca187cd879b77b96539ddc Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* DialogButtonBox: fix issue where single button would go outside boxMitch Curtis2019-01-081-2/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | c2fd8f7d made the following changes to the geometry calculation of QQuickDialogButtonBox's contentItem: @@ -244,11 +252,8 @@ void QQuickDialogButtonBoxPrivate::resizeContent() return; QRectF geometry = q->boundingRect().adjusted(q->leftPadding(), q->topPadding(), -q->rightPadding(), -q->bottomPadding()); - if (alignment != 0) { - qreal cw = (alignment & Qt::AlignHorizontal_Mask) == 0 ? q->availableWidth() : contentItem->property("contentWidth").toReal(); - qreal ch = (alignment & Qt::AlignVertical_Mask) == 0 ? q->availableHeight() : contentItem->property("contentHeight").toReal(); - geometry = alignedRect(q->isMirrored() ? Qt::RightToLeft : Qt::LeftToRight, alignment, QSizeF(cw, ch), geometry); - } + if (alignment != 0) + geometry = alignedRect(q->isMirrored() ? Qt::RightToLeft : Qt::LeftToRight, alignment, QSizeF(contentWidth, contentHeight), geometry); It turns out that this breaks the use case of a fixed width box (e.g. where a Dialog is assigned a width of 400 and the box assumes that width) with a single button. For example, in the case of the Default style, QQuickDialogButtonBox::contentWidth is 100 because Button's implicitWidth is 100. Since contentWidth is "used for calculating the total implicit width" of the box, it's not useful for positioning items which have an explicit width. The result is that QQuickDialogButtonBox thinks the contentItem is smaller than it really is, and therefore the ListView is positioned too far to the right. Only the Default and Universal styles are affected, as they are the only styles that resize the button to cover half of the button box. This patch fixes the issue by reverting the code above to its original state, where the content size of the contentItem is used instead of the contentWidth of the box. Change-Id: Idd2f94f3b4d3413fc2057c0ade2efdd66d701c08 Fixes: QTBUG-72372 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* Fix incorrect font size in certain styles on WindowsMitch Curtis2019-01-081-0/+4
| | | | | | | | | | | | | | | | | When a style is loaded, QtQuickControls2Plugin::loadStylePlugins() is called. This function uses QPluginLoader to search the style directory for the style plugin. On Windows, the code was looking for the plugin without the debug "d" suffix, causing the style plugin to fail to load for debug builds. This results in the QQuickTheme subclasses not being created, causing controls to be shown with default font sizes. This patch fixes the issue by appending the "d" suffix on Windows. Change-Id: I706dbe39325a104bcd6ce72cb0a8d37025adb055 Fixes: QTBUG-71902 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Oliver Wolff <oliver.wolff@qt.io> Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* Slider: fix wheel event propagationMassimo Callegari2019-01-081-1/+0
| | | | | | | | | Don't propagate wheel events when reaching the limits. Sync the behavior with Qt widgets and SpinBox/ComboBox. Task-number: QTBUG-72750 Change-Id: Iefb8562c1d9632badc4a39bc4c301bd96b8a515b Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Fix TextField background not respecting control's widthMitch Curtis2018-12-211-2/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | After 6858d4e9, the background of the Material style TextField does not respect the width of the control if the control is resized (e.g. due to being in a layout). - The first time resizeBackground() is called, !extra.isAllocated() returns true - that is, extra has not been allocated yet. - The if statement is executed and the background's width is set to the available width of the control (e.g. 120). - As a result of the background's width being set, its widthValid flag is set to true. This would previously be undone directly afterwards by setting widthValid flag to false. - In the case of the test case, the implicitWidth was already 120, so geometryChanged is not emitted. However, when the height of the background is set, this *does* cause itemGeometryChanged() to be called, which in turn does the following: extra.value().hasBackgroundWidth = p->widthValid; extra.value().hasBackgroundHeight = p->heightValid; resizeBackground(); So now all of the following checks evaluate to false: (!p->widthValid || !extra.isAllocated() || !extra->hasBackgroundWidth) This prevents the background from being resized. This patch fixes the issue by unsetting the widthValid (and heightValid) flags of the background directly after setting its width. To be safe, it also only unsets it if we were the ones to set it. By doing this, the check mentioned above succeeds because p->widthValid and extra->hasBackgroundWidth are both now false. It also adds some extra safety into itemGeometryChanged() that ensures that extra.value().hasBackgroundWidth is only set if necessary, and therefore prevents the extra data from unnecessarily being allocated. This is not necessary for the fix, but feels like the right thing to do. Change-Id: I051e281718bd8a2a20c100767d929fb71497ce1b Fixes: QTBUG-71875 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* QQuickComboBox: update QRegularExpression wildcard codeSamuel Gaist2018-12-171-1/+1
| | | | | | | | | | Following the update of qtbase because of QTBUG-72539, the code using wildcardToRegularExpression must be updated as anchoredPattern is not needed anymore. Task-number: QTBUG-72539 Change-Id: I51c895560866079c9cc27fa076e29fa4546ecf8f Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Make it visually clear which ComboBox item is the current itemMitch Curtis2018-12-123-0/+3
| | | | | | | | | | | | Do as the Default style does and make the current item bold. If we don't do this, it can be impossible to distinguish the current item from the highlighted item, especially when the popup obscures the button. Change-Id: If40b9c73c207d07fb5669564cdcfcea29ebed2f1 Fixes: QTBUG-68794 Reviewed-by: Nils Jeisecke <nils.jeisecke@saltation.com> Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
* Merge remote-tracking branch 'origin/5.12.0' into 5.12Qt Forward Merge Bot2018-12-05444-1423/+1367
|\ | | | | | | Change-Id: I7fe9e74beff3cdbfbf02ee0f129a8204ad31046e
| * Revert all Menu delegate patchesv5.12.0-rc2v5.12.0-rc1v5.12.0Mitch Curtis2018-11-158-150/+35
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts the following commits: d5cb26bc56a3b6f6e99c88654d4f7a65f43551ac - Menu: ensure the correct delegates are used when created via Component d923dd467c1aeb3e195a09949b04862084002f88 - MenuBar: ensure the correct delegates are used when created via Component d56c193eb4ceb640611d66f22e1f26aae91cd7d1 - QQuickPopupPositioner: avoid adding duplicate item change listeners 567a2de8cd493aabe0055d6dbc367b39447e70dd - Stabilize tst_qquickmenubar 953fbac6131823e4fce0eb4707a854469c4c04ff - Fix Instantiator-created MenuItems disappearing 936d31179d44220571ded15840bedeccb581c83b - tst_qquickmenu: add a test for MenuItems before and after a Repeater fc1832810f6c09505d9413685ed0b2d6295bea4a - QQuickMenuBar: fix menu not opening The fix for QTBUG-67559 has caused lots of issues, with the latest being a crash right before the 5.12 release. The bug that they fix is a P2, so it's not worth the hassle. The patches might be able to be resubmitted to dev after the crash is fixed. Change-Id: Ic192c7a302176bcdb2503b636b3462b10898a2ba Fixes: QTBUG-71770 Reviewed-by: J-P Nurmi <jpnurmi@gmail.com> Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
| * Doc: Fix the examplesinstallpath in the qdocconfVenugopal Shivashankar2018-11-131-1/+1
| | | | | | | | | | | | | | | | | | Qt Creator tries to look for the example sources in this path, before listing them in the welcome screen. Task-number: QTBUG-71694 Change-Id: I333f380f2f8ada91865474ff95cb0df1affba9cb Reviewed-by: Topi Reiniö <topi.reinio@qt.io>