diff options
author | Florian Bruhin <me@the-compiler.org> | 2018-09-30 22:55:17 +0200 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2018-09-30 22:55:17 +0200 |
commit | a3ae9507075b6f5fe4e58b3469e552509b643310 (patch) | |
tree | 2577ffe1f1f1795e462f6bcbd066a4463a8a66a5 | |
parent | dd41bc2f7b605156c30173c06b979a4b9db57399 (diff) | |
download | qutebrowser-a3ae9507075b6f5fe4e58b3469e552509b643310.tar.gz qutebrowser-a3ae9507075b6f5fe4e58b3469e552509b643310.zip |
Ignore click events with invalid positions
Since Qt 5.11.2, various crash logs like this popped up after clicking a
<select> element:
Traceback (most recent call last):
File ".../browser/mouse.py", line 239, in eventFilter
return self._handlers[evtype](event)
File ".../browser/mouse.py", line 121, in _handle_mouse_press
self._mousepress_insertmode_cb)
File ".../browser/webengine/webenginetab.py", line 624, in find_at_pos
assert pos.x() >= 0
AssertionError
This is probably caused by https://codereview.qt-project.org/#/c/193908/ in
some way...
-rw-r--r-- | doc/changelog.asciidoc | 1 | ||||
-rw-r--r-- | qutebrowser/browser/mouse.py | 8 | ||||
-rw-r--r-- | qutebrowser/browser/webengine/webenginetab.py | 4 |
3 files changed, 9 insertions, 4 deletions
diff --git a/doc/changelog.asciidoc b/doc/changelog.asciidoc index 037da5ee5..66c20f0ad 100644 --- a/doc/changelog.asciidoc +++ b/doc/changelog.asciidoc @@ -96,6 +96,7 @@ Fixed - Crash when doing initial run on Wayland without XWayland - Crash when trying to load an empty session file. - `:hint` with an invalid `--mode=` value now shows a proper error. +- Rare crash on Qt 5.11.2 when clicking on `<select>` elements. Removed ~~~~~~~ diff --git a/qutebrowser/browser/mouse.py b/qutebrowser/browser/mouse.py index 4667471fc..7c405a57e 100644 --- a/qutebrowser/browser/mouse.py +++ b/qutebrowser/browser/mouse.py @@ -116,9 +116,13 @@ class MouseEventFilter(QObject): self._ignore_wheel_event = True + pos = e.pos() + if pos.x() < 0 or pos.y() < 0: + log.mouse.warning("Ignoring invalid click at {}".format(pos)) + return False + if e.button() != Qt.NoButton: - self._tab.elements.find_at_pos(e.pos(), - self._mousepress_insertmode_cb) + self._tab.elements.find_at_pos(pos, self._mousepress_insertmode_cb) return False diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index 3b72719e7..b00587bf6 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -631,8 +631,8 @@ class WebEngineElements(browsertab.AbstractElements): self._tab.run_js_async(js_code, js_cb) def find_at_pos(self, pos, callback): - assert pos.x() >= 0 - assert pos.y() >= 0 + assert pos.x() >= 0, pos + assert pos.y() >= 0, pos pos /= self._tab.zoom.factor() js_code = javascript.assemble('webelem', 'find_at_pos', pos.x(), pos.y()) |