From 13d73359d4dda61f2f10c00901164c36ef512519 Mon Sep 17 00:00:00 2001 From: Jussi Timperi Date: Sat, 10 Sep 2016 16:07:29 +0300 Subject: [PATCH 1/5] QtWebKit: Handle visibility API closes #1886 --- qutebrowser/browser/webkit/webview.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/qutebrowser/browser/webkit/webview.py b/qutebrowser/browser/webkit/webview.py index ec0da7f17..67ca268fb 100644 --- a/qutebrowser/browser/webkit/webview.py +++ b/qutebrowser/browser/webkit/webview.py @@ -72,6 +72,9 @@ class WebView(QWebView): page = webpage.BrowserPage(self.win_id, self._tab_id, tab.data, parent=self) + page.setVisibilityState( + QWebPage.VisibilityStateVisible if self.isVisible() + else QWebPage.VisibilityStateHidden) self.setPage(page) mode_manager = objreg.get('mode-manager', scope='window', @@ -240,3 +243,27 @@ class WebView(QWebView): self.shutting_down.connect(menu.close) modeman.instance(self.win_id).entered.connect(menu.close) menu.exec_(e.globalPos()) + + def showEvent(self, e): + """Extend showEvent to set the page visibility state to visible. + + Args: + e: The QShowEvent. + + Return: + The superclass event return value. + """ + self.page().setVisibilityState(QWebPage.VisibilityStateVisible) + super().showEvent(e) + + def hideEvent(self, e): + """Extend hideEvent to set the page visibility state to hidden. + + Args: + e: The QHideEvent. + + Return: + The superclass event return value. + """ + self.page().setVisibilityState(QWebPage.VisibilityStateHidden) + super().hideEvent(e) From 6437a28184f81868d7f80e2bb34912b57eab5cd9 Mon Sep 17 00:00:00 2001 From: Jussi Timperi Date: Sat, 10 Sep 2016 17:55:00 +0300 Subject: [PATCH 2/5] QtWebKit: Add version checks to visibility API --- qutebrowser/browser/webkit/webview.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/qutebrowser/browser/webkit/webview.py b/qutebrowser/browser/webkit/webview.py index 67ca268fb..7faa0200d 100644 --- a/qutebrowser/browser/webkit/webview.py +++ b/qutebrowser/browser/webkit/webview.py @@ -72,9 +72,12 @@ class WebView(QWebView): page = webpage.BrowserPage(self.win_id, self._tab_id, tab.data, parent=self) - page.setVisibilityState( - QWebPage.VisibilityStateVisible if self.isVisible() - else QWebPage.VisibilityStateHidden) + + if qtutils.version_check('5.2'): + page.setVisibilityState( + page.VisibilityStateVisible if self.isVisible() + else page.VisibilityStateHidden) + self.setPage(page) mode_manager = objreg.get('mode-manager', scope='window', @@ -253,7 +256,10 @@ class WebView(QWebView): Return: The superclass event return value. """ - self.page().setVisibilityState(QWebPage.VisibilityStateVisible) + if qtutils.version_check('5.2'): + page = self.page() + page.setVisibilityState(page.VisibilityStateVisible) + super().showEvent(e) def hideEvent(self, e): @@ -265,5 +271,8 @@ class WebView(QWebView): Return: The superclass event return value. """ - self.page().setVisibilityState(QWebPage.VisibilityStateHidden) + if qtutils.version_check('5.2'): + page = self.page() + page.setVisibilityState(page.VisibilityStateHidden) + super().hideEvent(e) From 1adc308676d6c463f1b8e6ae3069efca87327f8f Mon Sep 17 00:00:00 2001 From: Jussi Timperi Date: Sun, 11 Sep 2016 13:04:58 +0300 Subject: [PATCH 3/5] Access enums by their base class --- qutebrowser/browser/webkit/webview.py | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/qutebrowser/browser/webkit/webview.py b/qutebrowser/browser/webkit/webview.py index 7faa0200d..32c980d33 100644 --- a/qutebrowser/browser/webkit/webview.py +++ b/qutebrowser/browser/webkit/webview.py @@ -73,10 +73,9 @@ class WebView(QWebView): page = webpage.BrowserPage(self.win_id, self._tab_id, tab.data, parent=self) - if qtutils.version_check('5.2'): - page.setVisibilityState( - page.VisibilityStateVisible if self.isVisible() - else page.VisibilityStateHidden) + page.setVisibilityState( + QWebPage.VisibilityStateVisible if self.isVisible() + else QWebPage.VisibilityStateHidden) self.setPage(page) @@ -256,9 +255,7 @@ class WebView(QWebView): Return: The superclass event return value. """ - if qtutils.version_check('5.2'): - page = self.page() - page.setVisibilityState(page.VisibilityStateVisible) + self.page().setVisibilityState(QWebPage.VisibilityStateVisible) super().showEvent(e) @@ -271,8 +268,6 @@ class WebView(QWebView): Return: The superclass event return value. """ - if qtutils.version_check('5.2'): - page = self.page() - page.setVisibilityState(page.VisibilityStateHidden) + self.page().setVisibilityState(QWebPage.VisibilityStateHidden) super().hideEvent(e) From 19d9ec374dcb75a69a361f6fc4a1cfe43ab8e14a Mon Sep 17 00:00:00 2001 From: Jussi Timperi Date: Sun, 11 Sep 2016 13:12:27 +0300 Subject: [PATCH 4/5] Handle the missing attribute --- qutebrowser/browser/webkit/webview.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/qutebrowser/browser/webkit/webview.py b/qutebrowser/browser/webkit/webview.py index 32c980d33..94519fa86 100644 --- a/qutebrowser/browser/webkit/webview.py +++ b/qutebrowser/browser/webkit/webview.py @@ -73,9 +73,12 @@ class WebView(QWebView): page = webpage.BrowserPage(self.win_id, self._tab_id, tab.data, parent=self) - page.setVisibilityState( - QWebPage.VisibilityStateVisible if self.isVisible() - else QWebPage.VisibilityStateHidden) + try: + page.setVisibilityState( + QWebPage.VisibilityStateVisible if self.isVisible() + else QWebPage.VisibilityStateHidden) + except AttributeError: + pass self.setPage(page) @@ -255,7 +258,10 @@ class WebView(QWebView): Return: The superclass event return value. """ - self.page().setVisibilityState(QWebPage.VisibilityStateVisible) + try: + self.page().setVisibilityState(QWebPage.VisibilityStateVisible) + except AttributeError: + pass super().showEvent(e) @@ -268,6 +274,9 @@ class WebView(QWebView): Return: The superclass event return value. """ - self.page().setVisibilityState(QWebPage.VisibilityStateHidden) + try: + self.page().setVisibilityState(QWebPage.VisibilityStateHidden) + except AttributeError: + pass super().hideEvent(e) From 41d5a9202cc7ad80e46d03372688dd88c9754552 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Sun, 11 Sep 2016 16:25:03 +0200 Subject: [PATCH 5/5] Update docs --- CHANGELOG.asciidoc | 2 ++ README.asciidoc | 1 + 2 files changed, 3 insertions(+) diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 220138205..3a1b17ebc 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -43,6 +43,8 @@ Added - New `:debug-log-level` command to change the console loglevel on-the-fly. - New `general -> yank-ignored-url-parameters` option to configure which URL parameters (like `utm_source` etc.) to strip off when yanking an URL. +- Support for the + https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API[HTML5 page visibility API] Changed ~~~~~~~ diff --git a/README.asciidoc b/README.asciidoc index 049e23306..40d9c5b7a 100644 --- a/README.asciidoc +++ b/README.asciidoc @@ -197,6 +197,7 @@ Contributors, sorted by the number of commits in descending order: * Michał Góral * Michael Ilsaas * Martin Zimmermann +* Jussi Timperi * Fritz Reichwald * Brian Jackson * sbinix