diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2021-04-28 11:47:23 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2021-04-28 15:08:05 +0200 |
commit | b698cbfada554fca765673e0ba246e407dc79f3d (patch) | |
tree | ba76b2184ca07c46af79c0a8a6360c114185bcce | |
parent | 1ec4d298984d90672354e7864e35af4100285525 (diff) |
Add context management for QSignalBlocker
Add __enter__/__exit__ modeled after QReadLocker.
Change-Id: I6e8f93adf4e957bd20179c902aa429fb88f2537b
Reviewed-by: Christian Tismer <tismer@stackless.com>
-rw-r--r-- | sources/pyside6/PySide6/QtCore/typesystem_core_common.xml | 7 | ||||
-rw-r--r-- | sources/pyside6/PySide6/glue/qtcore.cpp | 4 | ||||
-rw-r--r-- | sources/pyside6/tests/QtCore/blocking_signals_test.py | 7 |
3 files changed, 17 insertions, 1 deletions
diff --git a/sources/pyside6/PySide6/QtCore/typesystem_core_common.xml b/sources/pyside6/PySide6/QtCore/typesystem_core_common.xml index bd878cf16..510330ffc 100644 --- a/sources/pyside6/PySide6/QtCore/typesystem_core_common.xml +++ b/sources/pyside6/PySide6/QtCore/typesystem_core_common.xml @@ -1402,7 +1402,12 @@ <modify-function signature="unlock()" allow-thread="yes"/> </object-type> <object-type name="QMessageAuthenticationCode"/> - <object-type name="QSignalBlocker"/> + <object-type name="QSignalBlocker"> + <add-function signature="__enter__()"/> + <add-function signature="__exit__(PyObject*,PyObject*,PyObject*)"> + <inject-code file="../glue/qtcore.cpp" snippet="qsignalblocker-unblock"/> + </add-function> + </object-type> <value-type name="QStorageInfo"/> <!-- QReadWriteLock does not have a copy ctor! --> <object-type name="QReadWriteLock"> diff --git a/sources/pyside6/PySide6/glue/qtcore.cpp b/sources/pyside6/PySide6/glue/qtcore.cpp index 9709defee..e4e964e73 100644 --- a/sources/pyside6/PySide6/glue/qtcore.cpp +++ b/sources/pyside6/PySide6/glue/qtcore.cpp @@ -792,6 +792,10 @@ Py_XDECREF(result); return !result ? -1 : 0; // @snippet qbitarray-setitem +// @snippet qsignalblocker-unblock +%CPPSELF.unblock(); +// @snippet qsignalblocker-unblock + // @snippet unlock %CPPSELF.unlock(); // @snippet unlock diff --git a/sources/pyside6/tests/QtCore/blocking_signals_test.py b/sources/pyside6/tests/QtCore/blocking_signals_test.py index 87d0701b8..92382c1d4 100644 --- a/sources/pyside6/tests/QtCore/blocking_signals_test.py +++ b/sources/pyside6/tests/QtCore/blocking_signals_test.py @@ -61,6 +61,13 @@ class TestSignalsBlockedBasic(unittest.TestCase): del blocker self.assertTrue(not obj.signalsBlocked()) + def testContext(self): + obj = QObject() + self.assertTrue(not obj.signalsBlocked()) + with QSignalBlocker(obj): + self.assertTrue(obj.signalsBlocked()) + self.assertTrue(not obj.signalsBlocked()) + class TestSignalsBlocked(unittest.TestCase): '''Test case to check if the signals are really blocked''' |