From ce8d15d2b01d1df0c0f291b10828eab4aa142511 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Tue, 6 Feb 2018 22:48:00 +0100 Subject: [PATCH] Simplify selection handling and remove QUTE_SELECTED_HTML It was broken at least since caret support was introduced and it was only available for QtWebKit anyways, so let's just drop it. This also makes the tab API a bit simpler. --- doc/changelog.asciidoc | 6 ++++++ doc/userscripts.asciidoc | 2 -- qutebrowser/browser/browsertab.py | 2 +- qutebrowser/browser/commands.py | 10 ++-------- qutebrowser/browser/webengine/webenginetab.py | 4 +--- qutebrowser/browser/webkit/webkittab.py | 14 ++++---------- 6 files changed, 14 insertions(+), 24 deletions(-) diff --git a/doc/changelog.asciidoc b/doc/changelog.asciidoc index 3f3b53287..448aa1be3 100644 --- a/doc/changelog.asciidoc +++ b/doc/changelog.asciidoc @@ -55,6 +55,12 @@ Fixed - `:bookmark-add "" foo` can now be used to save the current URL with a custom title. +Removed +~~~~~~~ + +- `QUTE_SELECTED_HTML` is now not set for userscripts anymore except when called + via hints. + v1.1.1 ------ diff --git a/doc/userscripts.asciidoc b/doc/userscripts.asciidoc index 7f43e969b..c2f35b026 100644 --- a/doc/userscripts.asciidoc +++ b/doc/userscripts.asciidoc @@ -45,8 +45,6 @@ In `command` mode: - `QUTE_URL`: The current URL. - `QUTE_TITLE`: The title of the current page. - `QUTE_SELECTED_TEXT`: The text currently selected on the page. -- `QUTE_SELECTED_HTML` The HTML currently selected on the page (not supported - with QtWebEngine). In `hints` mode: diff --git a/qutebrowser/browser/browsertab.py b/qutebrowser/browser/browsertab.py index add08e66f..e0435587e 100644 --- a/qutebrowser/browser/browsertab.py +++ b/qutebrowser/browser/browsertab.py @@ -392,7 +392,7 @@ class AbstractCaret(QObject): def drop_selection(self): raise NotImplementedError - def selection(self, html=False, callback=None): + def selection(self, callback=None): raise NotImplementedError def follow_selected(self, *, tab=False): diff --git a/qutebrowser/browser/commands.py b/qutebrowser/browser/commands.py index 57f6cce47..7be7937a0 100644 --- a/qutebrowser/browser/commands.py +++ b/qutebrowser/browser/commands.py @@ -1260,21 +1260,15 @@ class CommandDispatcher: """ env = { 'QUTE_MODE': 'command', + 'QUTE_SELECTED_TEXT': selection, } idx = self._current_index() if idx != -1: env['QUTE_TITLE'] = self._tabbed_browser.page_title(idx) - tab = self._tabbed_browser.currentWidget() - if tab is not None: - env['QUTE_SELECTED_TEXT'] = selection - try: - env['QUTE_SELECTED_HTML'] = tab.caret.selection(html=True) - except browsertab.UnsupportedOperationError: - pass - # FIXME:qtwebengine: If tab is None, run_async will fail! + tab = self._tabbed_browser.currentWidget() try: url = self._tabbed_browser.current_url() diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index c90481c21..f42f01c24 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -289,9 +289,7 @@ class WebEngineCaret(browsertab.AbstractCaret): def drop_selection(self): self._js_call('dropSelection') - def selection(self, html=False, callback=None): - if html: - raise browsertab.UnsupportedOperationError + def selection(self, callback=None): # Not using selectedText() as WORKAROUND for # https://bugreports.qt.io/browse/QTBUG-53134 # Even on Qt 5.10 selectedText() seems to work poorly, see diff --git a/qutebrowser/browser/webkit/webkittab.py b/qutebrowser/browser/webkit/webkittab.py index a493ce495..6c1698c85 100644 --- a/qutebrowser/browser/webkit/webkittab.py +++ b/qutebrowser/browser/webkit/webkittab.py @@ -188,7 +188,7 @@ class WebKitCaret(browsertab.AbstractCaret): settings = self._widget.settings() settings.setAttribute(QWebSettings.CaretBrowsingEnabled, True) - self.selection_enabled = bool(self._selection()) + self.selection_enabled = self._widget.hasSelection() if self._widget.isVisible(): # Sometimes the caret isn't immediately visible, but unfocusing @@ -360,14 +360,8 @@ class WebKitCaret(browsertab.AbstractCaret): def drop_selection(self): self._widget.triggerPageAction(QWebPage.MoveToNextChar) - def selection(self, html=False, callback=False): - callback(self._selection(html)) - - def _selection(self, html=False): - if html: - return self._widget.selectedHtml() - else: - return self._widget.selectedText() + def selection(self, callback): + callback(self._widget.selectedText()) def follow_selected(self, *, tab=False): if QWebSettings.globalSettings().testAttribute( @@ -377,7 +371,7 @@ class WebKitCaret(browsertab.AbstractCaret): self._tab.run_js_async( 'window.getSelection().anchorNode.parentNode.click()') else: - selection = self._selection(html=True) + selection = self._widget.selectedHtml() if not selection: return try: