Implement QSignalBlocker::dismiss()
...to set m_o to nullptr and prevent an existing QSignalBlocker from touching the QObject, which it was created for. Add documentation and implement an autotest. Change-Id: Ic18e80af5a57df1928f9d36aa0ab7ad79b6525fd Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
This commit is contained in:
parent
38380de63c
commit
a7d7634f1b
@ -762,6 +762,14 @@ QMetaCallEvent* QMetaCallEvent::create_impl(QtPrivate::SlotObjUniquePtr slotObj,
|
||||
every unblock() undoes any number of reblock() calls.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn void QSignalBlocker::dismiss()
|
||||
\since 6.7
|
||||
Dismisses the QSignalBlocker. It will no longer access the QObject
|
||||
passed to its constructor. unblock(), reblock(), as well as
|
||||
~QSignalBlocker() will have no effect.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\class QObject
|
||||
\inmodule QtCore
|
||||
|
@ -454,6 +454,7 @@ public:
|
||||
|
||||
inline void reblock() noexcept;
|
||||
inline void unblock() noexcept;
|
||||
inline void dismiss() noexcept;
|
||||
|
||||
private:
|
||||
Q_DISABLE_COPY(QSignalBlocker)
|
||||
@ -518,6 +519,11 @@ void QSignalBlocker::unblock() noexcept
|
||||
m_inhibited = true;
|
||||
}
|
||||
|
||||
void QSignalBlocker::dismiss() noexcept
|
||||
{
|
||||
m_o = nullptr;
|
||||
}
|
||||
|
||||
namespace QtPrivate {
|
||||
inline QObject & deref_for_methodcall(QObject &o) { return o; }
|
||||
inline QObject & deref_for_methodcall(QObject *o) { return *o; }
|
||||
|
@ -11,6 +11,7 @@ class tst_QSignalBlocker : public QObject
|
||||
private slots:
|
||||
void signalBlocking();
|
||||
void moveAssignment();
|
||||
void dismiss();
|
||||
};
|
||||
|
||||
void tst_QSignalBlocker::signalBlocking()
|
||||
@ -133,5 +134,15 @@ void tst_QSignalBlocker::moveAssignment()
|
||||
QVERIFY(!o2.signalsBlocked());
|
||||
}
|
||||
|
||||
void tst_QSignalBlocker::dismiss()
|
||||
{
|
||||
QObject obj;
|
||||
{
|
||||
QSignalBlocker blocker(obj);
|
||||
blocker.dismiss();
|
||||
}
|
||||
QVERIFY(obj.signalsBlocked());
|
||||
}
|
||||
|
||||
QTEST_MAIN(tst_QSignalBlocker)
|
||||
#include "tst_qsignalblocker.moc"
|
||||
|
Loading…
x
Reference in New Issue
Block a user