diff options
author | Florian Bruhin <git@the-compiler.org> | 2017-12-26 15:45:00 +0100 |
---|---|---|
committer | Florian Bruhin <git@the-compiler.org> | 2017-12-26 15:45:00 +0100 |
commit | 73b6dea1f420e4e786e0d9d5abe66cfe2e5aa611 (patch) | |
tree | 2156636bfab45dc0e99485a2ad20b1380438c5f6 | |
parent | aa68e97922bd5a5a0eab0a85ada5616c1d8ec2ef (diff) | |
parent | 46f6336e6ea82c841060168cc2d09c490ebdb499 (diff) | |
download | qutebrowser-73b6dea1f420e4e786e0d9d5abe66cfe2e5aa611.tar.gz qutebrowser-73b6dea1f420e4e786e0d9d5abe66cfe2e5aa611.zip |
Merge remote-tracking branch 'origin/pr/3427'
-rw-r--r-- | qutebrowser/browser/webengine/webenginetab.py | 47 | ||||
-rw-r--r-- | tests/end2end/features/marks.feature | 2 |
2 files changed, 43 insertions, 6 deletions
diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index 813f1eb9c..9328698bc 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -24,7 +24,8 @@ 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 +540,15 @@ class WebEngineElements(browsertab.AbstractElements): class WebEngineTab(browsertab.AbstractTab): - """A QtWebEngine tab in the browser.""" + """A QtWebEngine tab in the browser. + + Signals: + _load_finished_fake: + Used in place of unreliable loadFinished + """ + + # WORKAROUND for https://bugreports.qt.io/browse/QTBUG-65223 + _load_finished_fake = pyqtSignal(bool) def __init__(self, *, win_id, mode_manager, private, parent=None): super().__init__(win_id=win_id, mode_manager=mode_manager, @@ -793,6 +802,24 @@ class WebEngineTab(browsertab.AbstractTab): } self.renderer_process_terminated.emit(status_map[status], exitcode) + @pyqtSlot(int) + def _on_load_progress_workaround(self, perc): + """Use loadProgress(100) to emit loadFinished(True). + + See https://bugreports.qt.io/browse/QTBUG-65223 + """ + if perc == 100 and self.load_status() != usertypes.LoadStatus.error: + self._load_finished_fake.emit(True) + + @pyqtSlot(bool) + def _on_load_finished_workaround(self, ok): + """Use only loadFinished(False). + + See https://bugreports.qt.io/browse/QTBUG-65223 + """ + if not ok: + self._load_finished_fake.emit(False) + def _connect_signals(self): view = self._widget page = view.page() @@ -801,9 +828,6 @@ class WebEngineTab(browsertab.AbstractTab): 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 +840,19 @@ 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 + if qtutils.version_check('5.10', compiled=False): + page.loadProgress.connect(self._on_load_progress_workaround) + self._load_finished_fake.connect(self._on_history_trigger) + self._load_finished_fake.connect(self._restore_zoom) + self._load_finished_fake.connect(self._on_load_finished) + page.loadFinished.connect(self._on_load_finished_workaround) + else: + # for older Qt versions which break with the above + page.loadProgress.connect(self._on_load_progress) + page.loadFinished.connect(self._on_history_trigger) + page.loadFinished.connect(self._restore_zoom) + page.loadFinished.connect(self._on_load_finished) def event_target(self): return self._widget.focusProxy() diff --git a/tests/end2end/features/marks.feature b/tests/end2end/features/marks.feature index 605bd3971..f7da07255 100644 --- a/tests/end2end/features/marks.feature +++ b/tests/end2end/features/marks.feature @@ -86,7 +86,7 @@ Feature: Setting positional marks And I wait until the scroll position changed to 10/10 Then the page should be scrolled to 10 10 - @qtwebengine_todo: Does not emit loaded signal for fragments? + @qtwebengine_skip: Does not emit loaded signal for fragments? Scenario: Jumping back after following a link When I hint with args "links normal" and follow s And I wait until data/marks.html#bottom is loaded |