+.NH 2
+Mouse, Button and Server Grabbing
+.PP
+Some programs need to gain exclusive access to the mouse,
+a single mouse button under some circumstances,
+or the entire X server for the duration of some operation.
+.FD
+.IN "Definitions" "XGrabMouse"
+.IN "XGrabMouse"
+.IN "Mouse" "Grabbing"
+Status XGrabMouse (w, cursor, mask)
+ Window w;
+ Cursor cursor;
+ int mask; /* event mask */
+.FN
+After \fIXGrabMouse\fP is called, all future mouse events will only go to
+.IN "XSelectInput"
+windows for which the client has previously called \fIXSelectInput\fP. The
+\fIButtonPressed\fP, \fIButtonReleased\fP, \fIEnterWindow\fP,
+\fILeaveWindow\fP, \fIMouseMoved\fP,
+\fILeftDownMotion\fP, \fIMiddleDownMotion\fP,
+and \fIRightDownMotion\fP bits of the \fImask\fP
+parameter temporarily override the corresponding bits in any mask
+previously passed to \fIXSelectInput\fP; other bits in \fImask\fP are ignored.
+.PP
+.IN "XSelectInput"
+If one of the above-mentioned events occurs, and the client has not
+called \fIXSelectInput\fP on the window where the event would normally be
+sent, then the event will be sent to the window \fIw\fP, provided that the
+event is specified in
+\fImask\fP and is not \fIEnterWindow\fP or \fILeaveWindow\fP.
+.PP
+.IN "Grabbing Error"
+An error will occur if a different client has already grabbed the mouse
+and has not ungrabbed it. It is not an error for the same client to
+grab the mouse more than once without ungrabbing it in between. A
+mouse-grabbing client may want to do this in order to change the cursor
+or event mask without ungrabbing the mouse.
+.PP
+Grabbing the mouse overrides any \fIXGrabButton\fP calls previously issued by
+this or any other client, until the mouse is ungrabbed.
+.PP
+Note that this procedure returns a status and is therefore synchronous,
+even though no other values are returned.
+It returns 0 if the mouse could not be grabbed, non-zero if the
+mouse was successfully grabbed.
+.FD
+.IN "Definitions" "XGrabMouse"
+.IN "XGrabMouse"
+XUngrabMouse ()
+.FN
+\fIXUngrabMouse\fP releases hold of the mouse if it was grabbed by
+\fIXGrabMouse\fP.
+.FD
+.IN "Definitions" "XGrabButton"
+.IN "XGrabButton"
+Status XGrabButton (w, cursor, buttonMask, eventMask)
+ Window w;
+ Cursor cursor;
+ int buttonMask;
+ int eventMask;
+.FN
+After \fIXGrabButton\fP has been called, the mouse will automatically be
+grabbed whenever a particular mouse button is pressed while certain keys are
+down.
+.IN "Button Mask"
+The combination is specified in \fIbuttonMask\fP; this mask must
+have exactly one of the \fILeftMask\fP, \fIMiddleMask\fP, and \fIRightMask\fP
+bits set,
+and may have some combination of the \fIControlMask\fP, \fIMetaMask\fP,
+\fIShiftLockMask\fP and
+\fIShiftMask\fP bits set as well.
+.PP
+If the specified button is pressed while exactly the specified keys are down,
+this and all future mouse events are grabbed until all buttons are
+.IN "XGrabMouse"
+released, with events sent to windows as described under \fIXGrabMouse\fP
+above.
+.IN "Event Mask"
+The \fIeventMask\fP determines what mouse events are reported while the
+mouse is grabbed.
+.PP
+An error will occur if another client has already grabbed the same
+button/key combination and has not ungrabbed it.
+.PP
+Note that this procedure returns a status and is therefore synchronous,
+It returns 0 if the button could not be grabbed, non-zero if the
+the button was grabbed successfully.
+.FD
+.IN "Definitions" "XUngrabButton"
+.IN "XGrabButton"
+XUngrabButton (mask)
+ int mask; /* button mask; see XGrabButton */
+.FN
+\fIXUngrabButton\fP notifies the server that the client is no longer
+interested in grabbing the mouse when the specified button/key
+combination occurs.
+See \fIXGrabButton\fP for the meaning of the button
+mask bits.
+This grab is overridden by a grab mouse request.
+.FD
+.IN "XGrabServer"
+.IN "Definitions" "XGrabServer"
+.IN "Grabbing" "Server"
+XGrabServer()
+
+XUngrabServer()
+.FN
+These requests can be used to control processing of output on other
+connections by the window system server.
+No processing of requests or close downs on all other connections
+will occur while the server is grabbed.
+.PP
+.IN "Menus"
+.IN "Window" "Managers"
+This may be useful for menus or window manager programs who may want to
+preserve bits on the screen while temporarily suspending processing
+on other connections.