diff options
Diffstat (limited to 'src/quickcontrols')
9 files changed, 38 insertions, 11 deletions
diff --git a/src/quickcontrols/basic/impl/qquickbasicbusyindicator.cpp b/src/quickcontrols/basic/impl/qquickbasicbusyindicator.cpp index d6cceb2a56..f885c35c59 100644 --- a/src/quickcontrols/basic/impl/qquickbasicbusyindicator.cpp +++ b/src/quickcontrols/basic/impl/qquickbasicbusyindicator.cpp @@ -145,8 +145,11 @@ bool QQuickBasicBusyIndicator::isRunning() const void QQuickBasicBusyIndicator::setRunning(bool running) { - if (running) + m_running = running; + + if (m_running) setVisible(true); + // Don't set visible to false if not running, because we use an opacity animation (in QML) to hide ourselves. } int QQuickBasicBusyIndicator::elapsed() const @@ -159,7 +162,12 @@ void QQuickBasicBusyIndicator::itemChange(QQuickItem::ItemChange change, const Q QQuickItem::itemChange(change, data); switch (change) { case ItemOpacityHasChanged: - if (qFuzzyIsNull(data.realValue)) + // If running is set to false and then true within a short period (QTBUG-85860), our + // OpacityAnimator cancels the 1 => 0 animation (which was for running being set to false), + // setting opacity to 0 and hence visible to false. This happens _after_ setRunning(true) + // was called, because the properties were set synchronously but the animation is + // asynchronous. To account for this situation, we only hide ourselves if we're not running. + if (qFuzzyIsNull(data.realValue) && !m_running) setVisible(false); break; case ItemVisibleHasChanged: diff --git a/src/quickcontrols/basic/impl/qquickbasicbusyindicator_p.h b/src/quickcontrols/basic/impl/qquickbasicbusyindicator_p.h index a39b61cde4..42df13243f 100644 --- a/src/quickcontrols/basic/impl/qquickbasicbusyindicator_p.h +++ b/src/quickcontrols/basic/impl/qquickbasicbusyindicator_p.h @@ -49,6 +49,7 @@ protected: QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override; private: + bool m_running = false; int m_elapsed = 0; QColor m_pen; QColor m_fill; diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols-combobox-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols-combobox-custom.qml index 960600eec8..d4d5d04f5a 100644 --- a/src/quickcontrols/doc/snippets/qtquickcontrols-combobox-custom.qml +++ b/src/quickcontrols/doc/snippets/qtquickcontrols-combobox-custom.qml @@ -69,7 +69,7 @@ ComboBox { popup: Popup { y: control.height - 1 width: control.width - implicitHeight: contentItem.implicitHeight + height: Math.min(contentItem.implicitHeight, control.Window.height - topMargin - bottomMargin) padding: 1 contentItem: ListView { diff --git a/src/quickcontrols/doc/src/includes/customize-button-background.qdocinc b/src/quickcontrols/doc/src/includes/customize-button-background.qdocinc index 0acad02d38..e8c88058b6 100644 --- a/src/quickcontrols/doc/src/includes/customize-button-background.qdocinc +++ b/src/quickcontrols/doc/src/includes/customize-button-background.qdocinc @@ -1,7 +1,7 @@ //! [file] \qml import QtQuick -import QtQuick.Controls +import QtQuick.Controls.Basic ApplicationWindow { width: 400 diff --git a/src/quickcontrols/doc/src/qtquickcontrols-customize.qdoc b/src/quickcontrols/doc/src/qtquickcontrols-customize.qdoc index 59a97baa0e..3a06d670bf 100644 --- a/src/quickcontrols/doc/src/qtquickcontrols-customize.qdoc +++ b/src/quickcontrols/doc/src/qtquickcontrols-customize.qdoc @@ -52,7 +52,7 @@ your application, refer to it by its filename: \qml - import QtQuick.Controls + import QtQuick.Controls.Basic ApplicationWindow { MyButton { @@ -68,7 +68,7 @@ control, first import the folder into a namespace: \qml - import QtQuick.Controls + import QtQuick.Controls.Basic import "controls" as MyControls ApplicationWindow { diff --git a/src/quickcontrols/fusion/impl/qquickfusionbusyindicator.cpp b/src/quickcontrols/fusion/impl/qquickfusionbusyindicator.cpp index 8e58b09ed3..ddf26140ce 100644 --- a/src/quickcontrols/fusion/impl/qquickfusionbusyindicator.cpp +++ b/src/quickcontrols/fusion/impl/qquickfusionbusyindicator.cpp @@ -33,10 +33,13 @@ bool QQuickFusionBusyIndicator::isRunning() const void QQuickFusionBusyIndicator::setRunning(bool running) { - if (running) { + m_running = running; + + if (m_running) { setVisible(true); update(); } + // Don't set visible to false if not running, because we use an opacity animation (in QML) to hide ourselves. } void QQuickFusionBusyIndicator::paint(QPainter *painter) @@ -73,7 +76,12 @@ void QQuickFusionBusyIndicator::itemChange(ItemChange change, const ItemChangeDa switch (change) { case ItemOpacityHasChanged: - if (qFuzzyIsNull(data.realValue)) + // If running is set to false and then true within a short period (QTBUG-85860), our + // OpacityAnimator cancels the 1 => 0 animation (which was for running being set to false), + // setting opacity to 0 and hence visible to false. This happens _after_ setRunning(true) + // was called, because the properties were set synchronously but the animation is + // asynchronous. To account for this situation, we only hide ourselves if we're not running. + if (qFuzzyIsNull(data.realValue) && !m_running) setVisible(false); break; case ItemVisibleHasChanged: diff --git a/src/quickcontrols/fusion/impl/qquickfusionbusyindicator_p.h b/src/quickcontrols/fusion/impl/qquickfusionbusyindicator_p.h index 22ff2af788..8581042539 100644 --- a/src/quickcontrols/fusion/impl/qquickfusionbusyindicator_p.h +++ b/src/quickcontrols/fusion/impl/qquickfusionbusyindicator_p.h @@ -44,6 +44,7 @@ protected: void itemChange(ItemChange change, const ItemChangeData &data) override; private: + bool m_running = false; QColor m_color; }; diff --git a/src/quickcontrols/material/impl/qquickmaterialbusyindicator.cpp b/src/quickcontrols/material/impl/qquickmaterialbusyindicator.cpp index 4d5b4e13e7..d99140b113 100644 --- a/src/quickcontrols/material/impl/qquickmaterialbusyindicator.cpp +++ b/src/quickcontrols/material/impl/qquickmaterialbusyindicator.cpp @@ -162,13 +162,16 @@ void QQuickMaterialBusyIndicator::setColor(const QColor &color) bool QQuickMaterialBusyIndicator::isRunning() const { - return isVisible(); + return m_running; } void QQuickMaterialBusyIndicator::setRunning(bool running) { - if (running) + m_running = running; + + if (m_running) setVisible(true); + // Don't set visible to false if not running, because we use an opacity animation (in QML) to hide ourselves. } int QQuickMaterialBusyIndicator::elapsed() const @@ -181,7 +184,12 @@ void QQuickMaterialBusyIndicator::itemChange(QQuickItem::ItemChange change, cons QQuickItem::itemChange(change, data); switch (change) { case ItemOpacityHasChanged: - if (qFuzzyIsNull(data.realValue)) + // If running is set to false and then true within a short period (QTBUG-85860), our + // OpacityAnimator cancels the 1 => 0 animation (which was for running being set to false), + // setting opacity to 0 and hence visible to false. This happens _after_ setRunning(true) + // was called, because the properties were set synchronously but the animation is + // asynchronous. To account for this situation, we only hide ourselves if we're not running. + if (qFuzzyIsNull(data.realValue) && !m_running) setVisible(false); break; case ItemVisibleHasChanged: diff --git a/src/quickcontrols/material/impl/qquickmaterialbusyindicator_p.h b/src/quickcontrols/material/impl/qquickmaterialbusyindicator_p.h index b6bbd925c7..ab70432d61 100644 --- a/src/quickcontrols/material/impl/qquickmaterialbusyindicator_p.h +++ b/src/quickcontrols/material/impl/qquickmaterialbusyindicator_p.h @@ -45,6 +45,7 @@ protected: QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override; private: + bool m_running = false; int m_elapsed = 0; QColor m_color = Qt::black; }; |
