diff options
author | Thomas Hebb <tommyhebb@gmail.com> | 2020-05-20 21:04:09 -0400 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2020-06-05 17:20:26 +0200 |
commit | dcae6f1431dcf8deab1545cf3a251dd1a668ab21 (patch) | |
tree | 143337622fc921375e9d246078b5a1d47dc06708 /util | |
parent | 8bf9f5bb8b8cc980ec8373eea9c9a7c8cde73e66 (diff) |
Allow keyboard and pointer grabs to hook clear_focus()
This is necessary for some grabs, which currently have no way of knowing
when the pointer/keyboard focus has left a surface. For example, without
this, a drag-and-drop grab can erroneously drop into a window that the
cursor is no longer over.
This is the plumbing needed to properly fix swaywm/sway#5220. The
existing fix, swaywm/sway#5222, relies on every grab's `enter()` hook
allowing a `NULL` surface. This is not guaranteed by the API and, in
fact, is not the case for the xdg-shell popup grab and results in a
crash when the cursor leaves a surface and does not immediately enter
another one while a popup is open (#2161).
This fix also adds an assertion to wlr_seat_pointer_notify_enter() that
ensures it's never called with a `NULL` surface. This will make Sway
crash much more until it fixes its usage of the API, so we should land
this at the same time as a fix in Sway (which I haven't posted yet).
Diffstat (limited to 'util')
0 files changed, 0 insertions, 0 deletions