From 33fbe978638ed1804fca51277c74369392419abc Mon Sep 17 00:00:00 2001 From: Jimmy Date: Sun, 20 Mar 2016 13:14:10 +1300 Subject: [PATCH] Switch browsing history away from QWebHistoryInterface. Now adds a url to browser history once we have connected and got enough data to start rendering the page. The previous approach saved urls as soon as navigation was initiated, so upon encountering a redirect the final url wasn't saved. Using layout started rather than load finished means that pages whose contents manage to load minus one troublesome asset will still be saved. --- qutebrowser/browser/history.py | 1 - qutebrowser/browser/webview.py | 8 ++++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/qutebrowser/browser/history.py b/qutebrowser/browser/history.py index e68dc610a..a0dedb468 100644 --- a/qutebrowser/browser/history.py +++ b/qutebrowser/browser/history.py @@ -212,4 +212,3 @@ def init(parent=None): """ history = WebHistory(parent) objreg.register('web-history', history) - QWebHistoryInterface.setDefaultInterface(history) diff --git a/qutebrowser/browser/webview.py b/qutebrowser/browser/webview.py index 3d2e80e4c..4166432af 100644 --- a/qutebrowser/browser/webview.py +++ b/qutebrowser/browser/webview.py @@ -145,6 +145,12 @@ class WebView(QWebView): self.loadProgress.connect(lambda p: setattr(self, 'progress', p)) objreg.get('config').changed.connect(self.on_config_changed) + @pyqtSlot() + def on_initial_layout_complete(self): + """Add url to history now that we have displayed something.""" + objreg.get('web-history').addHistoryEntry( + self.url().toDisplayString(), self.title()) + def _init_page(self): """Initialize the QWebPage used by this view.""" page = webpage.BrowserPage(self.win_id, self.tab_id, self) @@ -152,6 +158,8 @@ class WebView(QWebView): page.linkHovered.connect(self.linkHovered) page.mainFrame().loadStarted.connect(self.on_load_started) page.mainFrame().loadFinished.connect(self.on_load_finished) + page.mainFrame().initialLayoutCompleted.connect( + self.on_initial_layout_complete) page.statusBarMessage.connect( lambda msg: setattr(self, 'statusbar_message', msg)) page.networkAccessManager().sslErrors.connect(