summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <git@the-compiler.org>2017-03-01 17:30:48 +0100
committerFlorian Bruhin <git@the-compiler.org>2017-03-01 17:55:30 +0100
commitdbdb48ff71759b5899f037a268d0c08ccb053505 (patch)
treebe886d7b290f62387b12936fb2de09fc7c0d3a0f
parentb2088e711c0895335a62fe887003abc7e64103e9 (diff)
downloadqutebrowser-dbdb48ff71759b5899f037a268d0c08ccb053505.tar.gz
qutebrowser-dbdb48ff71759b5899f037a268d0c08ccb053505.zip
Move cursor to end with input elements on QtWebEngine
(cherry picked from commit bc0a9cd94da3ea25a4ec919803750aa969ac4cdb)
-rw-r--r--CHANGELOG.asciidoc1
-rw-r--r--qutebrowser/browser/webelem.py3
-rw-r--r--qutebrowser/browser/webengine/webengineelem.py7
-rw-r--r--qutebrowser/browser/webkit/webkitelem.py4
-rw-r--r--qutebrowser/javascript/webelem.js6
-rw-r--r--tests/end2end/features/hints.feature1
-rw-r--r--tests/end2end/test_insert_mode.py6
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: