diff options
author | Øystein Heskestad <oystein.heskestad@qt.io> | 2021-05-10 15:28:52 +0200 |
---|---|---|
committer | Arno Rehn <a.rehn@menlosystems.com> | 2021-05-20 13:38:10 +0000 |
commit | f8ee2550f7d8f65954facb919bf45bfcf2bb4c3d (patch) | |
tree | 21fae844ba2f90f040ee45b13a158658673418b2 /src | |
parent | a7199de7d90f48ce3d95cae795bd9209c39516ce (diff) | |
download | qtwebchannel-f8ee2550f7d8f65954facb919bf45bfcf2bb4c3d.tar.gz |
Make blockUpdates bindable
[ChangeLog] Make blockUpdates bindable
Task-number: QTBUG-93601
Change-Id: I7a5e06ecb3258b11988343321b78ffaab1d48dc0
Reviewed-by: Arno Rehn <a.rehn@menlosystems.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/webchannel/qmetaobjectpublisher.cpp | 26 | ||||
-rw-r--r-- | src/webchannel/qmetaobjectpublisher_p.h | 6 | ||||
-rw-r--r-- | src/webchannel/qwebchannel.cpp | 8 | ||||
-rw-r--r-- | src/webchannel/qwebchannel.h | 4 |
4 files changed, 32 insertions, 12 deletions
diff --git a/src/webchannel/qmetaobjectpublisher.cpp b/src/webchannel/qmetaobjectpublisher.cpp index f478ede..53cf840 100644 --- a/src/webchannel/qmetaobjectpublisher.cpp +++ b/src/webchannel/qmetaobjectpublisher.cpp @@ -202,7 +202,9 @@ void QWebChannelPropertyChangeNotifier::notify( QMetaObjectPublisher::QMetaObjectPublisher(QWebChannel *webChannel) : QObject(webChannel), webChannel(webChannel), - blockUpdates(false), + blockUpdatesStatus(false), + blockUpdatesHandler(blockUpdatesStatus.onValueChanged( + std::function<void()>([&]() { this->onBlockUpdatesChanged(); }))), propertyUpdatesInitialized(false), propertyUpdateIntervalTime(50), propertyUpdateIntervalHandler(propertyUpdateIntervalTime.onValueChanged( @@ -394,7 +396,7 @@ void QMetaObjectPublisher::initializePropertyUpdates(QObject *const object, cons void QMetaObjectPublisher::sendPendingPropertyUpdates() { - if (blockUpdates) { + if (blockUpdatesStatus) { return; } @@ -621,8 +623,9 @@ void QMetaObjectPublisher::propertyValueChanged(const QObject *object, const int void QMetaObjectPublisher::startPropertyUpdateTimer(bool forceRestart) { - if (blockUpdates) + if (blockUpdatesStatus) return; + if (propertyUpdateIntervalTime >= 0) { if (forceRestart || !timer.isActive()) timer.start(propertyUpdateIntervalTime, this); @@ -1066,19 +1069,24 @@ void QMetaObjectPublisher::setPropertyUpdateInterval(int ms) void QMetaObjectPublisher::setBlockUpdates(bool block) { - if (blockUpdates == block) { - return; - } - blockUpdates = block; + blockUpdatesStatus = block; +} - if (!blockUpdates) { +void QMetaObjectPublisher::onBlockUpdatesChanged() +{ + if (!blockUpdatesStatus) { startPropertyUpdateTimer(); sendPendingPropertyUpdates(); } else if (timer.isActive()) { timer.stop(); } - emit blockUpdatesChanged(block); + emit blockUpdatesChanged(blockUpdatesStatus); +} + +bool QMetaObjectPublisher::blockUpdates() const +{ + return blockUpdatesStatus; } void QMetaObjectPublisher::timerEvent(QTimerEvent *event) diff --git a/src/webchannel/qmetaobjectpublisher_p.h b/src/webchannel/qmetaobjectpublisher_p.h index 60a855f..a84eb52 100644 --- a/src/webchannel/qmetaobjectpublisher_p.h +++ b/src/webchannel/qmetaobjectpublisher_p.h @@ -320,6 +320,7 @@ public: * When updates are blocked, no property updates are transmitted to remote clients. */ void setBlockUpdates(bool block); + bool blockUpdates() const; Q_SIGNALS: void blockUpdatesChanged(bool block); @@ -334,6 +335,8 @@ protected: void timerEvent(QTimerEvent *) override; private: + void onBlockUpdatesChanged(); + friend class QQmlWebChannelPrivate; friend class QWebChannel; friend class TestWebChannel; @@ -353,8 +356,9 @@ private: QHash<QWebChannelAbstractTransport *, TransportState> transportState; // true when no property updates should be sent, false otherwise - bool blockUpdates; + Q_OBJECT_BINDABLE_PROPERTY(QMetaObjectPublisher, bool, blockUpdatesStatus); + QPropertyChangeHandler<std::function<void()>> blockUpdatesHandler; // true when at least one client was initialized and thus // the property updates have been initialized and the // object info map set. diff --git a/src/webchannel/qwebchannel.cpp b/src/webchannel/qwebchannel.cpp index 289001e..4752891 100644 --- a/src/webchannel/qwebchannel.cpp +++ b/src/webchannel/qwebchannel.cpp @@ -215,7 +215,7 @@ void QWebChannel::deregisterObject(QObject *object) bool QWebChannel::blockUpdates() const { Q_D(const QWebChannel); - return d->publisher->blockUpdates; + return d->publisher->blockUpdates(); } void QWebChannel::setBlockUpdates(bool block) @@ -224,6 +224,12 @@ void QWebChannel::setBlockUpdates(bool block) d->publisher->setBlockUpdates(block); } +QBindable<bool> QWebChannel::bindableBlockUpdates() +{ + Q_D(QWebChannel); + return &d->publisher->blockUpdatesStatus; +} + /*! \property QWebChannel::propertyUpdateInterval diff --git a/src/webchannel/qwebchannel.h b/src/webchannel/qwebchannel.h index c52cc64..9d51143 100644 --- a/src/webchannel/qwebchannel.h +++ b/src/webchannel/qwebchannel.h @@ -55,7 +55,8 @@ class Q_WEBCHANNEL_EXPORT QWebChannel : public QObject { Q_OBJECT Q_DISABLE_COPY(QWebChannel) - Q_PROPERTY(bool blockUpdates READ blockUpdates WRITE setBlockUpdates NOTIFY blockUpdatesChanged) + Q_PROPERTY(bool blockUpdates READ blockUpdates WRITE setBlockUpdates NOTIFY blockUpdatesChanged + BINDABLE bindableBlockUpdates) Q_PROPERTY(int propertyUpdateInterval READ propertyUpdateInterval WRITE setPropertyUpdateInterval BINDABLE bindablePropertyUpdateInterval) public: @@ -69,6 +70,7 @@ public: bool blockUpdates() const; void setBlockUpdates(bool block); + QBindable<bool> bindableBlockUpdates(); int propertyUpdateInterval() const; void setPropertyUpdateInterval(int ms); |