summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2022-05-11 10:36:00 +0200
committerFlorian Bruhin <me@the-compiler.org>2022-06-22 17:41:11 +0200
commit1b85c2980af48fd2a9973fe1a33b455a31b89c0f (patch)
treeb4819b48f5269de3470de615f4811a285d1a9d22
parent5bc841cde2ae9841dc7b9f4865c6fff667a2831d (diff)
downloadqutebrowser-1b85c2980af48fd2a9973fe1a33b455a31b89c0f.tar.gz
qutebrowser-1b85c2980af48fd2a9973fe1a33b455a31b89c0f.zip
backendproblem: Add check for qt-quick software rendering
-rw-r--r--qutebrowser/misc/backendproblem.py32
1 files changed, 32 insertions, 0 deletions
diff --git a/qutebrowser/misc/backendproblem.py b/qutebrowser/misc/backendproblem.py
index 86cf804c2..69303d70e 100644
--- a/qutebrowser/misc/backendproblem.py
+++ b/qutebrowser/misc/backendproblem.py
@@ -337,6 +337,37 @@ class _BackendProblemChecker:
errbox.exec()
sys.exit(usertypes.Exit.err_init)
+ def _check_software_rendering(self) -> None:
+ """WORKAROUND for https://bugreports.qt.io/browse/QTBUG-103372
+
+ Hopefully fixed with Qt 6.3.1.
+ FIXME:qt6 update
+ """
+ self._assert_backend(usertypes.Backend.QtWebEngine)
+
+ if not qtutils.version_check('6.3.0', exact=True, compiled=False):
+ return
+
+ if os.environ.get('QT_QUICK_BACKEND') != 'software':
+ return
+
+ text = ("You can instead force software rendering on the Chromium level (sets "
+ "<tt>qt.force_software_rendering</tt> to <tt>chromium</tt> instead of "
+ "<tt>qt-quick</tt>).")
+
+ button = _Button("Force Chromium software rendering",
+ 'qt.force_software_rendering',
+ 'chromium')
+ self._show_dialog(
+ backend=usertypes.Backend.QtWebEngine,
+ suggest_other_backend=False,
+ because="a Qt 6.3.0 bug causes instant crashes with Qt Quick software rendering",
+ text=text,
+ buttons=[button],
+ )
+
+ raise utils.Unreachable
+
def _assert_backend(self, backend: usertypes.Backend) -> None:
assert objects.backend == backend, objects.backend
@@ -347,6 +378,7 @@ class _BackendProblemChecker:
self._check_webengine_version()
self._handle_ssl_support()
self._handle_serviceworker_nuking()
+ self._check_software_rendering()
else:
self._assert_backend(usertypes.Backend.QtWebKit)
self._handle_ssl_support(fatal=True)