diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2017-12-19 16:05:52 +0100 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2017-12-20 17:37:41 +0000 |
commit | da27cace5aa65c1972b746d9fc1d4507a04b5f93 (patch) | |
tree | f1ffa6a9c7728348d26be8a6c79a1e6c95faa662 /src | |
parent | b94cb52c8b03511a2549469dfed33c6e0e857021 (diff) |
Default: cleanup the internal ID from BusyIndicator
An internal ID in the OpacityAnimator element prevented deferred
execution for the whole content item. Apply the same visibility trick
in C++ to avoid having to use an ID in QML.
Task-number: QTBUG-65341
Change-Id: Icb20e4ecc60d1093e849737799bb269f7f03097a
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/imports/controls/BusyIndicator.qml | 4 | ||||
-rw-r--r-- | src/imports/controls/qquickdefaultbusyindicator.cpp | 24 | ||||
-rw-r--r-- | src/imports/controls/qquickdefaultbusyindicator_p.h | 4 |
3 files changed, 28 insertions, 4 deletions
diff --git a/src/imports/controls/BusyIndicator.qml b/src/imports/controls/BusyIndicator.qml index 234c2e01..c92ef720 100644 --- a/src/imports/controls/BusyIndicator.qml +++ b/src/imports/controls/BusyIndicator.qml @@ -51,8 +51,8 @@ T.BusyIndicator { implicitWidth: 48 implicitHeight: 48 + running: control.running opacity: control.running ? 1 : 0 - visible: control.running || animator.running - Behavior on opacity { OpacityAnimator { id: animator; duration: 250 } } + Behavior on opacity { OpacityAnimator { duration: 250 } } } } diff --git a/src/imports/controls/qquickdefaultbusyindicator.cpp b/src/imports/controls/qquickdefaultbusyindicator.cpp index 315b2b8b..526eb29f 100644 --- a/src/imports/controls/qquickdefaultbusyindicator.cpp +++ b/src/imports/controls/qquickdefaultbusyindicator.cpp @@ -136,6 +136,17 @@ QQuickDefaultBusyIndicator::QQuickDefaultBusyIndicator(QQuickItem *parent) : setFlag(ItemHasContents); } +bool QQuickDefaultBusyIndicator::isRunning() const +{ + return isVisible(); +} + +void QQuickDefaultBusyIndicator::setRunning(bool running) +{ + if (running) + setVisible(true); +} + int QQuickDefaultBusyIndicator::elapsed() const { return m_elapsed; @@ -144,14 +155,23 @@ int QQuickDefaultBusyIndicator::elapsed() const void QQuickDefaultBusyIndicator::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data) { QQuickItem::itemChange(change, data); - if (change == ItemVisibleHasChanged) + switch (change) { + case ItemOpacityHasChanged: + if (qFuzzyIsNull(data.realValue)) + setVisible(false); + break; + case ItemVisibleHasChanged: update(); + break; + default: + break; + } } QSGNode *QQuickDefaultBusyIndicator::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *) { QQuickDefaultBusyIndicatorNode *node = static_cast<QQuickDefaultBusyIndicatorNode *>(oldNode); - if (isVisible() && width() > 0 && height() > 0) { + if (isRunning() && width() > 0 && height() > 0) { if (!node) { node = new QQuickDefaultBusyIndicatorNode(this); node->start(); diff --git a/src/imports/controls/qquickdefaultbusyindicator_p.h b/src/imports/controls/qquickdefaultbusyindicator_p.h index 7daeabd1..21a706e7 100644 --- a/src/imports/controls/qquickdefaultbusyindicator_p.h +++ b/src/imports/controls/qquickdefaultbusyindicator_p.h @@ -55,10 +55,14 @@ QT_BEGIN_NAMESPACE class QQuickDefaultBusyIndicator : public QQuickItem { Q_OBJECT + Q_PROPERTY(bool running READ isRunning WRITE setRunning) public: explicit QQuickDefaultBusyIndicator(QQuickItem *parent = nullptr); + bool isRunning() const; + void setRunning(bool running); + int elapsed() const; protected: |