debbd88f8c
A ClutterGrab takes precedence over implicit grabs, so when one happens, let's check which part of the implicit grab tree is inside the new ClutterGrab. Cancel and remove the parts which aren't, and if nothing is in there anymore, cancel the whole implicit grab. Emitting crossing events correctly here is getting quite tricky: - When the implicit grab didn't get cancelled by the ClutterGrab, we simply want to emit all GRAB_NOTIFY crossings to the implicit grab, as we do with all other crossings. - When the implicit grab did get cancelled and the new ClutterGrab wants to emit ENTER crossings, we want those to be emitted to the actual targets, so cancel the implicit grab before emission. - In the last case where the implicit grab did get cancelled and the new ClutterGrab wants to emit LEAVE crossings, those should be emitted to the implicit grab again, so we cancel the grab only after the emission of those. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2342> |
||
---|---|---|
.. | ||
clutter | ||
.gitignore | ||
meson.build |