Document and mark workarounds.
This commit is contained in:
parent
a98a4f5a10
commit
4caec2becb
@ -207,6 +207,7 @@ class CommandDispatcher:
|
|||||||
count: The tab index to print, or None.
|
count: The tab index to print, or None.
|
||||||
"""
|
"""
|
||||||
if not qtutils.check_print_compat():
|
if not qtutils.check_print_compat():
|
||||||
|
# WORKAROUND (remove this when we bump the requirements to 5.3.0)
|
||||||
raise cmdexc.CommandError(
|
raise cmdexc.CommandError(
|
||||||
"Printing on Qt < 5.3.0 on Windows is broken, please upgrade!")
|
"Printing on Qt < 5.3.0 on Windows is broken, please upgrade!")
|
||||||
tab = self._tabs.cntwidget(count)
|
tab = self._tabs.cntwidget(count)
|
||||||
@ -224,6 +225,7 @@ class CommandDispatcher:
|
|||||||
count: The tab index to print, or None.
|
count: The tab index to print, or None.
|
||||||
"""
|
"""
|
||||||
if not qtutils.check_print_compat():
|
if not qtutils.check_print_compat():
|
||||||
|
# WORKAROUND (remove this when we bump the requirements to 5.3.0)
|
||||||
raise cmdexc.CommandError(
|
raise cmdexc.CommandError(
|
||||||
"Printing on Qt < 5.3.0 on Windows is broken, please upgrade!")
|
"Printing on Qt < 5.3.0 on Windows is broken, please upgrade!")
|
||||||
tab = self._tabs.cntwidget(count)
|
tab = self._tabs.cntwidget(count)
|
||||||
|
@ -65,7 +65,7 @@ class BrowserPage(QWebPage):
|
|||||||
self._view = view
|
self._view = view
|
||||||
|
|
||||||
if PYQT_VERSION > 0x050300:
|
if PYQT_VERSION > 0x050300:
|
||||||
# This is broken in Qt <= 5.3.0.
|
# WORKAROUND (remove this when we bump the requirements to 5.3.1)
|
||||||
# See http://www.riverbankcomputing.com/pipermail/pyqt/2014-June/034385.html
|
# See http://www.riverbankcomputing.com/pipermail/pyqt/2014-June/034385.html
|
||||||
# pylint: disable=invalid-name
|
# pylint: disable=invalid-name
|
||||||
self.javaScriptPrompt = self._javascript_prompt
|
self.javaScriptPrompt = self._javascript_prompt
|
||||||
@ -242,14 +242,19 @@ class BrowserPage(QWebPage):
|
|||||||
return super().extension(ext, opt, out)
|
return super().extension(ext, opt, out)
|
||||||
return handler(opt, out)
|
return handler(opt, out)
|
||||||
except: # pylint: disable=bare-except
|
except: # pylint: disable=bare-except
|
||||||
# Due to a bug in PyQt, exceptions inside extension() get swallowed
|
# WORKAROUND:
|
||||||
# for some reason.
|
#
|
||||||
|
# Due to a bug in PyQt, exceptions inside extension() get
|
||||||
|
# swallowed:
|
||||||
# http://www.riverbankcomputing.com/pipermail/pyqt/2014-August/034722.html
|
# http://www.riverbankcomputing.com/pipermail/pyqt/2014-August/034722.html
|
||||||
#
|
#
|
||||||
# We used to re-raise the exception with a single-shot QTimer here,
|
# We used to re-raise the exception with a single-shot QTimer here,
|
||||||
# but that lead to a strange proble with a KeyError with some
|
# but that lead to a strange proble with a KeyError with some
|
||||||
# random jinja template stuff as content. For now, we only log it,
|
# random jinja template stuff as content. For now, we only log it,
|
||||||
# so it doesn't pass 100% silently.
|
# so it doesn't pass 100% silently.
|
||||||
|
#
|
||||||
|
# FIXME: This should be fixed with PyQt 5.3.2 - re-check when it's
|
||||||
|
# out and raise the exception normally if possible.
|
||||||
log.webview.exception("Error inside WebPage::extension")
|
log.webview.exception("Error inside WebPage::extension")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@ -114,6 +114,7 @@ class ModeManager(QObject):
|
|||||||
@property
|
@property
|
||||||
def mode(self):
|
def mode(self):
|
||||||
"""Read-only property for the current mode."""
|
"""Read-only property for the current mode."""
|
||||||
|
# WORKAROUND
|
||||||
# For some reason, on Ubuntu (Python 3.3.2, PyQt 5.0.1, Qt 5.0.2) there
|
# For some reason, on Ubuntu (Python 3.3.2, PyQt 5.0.1, Qt 5.0.2) there
|
||||||
# is a lingering exception here sometimes. With this construct, we
|
# is a lingering exception here sometimes. With this construct, we
|
||||||
# clear this exception which makes no sense at all anyways.
|
# clear this exception which makes no sense at all anyways.
|
||||||
|
@ -146,6 +146,8 @@ class NetworkManager(QNetworkAccessManager):
|
|||||||
req.setRawHeader('Accept-Language'.encode('ascii'),
|
req.setRawHeader('Accept-Language'.encode('ascii'),
|
||||||
accept_language.encode('ascii'))
|
accept_language.encode('ascii'))
|
||||||
if PYQT_VERSION < 0x050301:
|
if PYQT_VERSION < 0x050301:
|
||||||
|
# WORKAROUND (remove this when we bump the requirements to 5.3.1)
|
||||||
|
#
|
||||||
# If we don't disable our message handler, we get a freeze if a
|
# If we don't disable our message handler, we get a freeze if a
|
||||||
# warning is printed due to a PyQt bug, e.g. when clicking a
|
# warning is printed due to a PyQt bug, e.g. when clicking a
|
||||||
# currency on http://ch.mouser.com/localsites/
|
# currency on http://ch.mouser.com/localsites/
|
||||||
|
@ -140,6 +140,8 @@ def fix_harfbuzz(args):
|
|||||||
|
|
||||||
IMPORTANT: This needs to be done before QWidgets is imported in any way!
|
IMPORTANT: This needs to be done before QWidgets is imported in any way!
|
||||||
|
|
||||||
|
WORKAROUND (remove this when we bump the requirements to 5.3.1)
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
args: The argparse namespace.
|
args: The argparse namespace.
|
||||||
"""
|
"""
|
||||||
|
@ -41,6 +41,7 @@ try:
|
|||||||
except ImportError:
|
except ImportError:
|
||||||
colorlog = None
|
colorlog = None
|
||||||
else:
|
else:
|
||||||
|
# WORKAROUND
|
||||||
# colorlog calls colorama.init() which we don't want, also it breaks our
|
# colorlog calls colorama.init() which we don't want, also it breaks our
|
||||||
# sys.stdout/sys.stderr if they are None. Bugreports:
|
# sys.stdout/sys.stderr if they are None. Bugreports:
|
||||||
# https://code.google.com/p/colorama/issues/detail?id=61
|
# https://code.google.com/p/colorama/issues/detail?id=61
|
||||||
|
@ -114,6 +114,7 @@ def get_args(namespace):
|
|||||||
|
|
||||||
def check_print_compat():
|
def check_print_compat():
|
||||||
"""Check if printing should work in the given Qt version."""
|
"""Check if printing should work in the given Qt version."""
|
||||||
|
# WORKAROUND (remove this when we bump the requirements to 5.3.0)
|
||||||
return not (os.name == 'nt' and version_check('5.3.0', operator.lt))
|
return not (os.name == 'nt' and version_check('5.3.0', operator.lt))
|
||||||
|
|
||||||
|
|
||||||
|
@ -232,6 +232,8 @@ def qurl_from_user_input(urlstr):
|
|||||||
IPv6, so we first try to handle it as a valid IPv6, and if that fails we
|
IPv6, so we first try to handle it as a valid IPv6, and if that fails we
|
||||||
use QUrl.fromUserInput.
|
use QUrl.fromUserInput.
|
||||||
|
|
||||||
|
WORKAROUND - https://bugreports.qt-project.org/browse/QTBUG-41089
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
urlstr: The URL as string.
|
urlstr: The URL as string.
|
||||||
|
|
||||||
|
@ -170,7 +170,7 @@ def get_standard_dir(typ):
|
|||||||
appname = qapp.applicationName()
|
appname = qapp.applicationName()
|
||||||
if (typ == QStandardPaths.ConfigLocation and
|
if (typ == QStandardPaths.ConfigLocation and
|
||||||
path.split(os.sep)[-1] != appname):
|
path.split(os.sep)[-1] != appname):
|
||||||
# Workaround for
|
# WORKAROUND - see
|
||||||
# https://bugreports.qt-project.org/browse/QTBUG-38872
|
# https://bugreports.qt-project.org/browse/QTBUG-38872
|
||||||
path = os.path.join(path, appname)
|
path = os.path.join(path, appname)
|
||||||
if not os.path.exists(path):
|
if not os.path.exists(path):
|
||||||
@ -182,6 +182,7 @@ def get_standard_dir(typ):
|
|||||||
|
|
||||||
def actute_warning():
|
def actute_warning():
|
||||||
"""Display a warning about the dead_actute issue if needed."""
|
"""Display a warning about the dead_actute issue if needed."""
|
||||||
|
# WORKAROUND (remove this when we bump the requirements to 5.3.0)
|
||||||
# Non linux OS' aren't affected
|
# Non linux OS' aren't affected
|
||||||
if not sys.platform.startswith('linux'):
|
if not sys.platform.startswith('linux'):
|
||||||
return
|
return
|
||||||
|
@ -104,7 +104,8 @@ class CompletionView(QTreeView):
|
|||||||
self.setItemsExpandable(False)
|
self.setItemsExpandable(False)
|
||||||
self.setExpandsOnDoubleClick(False)
|
self.setExpandsOnDoubleClick(False)
|
||||||
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
||||||
# QTBUG? This is a workaround for weird race conditions with invalid
|
# WORKAROUND
|
||||||
|
# This is a workaround for weird race conditions with invalid
|
||||||
# item indexes leading to segfaults in Qt.
|
# item indexes leading to segfaults in Qt.
|
||||||
#
|
#
|
||||||
# Some background: http://bugs.quassel-irc.org/issues/663
|
# Some background: http://bugs.quassel-irc.org/issues/663
|
||||||
|
@ -65,7 +65,13 @@ class TextBase(QLabel):
|
|||||||
This update the elided text after setting the text, and also works
|
This update the elided text after setting the text, and also works
|
||||||
around a weird QLabel redrawing bug where it doesn't redraw correctly
|
around a weird QLabel redrawing bug where it doesn't redraw correctly
|
||||||
when the text is empty -- we explicitely need to call repaint() to
|
when the text is empty -- we explicitely need to call repaint() to
|
||||||
resolve this. See http://stackoverflow.com/q/21890462/2085149
|
resolve this.
|
||||||
|
|
||||||
|
More info:
|
||||||
|
|
||||||
|
http://stackoverflow.com/q/21890462/2085149
|
||||||
|
https://bugreports.qt-project.org/browse/QTBUG-36945
|
||||||
|
https://codereview.qt-project.org/#/c/79181/
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
txt: The text to set (string).
|
txt: The text to set (string).
|
||||||
@ -73,6 +79,7 @@ class TextBase(QLabel):
|
|||||||
super().setText(txt)
|
super().setText(txt)
|
||||||
self._update_elided_text(self.geometry().width())
|
self._update_elided_text(self.geometry().width())
|
||||||
if not txt:
|
if not txt:
|
||||||
|
# WORKAROUND
|
||||||
self.repaint()
|
self.repaint()
|
||||||
|
|
||||||
def resizeEvent(self, e):
|
def resizeEvent(self, e):
|
||||||
|
Loading…
Reference in New Issue
Block a user