From b3f395453b828ebbc9467596f14db9738f965718 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Sat, 14 Oct 2017 12:10:21 +0200 Subject: [PATCH] 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 --- .../browser/webengine/webenginesettings.py | 7 ------- qutebrowser/misc/backendproblem.py | 18 +++++++++++++++++- 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