From abff44def642316b223a46d54f9de78d7c9679f1 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Sat, 15 Sep 2018 20:39:35 +0200 Subject: [PATCH] Get rid of end-of-doc-workaround in caret browsing In Qt < 5.10 (and also sometimes on Windows), we get extra spaces or newlines when moving to the end of the document. However, this only happens *sometimes*, and manual testing confirms that with the current workaround, we actually lose the last char in the selection. I'm not sure what's happening there, but instead of making things worse with the workaround, let's just be a bit less strict with the checking there and accept both variants... This seems like some Chromium bug we can't do much about. --- qutebrowser/browser/webengine/webenginetab.py | 3 --- qutebrowser/javascript/caret.js | 12 ------------ tests/unit/browser/test_caret.py | 12 +++++++----- 3 files changed, 7 insertions(+), 20 deletions(-) diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index a70bf9285..36ac2a99a 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -238,11 +238,8 @@ class WebEngineCaret(browsertab.AbstractCaret): flags = set() if qtutils.version_check('5.7.1', compiled=False): flags.add('filter-prefix') - if not qtutils.version_check('5.10', compiled=False): - flags.add('end-of-doc-workaround') if utils.is_windows: flags.add('windows') - flags.add('end-of-doc-workaround') return list(flags) @pyqtSlot(usertypes.KeyMode) diff --git a/qutebrowser/javascript/caret.js b/qutebrowser/javascript/caret.js index 08d5b7382..6903fb985 100644 --- a/qutebrowser/javascript/caret.js +++ b/qutebrowser/javascript/caret.js @@ -793,13 +793,6 @@ window._qutebrowser.caret = (function() { */ CaretBrowsing.needsFilterPrefix = null; - /** - * Whether we're running on Qt < 5.10. - * There, we need some additional movement workarounds. - * @type {boolean} - */ - CaretBrowsing.needsEndOfDocWorkaround = null; - /** * Check if a node is a control that normally allows the user to interact * with it using arrow keys. We won't override the arrow keys when such a @@ -1333,8 +1326,6 @@ window._qutebrowser.caret = (function() { funcs.setFlags = (flags) => { CaretBrowsing.isWindows = flags.includes("windows"); CaretBrowsing.needsFilterPrefix = flags.includes("filter-prefix"); - CaretBrowsing.needsEndOfDocWorkaround = - flags.includes("end-of-doc-workaround"); }; funcs.disableCaret = () => { @@ -1418,9 +1409,6 @@ window._qutebrowser.caret = (function() { funcs.moveToEndOfDocument = () => { CaretBrowsing.move("forward", "documentboundary"); - if (CaretBrowsing.needsEndOfDocWorkaround) { - CaretBrowsing.move("left", "character"); - } CaretBrowsing.finishMove(); }; diff --git a/tests/unit/browser/test_caret.py b/tests/unit/browser/test_caret.py index ee134c63e..1c3c7f794 100644 --- a/tests/unit/browser/test_caret.py +++ b/tests/unit/browser/test_caret.py @@ -47,7 +47,7 @@ class Selection: self._caret = caret self._callback_checker = utils.CallbackChecker(qtbot) - def check(self, expected): + def check(self, expected, *, strip=False): """Check whether we got the expected selection. Since (especially on Windows) the selection is empty if we're too @@ -60,13 +60,15 @@ class Selection: selection = blocker.args[0] if selection: + if strip: + selection = selection.strip() assert selection == expected return self._qtbot.wait(50) - def check_multiline(self, expected): - self.check(textwrap.dedent(expected).strip()) + def check_multiline(self, expected, *, strip=False): + self.check(textwrap.dedent(expected).strip(), strip=strip) def toggle(self): with self._qtbot.wait_signal(self._caret.selection_toggled): @@ -89,7 +91,7 @@ class TestDocument: four five six vier fünf sechs - """) + """, strip=True) def test_moving_to_end_and_start(self, caret, selection): caret.move_to_end_of_document() @@ -108,7 +110,7 @@ class TestDocument: four five six vier fünf sechs - """) + """, strip=True) class TestBlock: