Safer way to handle `ungrab`bing canceled widgets

...so that it doesn't mess with the `dispatch` loop(s) `kivy.base` (too much).