summaryrefslogtreecommitdiff
path: root/qutebrowser/utils/qtlog.py
diff options
context:
space:
mode:
Diffstat (limited to 'qutebrowser/utils/qtlog.py')
-rw-r--r--qutebrowser/utils/qtlog.py27
1 files changed, 26 insertions, 1 deletions
diff --git a/qutebrowser/utils/qtlog.py b/qutebrowser/utils/qtlog.py
index 2bf10f07b..8a8b7511c 100644
--- a/qutebrowser/utils/qtlog.py
+++ b/qutebrowser/utils/qtlog.py
@@ -17,10 +17,35 @@
"""Loggers and utilities related to Qt logging."""
+import contextlib
+from typing import Iterator, Optional, Callable, cast
-from qutebrowser.qt import core as qtcore
+from qutebrowser.qt import core as qtcore, machinery
@qtcore.pyqtSlot()
def shutdown_log() -> None:
qtcore.qInstallMessageHandler(None)
+
+
+@contextlib.contextmanager
+def disable_qt_msghandler() -> Iterator[None]:
+ """Contextmanager which temporarily disables the Qt message handler."""
+ old_handler = qtcore.qInstallMessageHandler(None)
+ if machinery.IS_QT6:
+ # cast str to Optional[str] to be compatible with PyQt6 type hints for
+ # qInstallMessageHandler
+ old_handler = cast(
+ Optional[
+ Callable[
+ [qtcore.QtMsgType, qtcore.QMessageLogContext, Optional[str]],
+ None
+ ]
+ ],
+ old_handler,
+ )
+
+ try:
+ yield
+ finally:
+ qtcore.qInstallMessageHandler(old_handler)