Add a better workaround for QTBUG-54419

Whenever we open a new tab in createWindow, we now set an attribute
marking it - as soon as its URL changes the first time, we then close
and re-open it in a new tab in TabbedBrowser.
This commit is contained in:
Florian Bruhin 2016-11-13 01:38:02 +01:00
parent 67ad5c9837
commit 645a9aa6e1
3 changed files with 26 additions and 11 deletions

View File

@ -467,6 +467,7 @@ class WebEngineTab(browsertab.AbstractTab):
# init js stuff
self._init_js()
self._child_event_filter = None
self.needs_qtbug54419_workaround = False
def _init_js(self):
js_code = '\n'.join([

View File

@ -67,15 +67,6 @@ class WebEngineView(QWebEngineView):
debug_type = debug.qenum_key(QWebEnginePage, wintype)
log.webview.debug("createWindow with type {}".format(debug_type))
# WORKAROUND for https://bugreports.qt.io/browse/QTBUG-54419
vercheck = qtutils.version_check
qtbug_54419_fixed = ((vercheck('5.6.2') and not vercheck('5.7.0')) or
qtutils.version_check('5.7.1') or
os.environ.get('QUTE_QTBUG54419_PATCHED', ''))
if not qtbug_54419_fixed:
log.webview.debug("Ignoring createWindow because of QTBUG-54419")
return None
background = False
if wintype in [QWebEnginePage.WebBrowserWindow,
QWebEnginePage.WebDialog]:
@ -91,8 +82,17 @@ class WebEngineView(QWebEngineView):
tabbed_browser = objreg.get('tabbed-browser', scope='window',
window=self._win_id)
# pylint: disable=protected-access
return tabbed_browser.tabopen(background=background)._widget
tab = tabbed_browser.tabopen(background=background)
# WORKAROUND for https://bugreports.qt.io/browse/QTBUG-54419
vercheck = qtutils.version_check
qtbug54419_fixed = ((vercheck('5.6.2') and not vercheck('5.7.0')) or
qtutils.version_check('5.7.1') or
os.environ.get('QUTE_QTBUG54419_PATCHED', ''))
if not qtbug54419_fixed:
tab.needs_qtbug54419_workaround = True
return tab._widget # pylint: disable=protected-access
class WebEnginePage(QWebEnginePage):

View File

@ -515,9 +515,23 @@ class TabbedBrowser(tabwidget.TabWidget):
except TabDeletedError:
# We can get signals for tabs we already deleted...
return
if not self.page_title(idx):
self.set_page_title(idx, url.toDisplayString())
# If needed, re-open the tab as a workaround for QTBUG-54419.
# See https://bugreports.qt.io/browse/QTBUG-54419
if tab.needs_qtbug54419_workaround:
log.misc.debug("Doing QTBUG-54419 workaround for {}, "
"url {}".format(tab, url))
self.setUpdatesEnabled(False)
try:
self.tabopen(url)
self.close_tab(tab, add_undo=False)
finally:
self.setUpdatesEnabled(True)
tab.needs_qtbug54419_workaround = False
@pyqtSlot(browsertab.AbstractTab, QIcon)
def on_icon_changed(self, tab, icon):
"""Set the icon of a tab.