summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <git@the-compiler.org>2017-10-14 12:10:21 +0200
committerFlorian Bruhin <git@the-compiler.org>2017-10-14 12:10:21 +0200
commitb3f395453b828ebbc9467596f14db9738f965718 (patch)
tree98995ffdd2619c064a7194c39437152dbe8bd1d7
parentd411ec1eba313bc39a430861849f5f489b40441d (diff)
downloadqutebrowser-b3f395453b828ebbc9467596f14db9738f965718.tar.gz
qutebrowser-b3f395453b828ebbc9467596f14db9738f965718.zip
Run Nvidia shader workaround earlier
We need to do it before utils.opengl_vendor(), and it fits better there anyway. This was a regression in v1.0. See #2554, #3106
-rw-r--r--qutebrowser/browser/webengine/webenginesettings.py7
-rw-r--r--qutebrowser/misc/backendproblem.py18
2 files changed, 17 insertions, 8 deletions
diff --git a/qutebrowser/browser/webengine/webenginesettings.py b/qutebrowser/browser/webengine/webenginesettings.py
index c1373a11b..47be9ffed 100644
--- a/qutebrowser/browser/webengine/webenginesettings.py
+++ b/qutebrowser/browser/webengine/webenginesettings.py
@@ -28,8 +28,6 @@ Module attributes:
"""
import os
-import ctypes
-import ctypes.util
from PyQt5.QtGui import QFont
from PyQt5.QtWebEngineWidgets import (QWebEngineSettings, QWebEngineProfile,
@@ -231,11 +229,6 @@ def init(args):
if args.enable_webengine_inspector:
os.environ['QTWEBENGINE_REMOTE_DEBUGGING'] = str(utils.random_port())
- # WORKAROUND for
- # https://bugs.launchpad.net/ubuntu/+source/python-qt4/+bug/941826
- if utils.is_linux:
- ctypes.CDLL(ctypes.util.find_library("GL"), mode=ctypes.RTLD_GLOBAL)
-
_init_profiles()
# We need to do this here as a WORKAROUND for
diff --git a/qutebrowser/misc/backendproblem.py b/qutebrowser/misc/backendproblem.py
index 5b3f3f7d7..f126ceda5 100644
--- a/qutebrowser/misc/backendproblem.py
+++ b/qutebrowser/misc/backendproblem.py
@@ -23,6 +23,8 @@ import os
import sys
import functools
import html
+import ctypes
+import ctypes.util
import attr
from PyQt5.QtCore import Qt
@@ -31,7 +33,7 @@ from PyQt5.QtWidgets import (QApplication, QDialog, QPushButton, QHBoxLayout,
from PyQt5.QtNetwork import QSslSocket
from qutebrowser.config import config
-from qutebrowser.utils import usertypes, objreg, version, qtutils, log
+from qutebrowser.utils import usertypes, objreg, version, qtutils, log, utils
from qutebrowser.misc import objects, msgbox
@@ -154,6 +156,19 @@ def _show_dialog(*args, **kwargs):
sys.exit(usertypes.Exit.err_init)
+def _nvidia_shader_workaround():
+ """Work around QOpenGLShaderProgram issues.
+
+ NOTE: This needs to be called before _handle_nouveau_graphics, or some
+ setups will segfault in version.opengl_vendor().
+
+ See https://bugs.launchpad.net/ubuntu/+source/python-qt4/+bug/941826
+ """
+ assert objects.backend == usertypes.Backend.QtWebEngine, objects.backend
+ if utils.is_linux:
+ ctypes.CDLL(ctypes.util.find_library("GL"), mode=ctypes.RTLD_GLOBAL)
+
+
def _handle_nouveau_graphics():
assert objects.backend == usertypes.Backend.QtWebEngine, objects.backend
@@ -352,6 +367,7 @@ def init():
if objects.backend == usertypes.Backend.QtWebEngine:
_handle_ssl_support()
_handle_wayland()
+ _nvidia_shader_workaround()
_handle_nouveau_graphics()
else:
assert objects.backend == usertypes.Backend.QtWebKit, objects.backend