Make qtutils.version_check strict by default
This also renames 'strict' to 'compiled' to be more descriptive. It also fixes a crash when starting qutebrowser with an older compiled Qt version which was introduced recently (calling setSpellCheckEnabled).
This commit is contained in:
parent
13b7647443
commit
6c3f90146f
@ -150,7 +150,7 @@ def _get_suggested_filename(path):
|
|||||||
"""
|
"""
|
||||||
filename = os.path.basename(path)
|
filename = os.path.basename(path)
|
||||||
filename = re.sub(r'\([0-9]+\)(?=\.|$)', '', filename)
|
filename = re.sub(r'\([0-9]+\)(?=\.|$)', '', filename)
|
||||||
if not qtutils.version_check('5.9'):
|
if not qtutils.version_check('5.9', compiled=False):
|
||||||
# https://bugreports.qt.io/browse/QTBUG-58155
|
# https://bugreports.qt.io/browse/QTBUG-58155
|
||||||
filename = urllib.parse.unquote(filename)
|
filename = urllib.parse.unquote(filename)
|
||||||
# Doing basename a *second* time because there could be a %2F in
|
# Doing basename a *second* time because there could be a %2F in
|
||||||
|
@ -240,7 +240,7 @@ def init(args):
|
|||||||
|
|
||||||
# We need to do this here as a WORKAROUND for
|
# We need to do this here as a WORKAROUND for
|
||||||
# https://bugreports.qt.io/browse/QTBUG-58650
|
# https://bugreports.qt.io/browse/QTBUG-58650
|
||||||
if not qtutils.version_check('5.9'):
|
if not qtutils.version_check('5.9', compiled=False):
|
||||||
PersistentCookiePolicy().set(config.val.content.cookies.store)
|
PersistentCookiePolicy().set(config.val.content.cookies.store)
|
||||||
Attribute(QWebEngineSettings.FullScreenSupportEnabled).set(True)
|
Attribute(QWebEngineSettings.FullScreenSupportEnabled).set(True)
|
||||||
|
|
||||||
@ -340,6 +340,6 @@ if qtutils.version_check('5.8'):
|
|||||||
MAPPINGS['spellcheck.languages'] = DictionaryLanguageSetter()
|
MAPPINGS['spellcheck.languages'] = DictionaryLanguageSetter()
|
||||||
|
|
||||||
|
|
||||||
if qtutils.version_check('5.9'):
|
if qtutils.version_check('5.9', compiled=False):
|
||||||
# https://bugreports.qt.io/browse/QTBUG-58650
|
# https://bugreports.qt.io/browse/QTBUG-58650
|
||||||
MAPPINGS['content.cookies.store'] = PersistentCookiePolicy()
|
MAPPINGS['content.cookies.store'] = PersistentCookiePolicy()
|
||||||
|
@ -412,7 +412,7 @@ class WebEngineHistory(browsertab.AbstractHistory):
|
|||||||
return self._history.goToItem(item)
|
return self._history.goToItem(item)
|
||||||
|
|
||||||
def serialize(self):
|
def serialize(self):
|
||||||
if not qtutils.version_check('5.9'):
|
if not qtutils.version_check('5.9', compiled=False):
|
||||||
# WORKAROUND for
|
# WORKAROUND for
|
||||||
# https://github.com/qutebrowser/qutebrowser/issues/2289
|
# https://github.com/qutebrowser/qutebrowser/issues/2289
|
||||||
# Don't use the history's currentItem here, because of
|
# Don't use the history's currentItem here, because of
|
||||||
@ -602,7 +602,7 @@ class WebEngineTab(browsertab.AbstractTab):
|
|||||||
def shutdown(self):
|
def shutdown(self):
|
||||||
self.shutting_down.emit()
|
self.shutting_down.emit()
|
||||||
self.action.exit_fullscreen()
|
self.action.exit_fullscreen()
|
||||||
if qtutils.version_check('5.8', exact=True):
|
if qtutils.version_check('5.8', exact=True, compiled=False):
|
||||||
# WORKAROUND for
|
# WORKAROUND for
|
||||||
# https://bugreports.qt.io/browse/QTBUG-58563
|
# https://bugreports.qt.io/browse/QTBUG-58563
|
||||||
self.search.clear()
|
self.search.clear()
|
||||||
@ -728,8 +728,8 @@ class WebEngineTab(browsertab.AbstractTab):
|
|||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
def _on_load_started(self):
|
def _on_load_started(self):
|
||||||
"""Clear search when a new load is started if needed."""
|
"""Clear search when a new load is started if needed."""
|
||||||
if (qtutils.version_check('5.9') and
|
if (qtutils.version_check('5.9', compiled=False) and
|
||||||
not qtutils.version_check('5.9.2')):
|
not qtutils.version_check('5.9.2', compiled=False)):
|
||||||
# WORKAROUND for
|
# WORKAROUND for
|
||||||
# https://bugreports.qt.io/browse/QTBUG-61506
|
# https://bugreports.qt.io/browse/QTBUG-61506
|
||||||
self.search.clear()
|
self.search.clear()
|
||||||
|
@ -49,6 +49,6 @@ class DiskCache(QNetworkDiskCache):
|
|||||||
if size is None:
|
if size is None:
|
||||||
size = 1024 * 1024 * 50 # default from QNetworkDiskCachePrivate
|
size = 1024 * 1024 * 50 # default from QNetworkDiskCachePrivate
|
||||||
# WORKAROUND for https://bugreports.qt.io/browse/QTBUG-59909
|
# WORKAROUND for https://bugreports.qt.io/browse/QTBUG-59909
|
||||||
if not qtutils.version_check('5.9'): # pragma: no cover
|
if not qtutils.version_check('5.9', compiled=False):
|
||||||
size = 0
|
size = 0 # pragma: no cover
|
||||||
self.setMaximumCacheSize(size)
|
self.setMaximumCacheSize(size)
|
||||||
|
@ -720,7 +720,7 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
tab.set_html(html)
|
tab.set_html(html)
|
||||||
log.webview.error(msg)
|
log.webview.error(msg)
|
||||||
|
|
||||||
if qtutils.version_check('5.9'):
|
if qtutils.version_check('5.9', compiled=False):
|
||||||
url_string = tab.url(requested=True).toDisplayString()
|
url_string = tab.url(requested=True).toDisplayString()
|
||||||
error_page = jinja.render(
|
error_page = jinja.render(
|
||||||
'error.html', title="Error loading {}".format(url_string),
|
'error.html', title="Error loading {}".format(url_string),
|
||||||
|
@ -170,8 +170,7 @@ def check_qt_version():
|
|||||||
"""Check if the Qt version is recent enough."""
|
"""Check if the Qt version is recent enough."""
|
||||||
from PyQt5.QtCore import PYQT_VERSION, PYQT_VERSION_STR
|
from PyQt5.QtCore import PYQT_VERSION, PYQT_VERSION_STR
|
||||||
from qutebrowser.utils import qtutils
|
from qutebrowser.utils import qtutils
|
||||||
if (not qtutils.version_check('5.7.1', strict=True) or
|
if not qtutils.version_check('5.7.1') or PYQT_VERSION < 0x050200:
|
||||||
PYQT_VERSION < 0x050200):
|
|
||||||
text = ("Fatal error: Qt >= 5.7.1 and PyQt >= 5.7 are required, "
|
text = ("Fatal error: Qt >= 5.7.1 and PyQt >= 5.7 are required, "
|
||||||
"but Qt {} / PyQt {} is installed.".format(qt_version(),
|
"but Qt {} / PyQt {} is installed.".format(qt_version(),
|
||||||
PYQT_VERSION_STR))
|
PYQT_VERSION_STR))
|
||||||
|
@ -260,7 +260,7 @@ class WrapperLayout(QLayout):
|
|||||||
self._widget = widget
|
self._widget = widget
|
||||||
container.setFocusProxy(widget)
|
container.setFocusProxy(widget)
|
||||||
widget.setParent(container)
|
widget.setParent(container)
|
||||||
if (qtutils.version_check('5.8.0', exact=True) and
|
if (qtutils.version_check('5.8.0', exact=True, compiled=False) and
|
||||||
objects.backend == usertypes.Backend.QtWebEngine and
|
objects.backend == usertypes.Backend.QtWebEngine and
|
||||||
container.window() and
|
container.window() and
|
||||||
container.window().windowHandle() and
|
container.window().windowHandle() and
|
||||||
|
@ -71,13 +71,13 @@ class QtOSError(OSError):
|
|||||||
self.qt_errno = None
|
self.qt_errno = None
|
||||||
|
|
||||||
|
|
||||||
def version_check(version, exact=False, strict=False):
|
def version_check(version, exact=False, compiled=True):
|
||||||
"""Check if the Qt runtime version is the version supplied or newer.
|
"""Check if the Qt runtime version is the version supplied or newer.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
version: The version to check against.
|
version: The version to check against.
|
||||||
exact: if given, check with == instead of >=
|
exact: if given, check with == instead of >=
|
||||||
strict: If given, also check the compiled Qt version.
|
compiled: Set to False to not check the compiled version.
|
||||||
"""
|
"""
|
||||||
# Catch code using the old API for this
|
# Catch code using the old API for this
|
||||||
assert exact not in [operator.gt, operator.lt, operator.ge, operator.le,
|
assert exact not in [operator.gt, operator.lt, operator.ge, operator.le,
|
||||||
@ -85,7 +85,7 @@ def version_check(version, exact=False, strict=False):
|
|||||||
parsed = pkg_resources.parse_version(version)
|
parsed = pkg_resources.parse_version(version)
|
||||||
op = operator.eq if exact else operator.ge
|
op = operator.eq if exact else operator.ge
|
||||||
result = op(pkg_resources.parse_version(qVersion()), parsed)
|
result = op(pkg_resources.parse_version(qVersion()), parsed)
|
||||||
if strict and result:
|
if compiled and result:
|
||||||
# v1 ==/>= parsed, now check if v2 ==/>= parsed too.
|
# v1 ==/>= parsed, now check if v2 ==/>= parsed too.
|
||||||
result = op(pkg_resources.parse_version(QT_VERSION_STR), parsed)
|
result = op(pkg_resources.parse_version(QT_VERSION_STR), parsed)
|
||||||
return result
|
return result
|
||||||
|
@ -26,7 +26,8 @@ from qutebrowser.utils import qtutils
|
|||||||
|
|
||||||
|
|
||||||
pytestmark = pytest.mark.skipif(
|
pytestmark = pytest.mark.skipif(
|
||||||
qtutils.version_check('5.7.1') and not qtutils.version_check('5.9'),
|
qtutils.version_check('5.7.1', compiled=False) and
|
||||||
|
not qtutils.version_check('5.9', compiled=False),
|
||||||
reason="QNetworkDiskCache is broken on Qt 5.7.1 and 5.8")
|
reason="QNetworkDiskCache is broken on Qt 5.7.1 and 5.8")
|
||||||
|
|
||||||
|
|
||||||
|
@ -74,11 +74,12 @@ def test_version_check(monkeypatch, qversion, compiled, version, exact,
|
|||||||
monkeypatch.setattr(qtutils, 'qVersion', lambda: qversion)
|
monkeypatch.setattr(qtutils, 'qVersion', lambda: qversion)
|
||||||
if compiled is not None:
|
if compiled is not None:
|
||||||
monkeypatch.setattr(qtutils, 'QT_VERSION_STR', compiled)
|
monkeypatch.setattr(qtutils, 'QT_VERSION_STR', compiled)
|
||||||
strict = True
|
compiled_arg = True
|
||||||
else:
|
else:
|
||||||
strict = False
|
compiled_arg = False
|
||||||
|
|
||||||
assert qtutils.version_check(version, exact, strict=strict) == expected
|
actual = qtutils.version_check(version, exact, compiled=compiled_arg)
|
||||||
|
assert actual == expected
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('version, is_new', [
|
@pytest.mark.parametrize('version, is_new', [
|
||||||
|
Loading…
Reference in New Issue
Block a user