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.
This commit is contained in:
parent
5c00eea122
commit
5bfab54828
@ -24,7 +24,7 @@ import functools
|
|||||||
import html as html_utils
|
import html as html_utils
|
||||||
|
|
||||||
import sip
|
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.QtGui import QKeyEvent
|
||||||
from PyQt5.QtNetwork import QAuthenticator
|
from PyQt5.QtNetwork import QAuthenticator
|
||||||
from PyQt5.QtWidgets import QApplication
|
from PyQt5.QtWidgets import QApplication
|
||||||
@ -539,7 +539,18 @@ class WebEngineElements(browsertab.AbstractElements):
|
|||||||
|
|
||||||
class WebEngineTab(browsertab.AbstractTab):
|
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):
|
def __init__(self, *, win_id, mode_manager, private, parent=None):
|
||||||
super().__init__(win_id=win_id, mode_manager=mode_manager,
|
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)
|
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):
|
def _connect_signals(self):
|
||||||
view = self._widget
|
view = self._widget
|
||||||
page = view.page()
|
page = view.page()
|
||||||
|
|
||||||
page.windowCloseRequested.connect(self.window_close_requested)
|
page.windowCloseRequested.connect(self.window_close_requested)
|
||||||
page.linkHovered.connect(self.link_hovered)
|
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.certificate_error.connect(self._on_ssl_errors)
|
||||||
page.authenticationRequired.connect(self._on_authentication_required)
|
page.authenticationRequired.connect(self._on_authentication_required)
|
||||||
page.proxyAuthenticationRequired.connect(
|
page.proxyAuthenticationRequired.connect(
|
||||||
@ -816,6 +841,14 @@ class WebEngineTab(browsertab.AbstractTab):
|
|||||||
view.renderProcessTerminated.connect(
|
view.renderProcessTerminated.connect(
|
||||||
self._on_render_process_terminated)
|
self._on_render_process_terminated)
|
||||||
view.iconChanged.connect(self.icon_changed)
|
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):
|
def event_target(self):
|
||||||
return self._widget.focusProxy()
|
return self._widget.focusProxy()
|
||||||
|
Loading…
Reference in New Issue
Block a user