The X server searches the ancestors of w from the root down, looking for a passive grab to activate. If no matching passive grab on the button exists, the X server automatically starts an active grab for the client receiving the event and sets the last-pointer-grab time to the current server time. The effect is essentially equivalent to an XGrabButton() with these client passed arguments:
Argument | Value
w | The event window
| event_mask | The client's selected pointer events on the event window
| pointer_mode | GrabModeAsync
| keyboard_mode | GrabModeAsync
| owner_events | True, on the event window, otherwise False
| confine_to | None
| cursor | None
| |
The active grab is automatically terminated when the logical state of the pointer has all buttons released. Clients can modify the active grab by calling XUngrabPointer() and XChangeActivePointerGrab().