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().