diff options
author | Ryan Farley <ryan.farley@gmx.com> | 2017-12-20 18:05:11 -0600 |
---|---|---|
committer | Ryan Farley <ryan.farley@gmx.com> | 2017-12-21 15:35:43 -0600 |
commit | 5bfab5482839a25f4b2761134617c75caf32bb5c (patch) | |
tree | bb9f5cf375fe554a5df77996c0a367447d9e6229 | |
parent | 5c00eea122eaf4c645c2eec3b3e01b9ee18c02e0 (diff) | |
download | qutebrowser-5bfab5482839a25f4b2761134617c75caf32bb5c.tar.gz qutebrowser-5bfab5482839a25f4b2761134617c75caf32bb5c.zip |
supplement broken webengine load signals
This uses the much more reliable `loadProgress(100)` in place of
`loadFinished(true)` for WebEngine, with `loadProgressFake` and
`loadFinishedFake` used instead of the 'official' variants.
-rw-r--r-- | qutebrowser/browser/webengine/webenginetab.py | 47 |
1 files changed, 40 insertions, 7 deletions
diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index 813f1eb9c..10c826bd9 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -24,7 +24,7 @@ import functools import html as html_utils import sip -from PyQt5.QtCore import pyqtSlot, Qt, QEvent, QPoint, QPointF, QUrl, QTimer +from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QEvent, QPoint, QPointF, QUrl, QTimer from PyQt5.QtGui import QKeyEvent from PyQt5.QtNetwork import QAuthenticator from PyQt5.QtWidgets import QApplication @@ -539,7 +539,18 @@ class WebEngineElements(browsertab.AbstractElements): class WebEngineTab(browsertab.AbstractTab): - """A QtWebEngine tab in the browser.""" + """A QtWebEngine tab in the browser. + + Signals: + loadFinishedFake: + Used in place of unreliable loadFinished + loadProgressFake: + Used in place of loadProgress + """ + + #WORKAROUND for https://bugreports.qt.io/browse/QTBUG-65223 + loadFinishedFake = pyqtSignal(bool) + loadProgressFake = pyqtSignal(int) def __init__(self, *, win_id, mode_manager, private, parent=None): super().__init__(win_id=win_id, mode_manager=mode_manager, @@ -793,17 +804,31 @@ class WebEngineTab(browsertab.AbstractTab): } self.renderer_process_terminated.emit(status_map[status], exitcode) + @pyqtSlot(int) + def _on_load_progress_fake(self, perc): + """Use loadProgress(100) to emit loadFinished(True). + + See https://bugreports.qt.io/browse/QTBUG-65223 + """ + self.loadProgressFake.emit(perc) + if perc == 100 and self.load_status() != usertypes.LoadStatus.error: + self.loadFinishedFake.emit(True) + + @pyqtSlot(bool) + def _on_load_finished_fake(self, ok): + """Use only loadFinished(False). + + See https://bugreports.qt.io/browse/QTBUG-65223 + """ + if not ok: + self.loadFinishedFake.emit(False) + def _connect_signals(self): view = self._widget page = view.page() page.windowCloseRequested.connect(self.window_close_requested) page.linkHovered.connect(self.link_hovered) - page.loadProgress.connect(self._on_load_progress) - page.loadStarted.connect(self._on_load_started) - page.loadFinished.connect(self._on_history_trigger) - page.loadFinished.connect(self._restore_zoom) - page.loadFinished.connect(self._on_load_finished) page.certificate_error.connect(self._on_ssl_errors) page.authenticationRequired.connect(self._on_authentication_required) page.proxyAuthenticationRequired.connect( @@ -816,6 +841,14 @@ class WebEngineTab(browsertab.AbstractTab): view.renderProcessTerminated.connect( self._on_render_process_terminated) view.iconChanged.connect(self.icon_changed) + #WORKAROUND for https://bugreports.qt.io/browse/QTBUG-65223 + page.loadProgress.connect(self._on_load_progress_fake) + self.loadProgressFake.connect(self._on_load_progress) + page.loadStarted.connect(self._on_load_started) + self.loadFinishedFake.connect(self._on_history_trigger) + self.loadFinishedFake.connect(self._restore_zoom) + self.loadFinishedFake.connect(self._on_load_finished) + page.loadFinished.connect(self._on_load_finished_fake) def event_target(self): return self._widget.focusProxy() |