diff options
author | Florian Bruhin <git@the-compiler.org> | 2017-03-01 17:30:48 +0100 |
---|---|---|
committer | Florian Bruhin <git@the-compiler.org> | 2017-03-01 17:55:30 +0100 |
commit | dbdb48ff71759b5899f037a268d0c08ccb053505 (patch) | |
tree | be886d7b290f62387b12936fb2de09fc7c0d3a0f | |
parent | b2088e711c0895335a62fe887003abc7e64103e9 (diff) | |
download | qutebrowser-dbdb48ff71759b5899f037a268d0c08ccb053505.tar.gz qutebrowser-dbdb48ff71759b5899f037a268d0c08ccb053505.zip |
Move cursor to end with input elements on QtWebEngine
(cherry picked from commit bc0a9cd94da3ea25a4ec919803750aa969ac4cdb)
-rw-r--r-- | CHANGELOG.asciidoc | 1 | ||||
-rw-r--r-- | qutebrowser/browser/webelem.py | 3 | ||||
-rw-r--r-- | qutebrowser/browser/webengine/webengineelem.py | 7 | ||||
-rw-r--r-- | qutebrowser/browser/webkit/webkitelem.py | 4 | ||||
-rw-r--r-- | qutebrowser/javascript/webelem.js | 6 | ||||
-rw-r--r-- | tests/end2end/features/hints.feature | 1 | ||||
-rw-r--r-- | tests/end2end/test_insert_mode.py | 6 |
7 files changed, 19 insertions, 9 deletions
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 75b3cebf1..e90327567 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -29,6 +29,7 @@ Fixed - Fixed the web inspector with QtWebEngine - Version checks when starting qutebrowser now also take the Qt version PyQt was compiled against into account - Hinting a input now doesn't select existing text anymore with QtWebKit +- The cursor now moves to the end when input elements are selected with QtWebEngine v0.10.0 ------- diff --git a/qutebrowser/browser/webelem.py b/qutebrowser/browser/webelem.py index 9c5840ff7..4c3fb3491 100644 --- a/qutebrowser/browser/webelem.py +++ b/qutebrowser/browser/webelem.py @@ -328,8 +328,7 @@ class AbstractWebElement(collections.abc.MutableMapping): def _move_text_cursor(self): """Move cursor to end after clicking.""" - if self.is_text_input() and self.is_editable(): - self._tab.caret.move_to_end_of_document() + raise NotImplementedError def _click_fake_event(self, click_target): """Send a fake click event to the element.""" diff --git a/qutebrowser/browser/webengine/webengineelem.py b/qutebrowser/browser/webengine/webengineelem.py index c82b2df11..a2bbab15b 100644 --- a/qutebrowser/browser/webengine/webengineelem.py +++ b/qutebrowser/browser/webengine/webengineelem.py @@ -157,6 +157,12 @@ class WebEngineElement(webelem.AbstractWebElement): self._id) self._tab.run_js_async(js_code) + def _move_text_cursor(self): + if self.is_text_input() and self.is_editable(): + js_code = javascript.assemble('webelem', 'move_cursor_to_end', + self._id) + self._tab.run_js_async(js_code) + def _click_editable(self, click_target): # WORKAROUND for https://bugreports.qt.io/browse/QTBUG-58515 # pylint doesn't know about Qt.MouseEventSynthesizedBySystem @@ -171,6 +177,7 @@ class WebEngineElement(webelem.AbstractWebElement): # This actually "clicks" the element by calling focus() on it in JS. js_code = javascript.assemble('webelem', 'focus', self._id) self._tab.run_js_async(js_code) + self._move_text_cursor() def _click_js(self, _click_target): settings = QWebEngineSettings.globalSettings() diff --git a/qutebrowser/browser/webkit/webkitelem.py b/qutebrowser/browser/webkit/webkitelem.py index f92fe667f..fdd2e25d4 100644 --- a/qutebrowser/browser/webkit/webkitelem.py +++ b/qutebrowser/browser/webkit/webkitelem.py @@ -300,6 +300,10 @@ class WebKitElement(webelem.AbstractWebElement): break elem = elem._parent() # pylint: disable=protected-access + def _move_text_cursor(self): + if self.is_text_input() and self.is_editable(): + self._tab.caret.move_to_end_of_document() + def _click_editable(self, click_target): ok = self._elem.evaluateJavaScript('this.focus(); true;') if ok: diff --git a/qutebrowser/javascript/webelem.js b/qutebrowser/javascript/webelem.js index 665cd4785..206cdf129 100644 --- a/qutebrowser/javascript/webelem.js +++ b/qutebrowser/javascript/webelem.js @@ -203,5 +203,11 @@ window._qutebrowser.webelem = (function() { elem.focus(); }; + funcs.move_cursor_to_end = function(id) { + var elem = elements[id]; + elem.selectionStart = elem.value.length; + elem.selectionEnd = elem.value.length; + }; + return funcs; })(); diff --git a/tests/end2end/features/hints.feature b/tests/end2end/features/hints.feature index d01126958..0d8f37102 100644 --- a/tests/end2end/features/hints.feature +++ b/tests/end2end/features/hints.feature @@ -188,7 +188,6 @@ Feature: Using hints And I run :hint Then the error "No elements found." should be shown - @qtwebengine_todo: Doesn't move the cursor to the end Scenario: Clicking input with existing text When I set general -> log-javascript-console to info And I open data/hints/input.html diff --git a/tests/end2end/test_insert_mode.py b/tests/end2end/test_insert_mode.py index 61c0d8a1e..8b9ed3aca 100644 --- a/tests/end2end/test_insert_mode.py +++ b/tests/end2end/test_insert_mode.py @@ -48,12 +48,6 @@ def test_insert_mode(file_name, elem_id, source, input_text, auto_insert, zoom, if source == 'keypress': quteproc.press_keys(input_text) elif source == 'clipboard': - if request.config.webengine: - pytest.xfail(reason="QtWebEngine TODO: caret mode is not " - "implemented") - # Note we actually run the keypress tests with QtWebEngine, as for - # some reason it selects all the text when clicking the field the - # second time. quteproc.send_cmd(':debug-set-fake-clipboard "{}"'.format(input_text)) quteproc.send_cmd(':insert-text {clipboard}') else: |