summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Farley <ryan.farley@gmx.com>2017-12-20 18:05:11 -0600
committerRyan Farley <ryan.farley@gmx.com>2017-12-21 15:35:43 -0600
commit5bfab5482839a25f4b2761134617c75caf32bb5c (patch)
treebb9f5cf375fe554a5df77996c0a367447d9e6229
parent5c00eea122eaf4c645c2eec3b3e01b9ee18c02e0 (diff)
downloadqutebrowser-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.py47
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()