From 1e4b80d1ac4b234de5d9cf139c9518d2859337db Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Thu, 15 Mar 2018 14:44:44 +0100 Subject: [PATCH] Don't emit predicted_navigation when reloading because of it When we reload because of a config change in _on_load_finished, we can't use self.reload() as no URL is set yet. Instead, we call self.openurl with the current URL. However, we need to make sure we don't emit predicted_navigation again at that point. This should (finally) fix #3718 --- qutebrowser/browser/browsertab.py | 5 +++-- qutebrowser/browser/webengine/webenginetab.py | 14 ++++++++++---- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/qutebrowser/browser/browsertab.py b/qutebrowser/browser/browsertab.py index cbcca0c00..b1fab3c9d 100644 --- a/qutebrowser/browser/browsertab.py +++ b/qutebrowser/browser/browsertab.py @@ -822,9 +822,10 @@ class AbstractTab(QWidget): def load_status(self): return self._load_status - def _openurl_prepare(self, url): + def _openurl_prepare(self, url, *, predict=True): qtutils.ensure_valid(url) - self.predicted_navigation.emit(url) + if predict: + self.predicted_navigation.emit(url) def openurl(self, url): raise NotImplementedError diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index 195ddb3c6..e9423043b 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -669,9 +669,15 @@ class WebEngineTab(browsertab.AbstractTab): self.zoom.set_factor(self._saved_zoom) self._saved_zoom = None - def openurl(self, url): + def openurl(self, url, *, predict=True): + """Open the given URL in this tab. + + Arguments: + url: The QUrl to open. + predict: If set to False, predicted_navigation is not emitted. + """ self._saved_zoom = self.zoom.factor() - self._openurl_prepare(url) + self._openurl_prepare(url, predict=predict) self._widget.load(url) def url(self, requested=False): @@ -914,10 +920,10 @@ class WebEngineTab(browsertab.AbstractTab): if ok and self._reload_url is not None: # WORKAROUND for https://bugreports.qt.io/browse/QTBUG-66656 log.config.debug( - "Reloading {} because of config change".format( + "Loading {} again because of config change".format( self._reload_url.toDisplayString())) QTimer.singleShot(100, lambda url=self._reload_url: - self.openurl(url)) + self.openurl(url, predict=False)) self._reload_url = None if not qtutils.version_check('5.10', compiled=False):