Either way it remains tricky business doing this without any knowledge about the widget that's being grabbed. I've already seen cases where you open a menu with a single mouse click and then the context menu appeared as well a short while later.
That looks as if even the standard behaviour of keeping menus open after a single click is implemented by simuling a form of tap-and-hold gesture. I ought to be able to ungrab the gesture explicitly when I receive a MouseButtonRelease event, but can't do that unless I can determine that the object didn't already grab the gesture before I subscribed it myself. R.