diff options
Diffstat (limited to 'libX11/specs/libX11/CH11')
-rw-r--r-- | libX11/specs/libX11/CH11 | 1664 |
1 files changed, 0 insertions, 1664 deletions
diff --git a/libX11/specs/libX11/CH11 b/libX11/specs/libX11/CH11 deleted file mode 100644 index 09d845d35..000000000 --- a/libX11/specs/libX11/CH11 +++ /dev/null @@ -1,1664 +0,0 @@ -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining -.\" a copy of this software and associated documentation files (the -.\" "Software"), to deal in the Software without restriction, including -.\" without limitation the rights to use, copy, modify, merge, publish, -.\" distribute, sublicense, and/or sell copies of the Software, and to -.\" permit persons to whom the Software is furnished to do so, subject to -.\" the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from the X Consortium. -.\" -.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by -.\" Digital Equipment Corporation -.\" -.\" Portions Copyright \(co 1990, 1991 by -.\" Tektronix, Inc. -.\" -.\" Permission to use, copy, modify and distribute this documentation for -.\" any purpose and without fee is hereby granted, provided that the above -.\" copyright notice appears in all copies and that both that copyright notice -.\" and this permission notice appear in all copies, and that the names of -.\" Digital and Tektronix not be used in in advertising or publicity pertaining -.\" to this documentation without specific, written prior permission. -.\" Digital and Tektronix makes no representations about the suitability -.\" of this documentation for any purpose. -.\" It is provided ``as is'' without express or implied warranty. -.\" -\& -.sp 1 -.ce 3 -\s+1\fBChapter 11\fP\s-1 - -\s+1\fBEvent Handling Functions\fP\s-1 -.sp 2 -.nr H1 11 -.nr H2 0 -.nr H3 0 -.nr H4 0 -.nr H5 0 -.na -.LP -.XS -Chapter 11: Event Handling Functions -.XE -This chapter discusses the Xlib functions you can use to: -.IP \(bu 5 -Select events -.IP \(bu 5 -Handle the output buffer and the event queue -.IP \(bu 5 -Select events from the event queue -.IP \(bu 5 -Send and get events -.IP \(bu 5 -Handle protocol errors -.NT Note -Some toolkits use their own event-handling functions -and do not allow you to interchange these event-handling functions -with those in Xlib. -For further information, -see the documentation supplied with the toolkit. -.NE -.LP -Most applications simply are event loops: -they wait for an event, decide what to do with it, -execute some amount of code that results in changes to the display, -and then wait for the next event. -.NH 2 -Selecting Events -.XS -\*(SN Selecting Events -.XE -.LP -There are two ways to select the events you want reported to your client -application. -One way is to set the event_mask member of the -.PN XSetWindowAttributes -structure when you call -.PN XCreateWindow -and -.PN XChangeWindowAttributes . -Another way is to use -.PN XSelectInput . -.IN "XSelectInput" "" "@DEF@" -.sM -.FD 0 -XSelectInput\^(\^\fIdisplay\fP, \fIw\fP\^, \fIevent_mask\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - long \fIevent_mask\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Wi whose events you are interested in -.IP \fIw\fP 1i -Specifies the window \*(Wi. -.IP \fIevent_mask\fP 1i -Specifies the event mask. -.LP -.eM -The -.PN XSelectInput -function requests that the X server report the events associated with the -specified event mask. -Initially, X will not report any of these events. -Events are reported relative to a window. -If a window is not interested in a device event, it usually propagates to -the closest ancestor that is interested, -unless the do_not_propagate mask prohibits it. -.IN "Event" "propagation" -.LP -Setting the event-mask attribute of a window overrides any previous call -for the same window but not for other clients. -Multiple clients can select for the same events on the same window -with the following restrictions: -.IP \(bu 5 -Multiple clients can select events on the same window because their event masks -are disjoint. -When the X server generates an event, it reports it -to all interested clients. -.IP \(bu 5 -Only one client at a time can select -.PN CirculateRequest , -.PN ConfigureRequest , -or -.PN MapRequest -events, which are associated with -the event mask -.PN SubstructureRedirectMask . -.IP \(bu 5 -Only one client at a time can select -a -.PN ResizeRequest -event, which is associated with -the event mask -.PN ResizeRedirectMask . -.IP \(bu 5 -Only one client at a time can select a -.PN ButtonPress -event, which is associated with -the event mask -.PN ButtonPressMask . -.LP -The server reports the event to all interested clients. -.LP -.PN XSelectInput -can generate a -.PN BadWindow -error. -.NH 2 -Handling the Output Buffer -.XS -\*(SN Handling the Output Buffer -.XE -.LP -The output buffer is an area used by Xlib to store requests. -The functions described in this section flush the output buffer -if the function would block or not return an event. -That is, all requests residing in the output buffer that -have not yet been sent are transmitted to the X server. -These functions differ in the additional tasks they might perform. -.LP -.sp -To flush the output buffer, use -.PN XFlush . -.IN "XFlush" "" "@DEF@" -.sM -.FD 0 -XFlush\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -The -.PN XFlush -function -flushes the output buffer. -Most client applications need not use this function because the output -buffer is automatically flushed as needed by calls to -.PN XPending , -.PN XNextEvent , -and -.PN XWindowEvent . -.IN "XPending" -.IN "XNextEvent" -.IN "XWindowEvent" -Events generated by the server may be enqueued into the library's event queue. -.LP -.sp -To flush the output buffer and then wait until all requests have been processed, -use -.PN XSync . -.IN "XSync" "" "@DEF@" -.sM -.FD 0 -XSync\^(\^\fIdisplay\fP, \fIdiscard\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Bool \fIdiscard\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIdiscard\fP 1i -Specifies a Boolean value that indicates whether -.PN XSync -discards all events on the event queue. -.LP -.eM -The -.PN XSync -function -flushes the output buffer and then waits until all requests have been received -and processed by the X server. -Any errors generated must be handled by the error handler. -For each protocol error received by Xlib, -.PN XSync -calls the client application's error handling routine (see section 11.8.2). -Any events generated by the server are enqueued into the library's -event queue. -.LP -Finally, if you passed -.PN False , -.PN XSync -does not discard the events in the queue. -If you passed -.PN True , -.PN XSync -discards all events in the queue, -including those events that were on the queue before -.PN XSync -was called. -Client applications seldom need to call -.PN XSync . -.NH 2 -Event Queue Management -.XS -\*(SN Event Queue Management -.XE -.LP -Xlib maintains an event queue. -However, the operating system also may be buffering data -in its network connection that is not yet read into the event queue. -.LP -.sp -To check the number of events in the event queue, use -.PN XEventsQueued . -.IN "XEventsQueued" "" "@DEF@" -.sM -.FD 0 -int XEventsQueued\^(\^\fIdisplay\fP, \fImode\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fImode\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fImode\fP 1i -Specifies the mode. -You can pass -.PN QueuedAlready , -.PN QueuedAfterFlush , -or -.PN QueuedAfterReading . -.LP -.eM -If mode is -.PN QueuedAlready , -.PN XEventsQueued -returns the number of events -already in the event queue (and never performs a system call). -If mode is -.PN QueuedAfterFlush , -.PN XEventsQueued -returns the number of events already in the queue if the number is nonzero. -If there are no events in the queue, -.PN XEventsQueued -flushes the output buffer, -attempts to read more events out of the application's connection, -and returns the number read. -If mode is -.PN QueuedAfterReading , -.PN XEventsQueued -returns the number of events already in the queue if the number is nonzero. -If there are no events in the queue, -.PN XEventsQueued -attempts to read more events out of the application's connection -without flushing the output buffer and returns the number read. -.LP -.PN XEventsQueued -always returns immediately without I/O if there are events already in the -queue. -.PN XEventsQueued -with mode -.PN QueuedAfterFlush -is identical in behavior to -.PN XPending . -.PN XEventsQueued -with mode -.PN QueuedAlready -is identical to the -.PN XQLength -function. -.LP -.sp -To return the number of events that are pending, use -.PN XPending . -.IN "XPending" "" "@DEF@" -.sM -.FD 0 -int XPending\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -The -.PN XPending -function returns the number of events that have been received from the -X server but have not been removed from the event queue. -.PN XPending -is identical to -.PN XEventsQueued -with the mode -.PN QueuedAfterFlush -specified. -.NH 2 -Manipulating the Event Queue -.XS -\*(SN Manipulating the Event Queue -.XE -.LP -Xlib provides functions that let you manipulate the event queue. -This section discusses how to: -.IP \(bu 5 -Obtain events, in order, and remove them from the queue -.IP \(bu 5 -Peek at events in the queue without removing them -.IP \(bu 5 -Obtain events that match the event mask or the arbitrary -predicate procedures that you provide -.NH 3 -Returning the Next Event -.XS -\*(SN Returning the Next Event -.XE -.LP -To get the next event and remove it from the queue, use -.PN XNextEvent . -.IN "XNextEvent" "" "@DEF@" -.sM -.FD 0 -XNextEvent\^(\^\fIdisplay\fP, \fIevent_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XEvent *\fIevent_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIevent_return\fP 1i -Returns the next event in the queue. -.LP -.eM -The -.PN XNextEvent -function copies the first event from the event queue into the specified -.PN XEvent -structure and then removes it from the queue. -If the event queue is empty, -.PN XNextEvent -flushes the output buffer and blocks until an event is received. -.LP -.sp -To peek at the event queue, use -.PN XPeekEvent . -.IN "XPeekEvent" "" "@DEF@" -.sM -.FD 0 -XPeekEvent\^(\^\fIdisplay\fP, \fIevent_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XEvent *\fIevent_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIevent_return\fP 1i -Returns a copy of the matched event's associated structure. -.LP -.eM -The -.PN XPeekEvent -function returns the first event from the event queue, -but it does not remove the event from the queue. -If the queue is empty, -.PN XPeekEvent -flushes the output buffer and blocks until an event is received. -It then copies the event into the client-supplied -.PN XEvent -structure without removing it from the event queue. -.NH 3 -Selecting Events Using a Predicate Procedure -.XS -\*(SN Selecting Events Using a Predicate Procedure -.XE -.LP -Each of the functions discussed in this section requires you to -pass a predicate procedure that determines if an event matches -what you want. -Your predicate procedure must decide if the event is useful -without calling any Xlib functions. -If the predicate directly or indirectly causes the state of the event queue -to change, the result is not defined. -If Xlib has been initialized for threads, the predicate is called with -the display locked and the result of a call by the predicate to any -Xlib function that locks the display is not defined unless the caller -has first called -.PN XLockDisplay . -.LP -The predicate procedure and its associated arguments are: -.sM -.FD 0 -Bool (\^*\fIpredicate\fP\^)\^(\^\fIdisplay\fP, \fIevent\fP, \fIarg\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XEvent *\fIevent\fP\^; -.br - XPointer \fIarg\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIevent\fP 1i -Specifies the -.PN XEvent -structure. -.IP \fIarg\fP 1i -Specifies the argument passed in from the -.PN XIfEvent , -.PN XCheckIfEvent , -or -.PN XPeekIfEvent -function. -.LP -.eM -The predicate procedure is called once for each -event in the queue until it finds a match. -After finding a match, the predicate procedure must return -.PN True . -If it did not find a match, it must return -.PN False . -.LP -.sp -To check the event queue for a matching event -and, if found, remove the event from the queue, use -.PN XIfEvent . -.IN "XIfEvent" "" "@DEF@" -.sM -.FD 0 -XIfEvent\^(\^\fIdisplay\fP, \fIevent_return\fP, \fIpredicate\fP, \fIarg\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XEvent *\fIevent_return\fP\^; -.br - Bool (\^*\fIpredicate\fP\^)\^(\^)\^; -.br - XPointer \fIarg\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIevent_return\fP 1i -Returns the matched event's associated structure. -.IP \fIpredicate\fP 1i -Specifies the procedure that is to be called to determine -if the next event in the queue matches what you want. -.IP \fIarg\fP 1i -Specifies the user-supplied argument that will be passed to the predicate procedure. -.LP -.eM -The -.PN XIfEvent -function completes only when the specified predicate -procedure returns -.PN True -for an event, -which indicates an event in the queue matches. -.PN XIfEvent -flushes the output buffer if it blocks waiting for additional events. -.PN XIfEvent -removes the matching event from the queue -and copies the structure into the client-supplied -.PN XEvent -structure. -.LP -.sp -To check the event queue for a matching event without blocking, use -.PN XCheckIfEvent . -.IN "XCheckIfEvent" "" "@DEF@" -.sM -.FD 0 -Bool XCheckIfEvent\^(\^\fIdisplay\fP, \fIevent_return\fP, \fIpredicate\fP, \fIarg\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XEvent *\fIevent_return\fP\^; -.br - Bool (\^*\fIpredicate\fP\^)\^(\^)\^; -.br - XPointer \fIarg\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIevent_return\fP 1i -Returns a copy of the matched event's associated structure. -.IP \fIpredicate\fP 1i -Specifies the procedure that is to be called to determine -if the next event in the queue matches what you want. -.IP \fIarg\fP 1i -Specifies the user-supplied argument that will be passed to the predicate procedure. -.LP -.eM -When the predicate procedure finds a match, -.PN XCheckIfEvent -copies the matched event into the client-supplied -.PN XEvent -structure and returns -.PN True . -(This event is removed from the queue.) -If the predicate procedure finds no match, -.PN XCheckIfEvent -returns -.PN False , -and the output buffer will have been flushed. -All earlier events stored in the queue are not discarded. -.LP -.sp -To check the event queue for a matching event -without removing the event from the queue, use -.PN XPeekIfEvent . -.IN "XPeekIfEvent" "" "@DEF@" -.sM -.FD 0 -XPeekIfEvent\^(\^\fIdisplay\fP, \fIevent_return\fP, \fIpredicate\fP, \fIarg\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XEvent *\fIevent_return\fP\^; -.br - Bool (\^*\fIpredicate\fP\^)\^(\^)\^; -.br - XPointer \fIarg\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIevent_return\fP 1i -Returns a copy of the matched event's associated structure. -.IP \fIpredicate\fP 1i -Specifies the procedure that is to be called to determine -if the next event in the queue matches what you want. -.IP \fIarg\fP 1i -Specifies the user-supplied argument that will be passed to the predicate procedure. -.LP -.eM -The -.PN XPeekIfEvent -function returns only when the specified predicate -procedure returns -.PN True -for an event. -After the predicate procedure finds a match, -.PN XPeekIfEvent -copies the matched event into the client-supplied -.PN XEvent -structure without removing the event from the queue. -.PN XPeekIfEvent -flushes the output buffer if it blocks waiting for additional events. -.NH 3 -Selecting Events Using a Window or Event Mask -.XS -\*(SN Selecting Events Using a Window or Event Mask -.XE -.LP -The functions discussed in this section let you select events by window -or event types, allowing you to process events out of order. -.LP -.sp -To remove the next event that matches both a window and an event mask, use -.PN XWindowEvent . -.IN "XWindowEvent" "" "@DEF@" -.sM -.FD 0 -XWindowEvent\^(\^\fIdisplay\fP, \fIw\fP\^, \fIevent_mask\fP\^, \fIevent_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - long \fIevent_mask\fP\^; -.br - XEvent *\fIevent_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Wi whose events you are interested in -.IP \fIw\fP 1i -Specifies the window \*(Wi. -.IP \fIevent_mask\fP 1i -Specifies the event mask. -.IP \fIevent_return\fP 1i -Returns the matched event's associated structure. -.LP -.eM -The -.PN XWindowEvent -function searches the event queue for an event that matches both the specified -window and event mask. -When it finds a match, -.PN XWindowEvent -removes that event from the queue and copies it into the specified -.PN XEvent -structure. -The other events stored in the queue are not discarded. -If a matching event is not in the queue, -.PN XWindowEvent -flushes the output buffer and blocks until one is received. -.LP -.sp -To remove the next event that matches both a window and an event mask (if any), -use -.PN XCheckWindowEvent . -.IN "XCheckWindowEvent" -This function is similar to -.PN XWindowEvent -except that it never blocks and it returns a -.PN Bool -indicating if the event was returned. -.IN "XCheckWindowEvent" "" "@DEF@" -.sM -.FD 0 -Bool XCheckWindowEvent\^(\^\fIdisplay\fP, \fIw\fP\^, \fIevent_mask\fP\^, \fIevent_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - long \fIevent_mask\fP\^; -.br - XEvent *\fIevent_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.ds Wi whose events you are interested in -.IP \fIw\fP 1i -Specifies the window \*(Wi. -.IP \fIevent_mask\fP 1i -Specifies the event mask. -.IP \fIevent_return\fP 1i -Returns the matched event's associated structure. -.LP -.eM -The -.PN XCheckWindowEvent -function searches the event queue and then the events available -on the server connection for the first event that matches the specified window -and event mask. -If it finds a match, -.PN XCheckWindowEvent -removes that event, copies it into the specified -.PN XEvent -structure, and returns -.PN True . -The other events stored in the queue are not discarded. -If the event you requested is not available, -.PN XCheckWindowEvent -returns -.PN False , -and the output buffer will have been flushed. -.LP -.sp -To remove the next event that matches an event mask, use -.PN XMaskEvent . -.IN "XMaskEvent" "" "@DEF@" -.sM -.FD 0 -XMaskEvent\^(\^\fIdisplay\fP, \fIevent_mask\fP\^, \fIevent_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - long \fIevent_mask\fP\^; -.br - XEvent *\fIevent_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIevent_mask\fP 1i -Specifies the event mask. -.IP \fIevent_return\fP 1i -Returns the matched event's associated structure. -.LP -.eM -The -.PN XMaskEvent -function searches the event queue for the events associated with the -specified mask. -When it finds a match, -.PN XMaskEvent -removes that event and copies it into the specified -.PN XEvent -structure. -The other events stored in the queue are not discarded. -If the event you requested is not in the queue, -.PN XMaskEvent -flushes the output buffer and blocks until one is received. -.LP -.sp -To return and remove the next event that matches an event mask (if any), use -.PN XCheckMaskEvent . -This function is similar to -.PN XMaskEvent -except that it never blocks and it returns a -.PN Bool -indicating if the event was returned. -.IN "XCheckMaskEvent" "" "@DEF@" -.sM -.FD 0 -Bool XCheckMaskEvent\^(\^\fIdisplay\fP, \fIevent_mask\fP\^, \fIevent_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - long \fIevent_mask\fP\^; -.br - XEvent *\fIevent_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIevent_mask\fP 1i -Specifies the event mask. -.IP \fIevent_return\fP 1i -Returns the matched event's associated structure. -.LP -.eM -The -.PN XCheckMaskEvent -function searches the event queue and then any events available on the -server connection for the first event that matches the specified mask. -If it finds a match, -.PN XCheckMaskEvent -removes that event, copies it into the specified -.PN XEvent -structure, and returns -.PN True . -The other events stored in the queue are not discarded. -If the event you requested is not available, -.PN XCheckMaskEvent -returns -.PN False , -and the output buffer will have been flushed. -.LP -.sp -To return and remove the next event in the queue that matches an event type, use -.PN XCheckTypedEvent . -.IN "XCheckTypedEvent" "" "@DEF@" -.sM -.FD 0 -Bool XCheckTypedEvent\^(\^\fIdisplay\fP, \fIevent_type\fP\^, \fIevent_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIevent_type\fP\^; -.br - XEvent *\fIevent_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIevent_type\fP 1i -Specifies the event type to be compared. - -.IP \fIevent_return\fP 1i -Returns the matched event's associated structure. -.LP -.eM -The -.PN XCheckTypedEvent -function searches the event queue and then any events available -on the server connection for the first event that matches the specified type. -If it finds a match, -.PN XCheckTypedEvent -removes that event, copies it into the specified -.PN XEvent -structure, and returns -.PN True . -The other events in the queue are not discarded. -If the event is not available, -.PN XCheckTypedEvent -returns -.PN False , -and the output buffer will have been flushed. -.LP -.sp -To return and remove the next event in the queue that matches an event type -and a window, use -.PN XCheckTypedWindowEvent . -.IN "XCheckTypedWindowEvent" "" "@DEF@" -.sM -.FD 0 -Bool XCheckTypedWindowEvent\^(\^\fIdisplay\fP, \fIw\fP\^, \fIevent_type\fP\^, \fIevent_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - int \fIevent_type\fP\^; -.br - XEvent *\fIevent_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIevent_type\fP 1i -Specifies the event type to be compared. - -.IP \fIevent_return\fP 1i -Returns the matched event's associated structure. -.LP -.eM -The -.PN XCheckTypedWindowEvent -function searches the event queue and then any events available -on the server connection for the first event that matches the specified -type and window. -If it finds a match, -.PN XCheckTypedWindowEvent -removes the event from the queue, copies it into the specified -.PN XEvent -structure, and returns -.PN True . -The other events in the queue are not discarded. -If the event is not available, -.PN XCheckTypedWindowEvent -returns -.PN False , -and the output buffer will have been flushed. -.NH 2 -Putting an Event Back into the Queue -.XS -\*(SN Putting an Event Back into the Queue -.XE -.LP -To push an event back into the event queue, use -.PN XPutBackEvent . -.IN "XPutBackEvent" "" "@DEF@" -.sM -.FD 0 -XPutBackEvent\^(\^\fIdisplay\fP, \fIevent\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - XEvent *\fIevent\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIevent\fP 1i -Specifies the event. -.LP -.eM -The -.PN XPutBackEvent -function pushes an event back onto the head of the display's event queue -by copying the event into the queue. -This can be useful if you read an event and then decide that you -would rather deal with it later. -There is no limit to the number of times in succession that you can call -.PN XPutBackEvent . -.NH 2 -Sending Events to Other Applications -.XS -\*(SN Sending Events to Other Applications -.XE -.LP -To send an event to a specified window, use -.PN XSendEvent . -.IN "XSendEvent" -This function is often used in selection processing. -For example, the owner of a selection should use -.PN XSendEvent -to send a -.PN SelectionNotify -event to a requestor when a selection has been converted -and stored as a property. -.IN "XSendEvent" "" "@DEF@" -.sM -.FD 0 -Status XSendEvent\^(\^\fIdisplay\fP, \fIw\fP\^, \fIpropagate\fP\^, \fIevent_mask\fP\^, \fIevent_send\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - Bool \fIpropagate\fP\^; -.br - long \fIevent_mask\fP\^; -.br - XEvent *\fIevent_send\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window the event is to be sent to, or -.PN PointerWindow , -or -.PN InputFocus . -.IP \fIpropagate\fP 1i -Specifies a Boolean value. -.IP \fIevent_mask\fP 1i -Specifies the event mask. -.IP \fIevent_send\fP 1i -Specifies the event that is to be sent. -.LP -.eM -The -.PN XSendEvent -function identifies the destination window, -determines which clients should receive the specified events, -and ignores any active grabs. -This function requires you to pass an event mask. -For a discussion of the valid event mask names, -see section 10.3. -This function uses the w argument to identify the destination window as follows: -.IP \(bu 5 -If w is -.PN PointerWindow , -the destination window is the window that contains the pointer. -.IP \(bu 5 -If w is -.PN InputFocus -and if the focus window contains the pointer, -the destination window is the window that contains the pointer; -otherwise, the destination window is the focus window. -.LP -To determine which clients should receive the specified events, -.PN XSendEvent -uses the propagate argument as follows: -.IP \(bu 5 -If event_mask is the empty set, -the event is sent to the client that created the destination window. -If that client no longer exists, -no event is sent. -.IP \(bu 5 -If propagate is -.PN False , -the event is sent to every client selecting on destination any of the event -types in the event_mask argument. -.IP \(bu 5 -If propagate is -.PN True -and no clients have selected on destination any of -the event types in event-mask, the destination is replaced with the -closest ancestor of destination for which some client has selected a -type in event-mask and for which no intervening window has that type in its -do-not-propagate-mask. -If no such window exists or if the window is -an ancestor of the focus window and -.PN InputFocus -was originally specified -as the destination, the event is not sent to any clients. -Otherwise, the event is reported to every client selecting on the final -destination any of the types specified in event_mask. -.LP -The event in the -.PN XEvent -structure must be one of the core events or one of the events -defined by an extension (or a -.PN BadValue -error results) so that the X server can correctly byte-swap -the contents as necessary. -The contents of the event are -otherwise unaltered and unchecked by the X server except to force send_event to -.PN True -in the forwarded event and to set the serial number in the event correctly; -therefore these fields -and the display field are ignored by -.PN XSendEvent . -.LP -.PN XSendEvent -returns zero if the conversion to wire protocol format failed -and returns nonzero otherwise. -.LP -.PN XSendEvent -can generate -.PN BadValue -and -.PN BadWindow -errors. -.NH 2 -Getting Pointer Motion History -.XS -\*(SN Getting Pointer Motion History -.XE -.LP -Some X server implementations will maintain a more complete -history of pointer motion than is reported by event notification. -The pointer position at each pointer hardware interrupt may be -stored in a buffer for later retrieval. -This buffer is called the motion history buffer. -For example, a few applications, such as paint programs, -want to have a precise history of where the pointer -traveled. -However, this historical information is highly excessive for most applications. -.LP -.sp -To determine the approximate maximum number of elements in the motion buffer, -use -.PN XDisplayMotionBufferSize . -.IN "XDisplayMotionBufferSize" "" "@DEF@" -.sM -.FD 0 -unsigned long XDisplayMotionBufferSize\^(\^\fIdisplay\fP\^) -.br - Display *\fIdisplay\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.LP -.eM -The server may retain the recent history of the pointer motion -and do so to a finer granularity than is reported by -.PN MotionNotify -events. -The -.PN XGetMotionEvents -function makes this history available. -.LP -.sp -To get the motion history for a specified window and time, use -.PN XGetMotionEvents . -.IN "XGetMotionEvents" "" "@DEF@" -.sM -.FD 0 -XTimeCoord *XGetMotionEvents\^(\^\fIdisplay\fP, \fIw\fP\^, \fIstart\fP\^, \fIstop\fP\^, \fInevents_return\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - Window \fIw\fP\^; -.br - Time \fIstart\fP\^, \fIstop\fP\^; -.br - int *\fInevents_return\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIw\fP 1i -Specifies the window. -.IP \fIstart\fP 1i -.br -.ns -.IP \fIstop\fP 1i -Specify the time interval in which the events are returned from the motion -history buffer. -You can pass a timestamp or -.PN CurrentTime . -.IP \fInevents_return\fP 1i -Returns the number of events from the motion history buffer. -.LP -.eM -The -.PN XGetMotionEvents -function returns all events in the motion history buffer that fall between the -specified start and stop times, inclusive, and that have coordinates -that lie within the specified window (including its borders) at its present -placement. -If the server does not support motion history, -if the start time is later than the stop time, -or if the start time is in the future, -no events are returned; -.PN XGetMotionEvents -returns NULL. -If the stop time is in the future, it is equivalent to specifying -.PN CurrentTime . -The return type for this function is a structure defined as follows: -.LP -.IN "XTimeCoord" "" "@DEF@" -.sM -.Ds 0 -.TA .5i -.ta .5i -typedef struct { - Time time; - short x, y; -} XTimeCoord; -.De -.LP -.eM -The time member is set to the time, in milliseconds. -The x and y members are set to the coordinates of the pointer and -are reported relative to the origin -of the specified window. -To free the data returned from this call, use -.PN XFree . -.LP -.PN XGetMotionEvents -can generate a -.PN BadWindow -error. -.NH 2 -Handling Protocol Errors -.XS -\*(SN Handling Protocol Errors -.XE -.LP -Xlib provides functions that you can use to enable or disable synchronization -and to use the default error handlers. -.NH 3 -Enabling or Disabling Synchronization -.XS -\*(SN Enabling or Disabling Synchronization -.XE -.LP -When debugging X applications, -it often is very convenient to require Xlib to behave synchronously -so that errors are reported as they occur. -The following function lets you disable or enable synchronous behavior. -Note that graphics may occur 30 or more times more slowly when -synchronization is enabled. -.IN "_Xdebug" -On POSIX-conformant systems, -there is also a global variable -.PN _Xdebug -that, if set to nonzero before starting a program under a debugger, will force -synchronous library behavior. -.LP -After completing their work, -all Xlib functions that generate protocol requests call what is known as -an after function. -.PN XSetAfterFunction -sets which function is to be called. -.IN "XSetAfterFunction" "" "@DEF@" -.sM -.FD 0 -int (*XSetAfterFunction\^(\^\fIdisplay\fP, \fIprocedure\fP\^))() -.br - Display *\fIdisplay\fP\^; -.br - int (\^*\^\fIprocedure\fP\^)\^(); -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIprocedure\fP 1i -Specifies the procedure to be called. -.LP -.eM -The specified procedure is called with only a display pointer. -.PN XSetAfterFunction -returns the previous after function. -.LP -To enable or disable synchronization, use -.PN XSynchronize . -.IN "Debugging" "synchronous mode" -.IN "XSynchronize" "" "@DEF@" -.sM -.FD 0 -int (*XSynchronize\^(\^\fIdisplay\fP, \fIonoff\fP\^)\^)() -.br - Display *\fIdisplay\fP\^; -.br - Bool \fIonoff\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIonoff\fP 1i -Specifies a Boolean value that indicates whether to enable -or disable synchronization. -.LP -.eM -The -.PN XSynchronize -function returns -the previous after function. -If onoff is -.PN True , -.PN XSynchronize -turns on synchronous behavior. -If onoff is -.PN False , -.PN XSynchronize -turns off synchronous behavior. -.NH 3 -Using the Default Error Handlers -.XS -\*(SN Using the Default Error Handlers -.XE -.LP -.IN "Debugging" "error handlers" -.IN "Error" "handlers" -There are two default error handlers in Xlib: -one to handle typically fatal conditions (for example, -the connection to a display server dying because a machine crashed) -and one to handle protocol errors from the X server. -These error handlers can be changed to user-supplied routines if you -prefer your own error handling and can be changed as often as you like. -If either function is passed a NULL pointer, it will -reinvoke the default handler. -The action of the default handlers is to print an explanatory -message and exit. -.LP -.sp -To set the error handler, use -.PN XSetErrorHandler . -.IN "XSetErrorHandler" "" "@DEF@" -.sM -.FD 0 -int (*XSetErrorHandler\^(\^\fIhandler\fP\^)\^)\^(\^) -.br - int (\^*\^\fIhandler\fP\^)\^(Display *, XErrorEvent *) -.FN -.IP \fIhandler\fP 1i -Specifies the program's supplied error handler. -.LP -.eM -Xlib generally calls the program's -supplied error handler whenever an error is received. -It is not called on -.PN BadName -errors from -.PN OpenFont , -.PN LookupColor , -or -.PN AllocNamedColor -protocol requests or on -.PN BadFont -errors from a -.PN QueryFont -protocol request. -These errors generally are reflected back to the program through the -procedural interface. -Because this condition is not assumed to be fatal, -it is acceptable for your error handler to return; -the returned value is ignored. -However, the error handler should not -call any functions (directly or indirectly) on the display -that will generate protocol requests or that will look for input events. -The previous error handler is returned. -.LP -The -.PN XErrorEvent -structure contains: -.IN "Debugging" "error event" -.LP -.IN "XErrorEvent" "" "@DEF" -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { - int type; - Display *display; /* Display the event was read from */ - unsigned long serial; /* serial number of failed request */ - unsigned char error_code; /* error code of failed request */ - unsigned char request_code; /* Major op-code of failed request */ - unsigned char minor_code; /* Minor op-code of failed request */ - XID resourceid; /* resource id */ -} XErrorEvent; -.De -.LP -.IN "Serial Number" -The serial member is the number of requests, starting from one, -sent over the network connection since it was opened. -It is the number that was the value of -.PN NextRequest -immediately before the failing call was made. -The request_code member is a protocol request -of the procedure that failed, as defined in -.hN X11/Xproto.h . -The following error codes can be returned by the functions described in this -chapter: -.br -.ne 13 -.IN "Debugging" "error numbers" -.IN "Error" "codes" -.\".CP T 3 -.\"Error Codes -.IN "BadAccess" "" "@DEF@" -.IN "BadAlloc" "" "@DEF@" -.IN "BadAtom" "" "@DEF@" -.IN "BadColor" "" "@DEF@" -.IN "BadCursor" "" "@DEF@" -.IN "BadDrawable" "" "@DEF@" -.IN "BadFont" "" "@DEF@" -.IN "BadGC" "" "@DEF@" -.IN "BadIDChoice" "" "@DEF@" -.TS H -l c -lw(1.75i) lw(4i). -_ -.sp 6p -.B -Error Code Description -.sp 6p -_ -.sp 6p -.TH -.R -T{ -.PN BadAccess -T} T{ -A client attempts to grab a key/button combination already grabbed -by another client. -.sp 3p -A client attempts to free a colormap entry that it had not already allocated -or to free an entry in a colormap that was created with all entries writable. -.sp 3p -A client attempts to store into a read-only or unallocated colormap entry. -.sp 3p -A client attempts to modify the access control list from other than the local -(or otherwise authorized) host. -.sp 3p -A client attempts to select an event type that another client -has already selected. -T} -.sp 3p -T{ -.PN BadAlloc -T} T{ -The server fails to allocate the requested resource. -Note that the explicit listing of -.PN BadAlloc -errors in requests only covers allocation errors at a very coarse level -and is not intended to (nor can it in practice hope to) cover all cases of -a server running out of allocation space in the middle of service. -The semantics when a server runs out of allocation space are left unspecified, -but a server may generate a -.PN BadAlloc -error on any request for this reason, -and clients should be prepared to receive such errors and handle or discard -them. -T} -.sp 3p -T{ -.PN BadAtom -T} T{ -A value for an atom argument does not name a defined atom. -T} -.sp 3p -T{ -.PN BadColor -T} T{ -A value for a colormap argument does not name a defined colormap. -T} -.sp 3p -T{ -.PN BadCursor -T} T{ -A value for a cursor argument does not name a defined cursor. -T} -.sp 3p -T{ -.PN BadDrawable -T} T{ -A value for a drawable argument does not name a defined window or pixmap. -T} -.sp 3p -T{ -.PN BadFont -T} T{ -A value for a font argument does not name a defined font (or, in some cases, -.PN GContext ). -T} -.sp 3p -T{ -.PN BadGC -T} T{ -A value for a -.PN GContext -argument does not name a defined -.PN GContext . -T} -.sp 3p -T{ -.PN BadIDChoice -T} T{ -The value chosen for a resource identifier either is not included in the -range assigned to the client or is already in use. -Under normal circumstances, -this cannot occur and should be considered a server or Xlib error. -T} -.sp 3p -T{ -.PN BadImplementation -T} T{ -The server does not implement some aspect of the request. -A server that generates this error for a core request is deficient. -As such, this error is not listed for any of the requests, -but clients should be prepared to receive such errors -and handle or discard them. -T} -.sp 3p -T{ -.PN BadLength -T} T{ -The length of a request is shorter or longer than that required to -contain the arguments. -This is an internal Xlib or server error. -.sp 3p -The length of a request exceeds the maximum length accepted by the server. -T} -.sp 3p -T{ -.PN BadMatch -T} T{ -In a graphics request, -the root and depth of the graphics context do not match those of the drawable. -.sp 3p -An -.PN InputOnly -window is used as a drawable. -.sp 3p -Some argument or pair of arguments has the correct type and range, -but it fails to match in some other way required by the request. -.sp 3p -An -.PN InputOnly -window lacks this attribute. -T} -.sp 3p -T{ -.PN BadName -T} T{ -A font or color of the specified name does not exist. -T} -.sp 3p -T{ -.PN BadPixmap -T} T{ -A value for a pixmap argument does not name a defined pixmap. -T} -.sp 3p -T{ -.PN BadRequest -T} T{ -The major or minor opcode does not specify a valid request. -This usually is an Xlib or server error. -T} -.sp 3p -T{ -.PN BadValue -T} T{ -Some numeric value falls outside of the range of values accepted -by the request. -Unless a specific range is specified for an argument, -the full range defined by the argument's type is accepted. -Any argument defined as a set of alternatives typically can generate -this error (due to the encoding). -T} -.sp 3p -T{ -.PN BadWindow -T} T{ -A value for a window argument does not name a defined window. -T} -.sp 6p -_ -.TE -.IN "BadImplementation" "" "@DEF@" -.IN "BadLength" "" "@DEF@" -.IN "BadMatch" "" "@DEF@" -.IN "BadName" "" "@DEF@" -.IN "BadPixmap" "" "@DEF@" -.IN "BadRequest" "" "@DEF@" -.IN "BadValue" "" "@DEF@" -.IN "BadWindow" "" "@DEF@" -.NT Note -The -.PN BadAtom , -.PN BadColor , -.PN BadCursor , -.PN BadDrawable , -.PN BadFont , -.PN BadGC , -.PN BadPixmap , -and -.PN BadWindow -errors are also used when the argument type is extended by a set of -fixed alternatives. -.NE -.sp -.LP -To obtain textual descriptions of the specified error code, use -.PN XGetErrorText . -.IN "XGetErrorText" "" "@DEF@" -.IN "Debugging" "error message strings" -.sM -.FD 0 -XGetErrorText\^(\^\fIdisplay\fP, \fIcode\fP, \fIbuffer_return\fP, \fIlength\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - int \fIcode\fP\^; -.br - char *\fIbuffer_return\fP\^; -.br - int \fIlength\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIcode\fP 1i -Specifies the error code for which you want to obtain a description. -.IP \fIbuffer_return\fP 1i -Returns the error description. -.IP \fIlength\fP 1i -Specifies the size of the buffer. -.LP -.eM -The -.PN XGetErrorText -function copies a null-terminated string describing the specified error code -into the specified buffer. -The returned text is in the encoding of the current locale. -It is recommended that you use this function to obtain an error description -because extensions to Xlib may define their own error codes -and error strings. -.LP -.sp -To obtain error messages from the error database, use -.PN XGetErrorDatabaseText . -.IN "XGetErrorDatabaseText" "" "@DEF@" -.sM -.FD 0 -XGetErrorDatabaseText\^(\^\fIdisplay\fP, \fIname\fP, \fImessage\fP, \fIdefault_string\fP, \fIbuffer_return\fP, \fIlength\fP\^) -.br - Display *\fIdisplay\fP\^; -.br - char *\fIname\fP, *\fImessage\fP\^; -.br - char *\fIdefault_string\fP\^; -.br - char *\fIbuffer_return\fP\^; -.br - int \fIlength\fP\^; -.FN -.IP \fIdisplay\fP 1i -Specifies the connection to the X server. -.IP \fIname\fP 1i -Specifies the name of the application. -.IP \fImessage\fP 1i -Specifies the type of the error message. -.IP \fIdefault_string\fP 1i -Specifies the default error message if none is found in the database. -.IP \fIbuffer_return\fP 1i -Returns the error description. -.IP \fIlength\fP 1i -Specifies the size of the buffer. -.LP -.eM -The -.PN XGetErrorDatabaseText -function returns a null-terminated message -(or the default message) from the error message -database. -Xlib uses this function internally to look up its error messages. -The text in the default_string argument is assumed -to be in the encoding of the current locale, -and the text stored in the buffer_return argument -is in the encoding of the current locale. -.LP -The name argument should generally be the name of your application. -The message argument should indicate which type of error message you want. -If the name and message are not in the Host Portable Character Encoding, -the result is implementation-dependent. -Xlib uses three predefined ``application names'' to report errors. -In these names, -uppercase and lowercase matter. -.IP XProtoError 1i -The protocol error number is used as a string for the message argument. -.IP XlibMessage 1i -These are the message strings that are used internally by the library. -.IP XRequest 1i -For a core protocol request, -the major request protocol number is used for the message argument. -For an extension request, -the extension name (as given by -.PN InitExtension ) -followed by a period (\.) and the minor request protocol number -is used for the message argument. -If no string is found in the error database, -the default_string is returned to the buffer argument. -.LP -.sp -To report an error to the user when the requested display does not exist, use -.PN XDisplayName . -.IN "XDisplayName" "" "@DEF@" -.sM -.FD 0 -char *XDisplayName\^(\^\fIstring\fP\^) -.br - char *\fIstring\fP\^; -.FN -.IP \fIstring\fP 1i -Specifies the character string. -.LP -.eM -The -.PN XDisplayName -function returns the name of the display that -.PN XOpenDisplay -would attempt to use. -If a NULL string is specified, -.PN XDisplayName -looks in the environment for the display and returns the display name that -.PN XOpenDisplay -would attempt to use. -This makes it easier to report to the user precisely which display the -program attempted to open when the initial connection attempt failed. -.LP -.sp -To handle fatal I/O errors, use -.PN XSetIOErrorHandler . -.IN "XSetIOErrorHandler" "" "@DEF@" -.sM -.FD 0 -int (*XSetIOErrorHandler\^(\^\fIhandler\fP\^)\^)\^(\^) -.br - int (\^*\^\fIhandler\fP\^)(Display *); -.FN -.IP \fIhandler\fP 1i -Specifies the program's supplied error handler. -.LP -.eM -The -.PN XSetIOErrorHandler -sets the fatal I/O error handler. -Xlib calls the program's supplied error handler if any sort of system call -error occurs (for example, the connection to the server was lost). -This is assumed to be a fatal condition, -and the called routine should not return. -If the I/O error handler does return, -the client process exits. -.LP -Note that the previous error handler is returned. -.bp |