aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2021-04-28 11:47:23 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2021-04-28 15:08:05 +0200
commitb698cbfada554fca765673e0ba246e407dc79f3d (patch)
treeba76b2184ca07c46af79c0a8a6360c114185bcce
parent1ec4d298984d90672354e7864e35af4100285525 (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.xml7
-rw-r--r--sources/pyside6/PySide6/glue/qtcore.cpp4
-rw-r--r--sources/pyside6/tests/QtCore/blocking_signals_test.py7
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'''