aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2017-12-19 16:05:52 +0100
committerJ-P Nurmi <jpnurmi@qt.io>2017-12-20 17:37:41 +0000
commitda27cace5aa65c1972b746d9fc1d4507a04b5f93 (patch)
treef1ffa6a9c7728348d26be8a6c79a1e6c95faa662
parentb94cb52c8b03511a2549469dfed33c6e0e857021 (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>
-rw-r--r--src/imports/controls/BusyIndicator.qml4
-rw-r--r--src/imports/controls/qquickdefaultbusyindicator.cpp24
-rw-r--r--src/imports/controls/qquickdefaultbusyindicator_p.h4
-rw-r--r--tests/auto/customization/tst_customization.cpp1
4 files changed, 28 insertions, 5 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:
diff --git a/tests/auto/customization/tst_customization.cpp b/tests/auto/customization/tst_customization.cpp
index e975e546..13527263 100644
--- a/tests/auto/customization/tst_customization.cpp
+++ b/tests/auto/customization/tst_customization.cpp
@@ -257,7 +257,6 @@ void tst_customization::creation()
QVERIFY2(qt_createdQObjects()->isEmpty(), qPrintable("unexpectedly created: " + qt_createdQObjects->join(", ")));
QVERIFY2(qt_destroyedQObjects()->isEmpty(), qPrintable("unexpectedly destroyed: " + qt_destroyedQObjects->join(", ") + " were unexpectedly destroyed"));
- QEXPECT_FAIL("Default:BusyIndicator", "TODO: remove internal IDs", Abort);
QEXPECT_FAIL("Default:DelayButton", "TODO: remove internal IDs", Abort);
QVERIFY2(qt_destroyedParentQObjects()->isEmpty(), qPrintable("delegates/children of: " + qt_destroyedParentQObjects->join(", ") + " were unexpectedly destroyed"));