diff options
Diffstat (limited to 'libXt/specs/CH11')
-rw-r--r-- | libXt/specs/CH11 | 3566 |
1 files changed, 3566 insertions, 0 deletions
diff --git a/libXt/specs/CH11 b/libXt/specs/CH11 new file mode 100644 index 000000000..55b8d92f3 --- /dev/null +++ b/libXt/specs/CH11 @@ -0,0 +1,3566 @@ +.\" $Xorg: CH11,v 1.3 2000/08/17 19:42:47 cpqbld Exp $ +.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994 +.\" 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, 1991, 1994 +.\" Digital Equipment Corporation, Maynard, Massachusetts. +.\" +.\" 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 supporting documentation, and that the name of +.\" Digital not be used in in advertising or publicity pertaining +.\" to distribution of the software without specific, written prior permission. +.\" Digital makes no representations about the suitability of the +.\" software described herein 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\fBUtility Functions\fP\s-1 +.sp 2 +.nr H1 11 +.nr H2 0 +.nr H3 0 +.nr H4 0 +.nr H5 0 +.LP +.XS +Chapter 11 \(em Utility Functions +.XE +The \*(xI provide a number of utility functions that you can use to +.IP \(bu 5 +Determine the number of elements in an array. +.IP \(bu 5 +Translate strings to widget instances. +.IP \(bu 5 +Manage memory usage. +.IP \(bu 5 +Share graphics contexts. +.IP \(bu 5 +Manipulate selections. +.IP \(bu 5 +Merge exposure events into a region. +.IP \(bu 5 +Translate widget coordinates. +.IP \(bu 5 +Locate a widget given a window id. +.IP \(bu 5 +Handle errors. +.IP \(bu 5 +Set the WM_COLORMAP_WINDOWS property. +.IP \(bu 5 +Locate files by name with string substitutions. +.IP \(bu 5 +Register callback functions for external agents. +.IP \(bu 5 +Locate all the displays of an application context. + +.NH 2 +Determining the Number of Elements in an Array +.XS +\fB\*(SN Determining the Number of Elements in an Array\fP +.XE +.LP +To determine the number of elements in a fixed-size array, use +.PN XtNumber . +.LP +.IN "XtNumber" "" "@DEF@" +.sM +.FD 0 +Cardinal XtNumber(\fIarray\fP) +.br + \fIArrayType array\fP; +.FN +.IP \fIarray\fP 1i +Specifies a fixed-size array of arbitrary type. +.LP +.eM +The +.PN XtNumber +macro returns the number of elements allocated to the array. + +.NH 2 +Translating Strings to Widget Instances +.XS +\fB\*(SN Translating Strings to Widget Instances\fP +.XE +.LP +To translate a widget name to a widget instance, use +.PN XtNameToWidget . +.LP +.IN "XtNameToWidget" "" "@DEF@" +.sM +.FD 0 +Widget XtNameToWidget(\fIreference\fP, \fInames\fP) +.br + Widget \fIreference\fP; +.br + String \fInames\fP; +.FN +.IP \fIreference\fP 1i +Specifies the widget from which the search is to start. \*(cI +.IP \fInames\fP 1i +Specifies the partially qualified name of the desired widget. +.LP +.eM +The +.PN XtNameToWidget +function searches for a descendant of the \fIreference\fP +widget whose name matches the specified names. The \fInames\fP parameter +specifies a simple object name or a series of simple object name +components separated by periods or asterisks. +.PN XtNameToWidget +returns the descendant with the shortest name matching the specification +according to the following rules, where child is either a pop-up child +or a normal child if the widget's class is a subclass of +Composite : +.IP \(bu 5 +Enumerate the object subtree rooted at the reference widget in +breadth-first order, qualifying the name of each object with the +names of all its ancestors up to, but not including, the reference +widget. The ordering between children of a common parent is +not defined. +.IP \(bu 5 +Return the first object in the enumeration that matches the +specified name, where each component of \fInames\fP matches exactly the +corresponding component of the qualified object name and asterisk +matches any series of components, including none. +.IP \(bu 5 +If no match is found, return NULL. +.LP +Since breadth-first traversal is specified, the descendant with the +shortest matching name (i.e., the fewest number of components), if any, +will always be returned. However, since the order of enumeration of +children is undefined and since the \*(xI do not require that all +children of a widget have unique names, +.PN XtNameToWidget +may return any +child that matches if there are multiple objects in the subtree with +the same name. Consecutive separators (periods or asterisks) +including at least one asterisk are treated as a single asterisk. +Consecutive periods are treated as a single period. + +.NH 2 +Managing Memory Usage +.XS +\fB\*(SN Managing Memory Usage\fP +.XE +.LP +The \*(xI memory management functions provide uniform checking for +null pointers and error reporting on memory allocation errors. +These functions are completely compatible with their standard C language +runtime counterparts +.PN malloc , +.PN calloc , +.PN realloc , +and +.PN free +with the following added functionality: +.IP \(bu 5 +.PN XtMalloc , +.PN XtCalloc , +and +.PN XtRealloc +give an error if there is not enough memory. +.IP \(bu 5 +.PN XtFree +simply returns if passed a NULL pointer. +.IP \(bu 5 +.PN XtRealloc +simply allocates new storage if passed a NULL pointer. +.LP +See the standard C library documentation on +.PN malloc , +.PN calloc , +.PN realloc , +and +.PN free +for more information. +.sp +.LP +To allocate storage, use +.PN XtMalloc . +.LP +.IN "XtMalloc" "" "@DEF@" +.sM +.FD 0 +char *XtMalloc(\fIsize\fP) +.br + Cardinal \fIsize\fP; +.FN +.IP \fIsize\fP 1i +Specifies the number of bytes desired. +.LP +.eM +The +.PN XtMalloc +function returns a pointer to a block of storage of at least +the specified \fIsize\fP bytes. +If there is insufficient memory to allocate the new block, +.PN XtMalloc +calls +.PN XtErrorMsg . +.sp +.LP +To allocate and initialize an array, use +.PN XtCalloc . +.LP +.IN "XtCalloc" "" "@DEF@" +.sM +.FD 0 +char *XtCalloc(\fInum\fP, \fIsize\fP) +.br + Cardinal \fInum\fP; +.br + Cardinal \fIsize\fP; +.FN +.IP \fInum\fP 1i +Specifies the number of array elements to allocate. +.IP \fIsize\fP 1i +Specifies the size of each array element in bytes. +.LP +.eM +The +.PN XtCalloc +function allocates space for the specified number of array elements +of the specified size and initializes the space to zero. +If there is insufficient memory to allocate the new block, +.PN XtCalloc +calls +.PN XtErrorMsg . +.PN XtCalloc +returns the address of the allocated storage. +.sp +.LP +To change the size of an allocated block of storage, use +.PN XtRealloc . +.LP +.IN "XtRealloc" "" "@DEF@" +.sM +.FD 0 +char *XtRealloc(\fIptr\fP, \fInum\fP) +.br + char *\fIptr\fP; +.br + Cardinal \fInum\fP; +.FN +.IP \fIptr\fP 1i +Specifies a pointer to the old storage allocated with +.PN XtMalloc , +.PN XtCalloc , +or +.PN XtRealloc , +or NULL. +.IP \fInum\fP 1i +Specifies number of bytes desired in new storage. +.LP +.eM +The +.PN XtRealloc +function changes the size of a block of storage, possibly moving it. +Then it copies the old contents (or as much as will fit) into the new block +and frees the old block. +If there is insufficient memory to allocate the new block, +.PN XtRealloc +calls +.PN XtErrorMsg . +If \fIptr\fP is NULL, +.PN XtRealloc +simply calls +.PN XtMalloc . +.PN XtRealloc +then returns the address of the new block. +.sp +.LP +To free an allocated block of storage, use +.PN XtFree . +.LP +.IN "XtFree" "" "@DEF@" +.sM +.FD 0 +void XtFree(\fIptr\fP) +.br + char *\fIptr\fP; +.FN +.IP \fIptr\fP 1i +Specifies a pointer to a block of storage allocated with +.PN XtMalloc , +.PN XtCalloc , +or +.PN XtRealloc , +or NULL. +.LP +.eM +The +.PN XtFree +function returns storage, allowing it to be reused. +If \fIptr\fP is NULL, +.PN XtFree +returns immediately. +.sp +.LP +To allocate storage for a new instance of a type, use +.PN XtNew . +.LP +.IN "XtNew" "" "@DEF@" +.sM +.FD 0 +\fItype\fP *XtNew(\fItype\fP) +.br + \fItype t\fP; +.FN +.IP \fItype\fP 1i +Specifies a previously declared type. +.LP +.eM +.PN XtNew +returns a pointer to the allocated storage. +If there is insufficient memory to allocate the new block, +.PN XtNew +calls +.PN XtErrorMsg . +.PN XtNew +is a convenience macro that calls +.PN XtMalloc +with the following arguments specified: +.LP +.Ds +.TA .5i +.ta .5i +((type *) XtMalloc((unsigned) sizeof(type))) +.De +.LP +The storage allocated by +.PN XtNew +should be freed using +.PN XtFree . +.sp +.LP +To copy an instance of a string, use +.PN XtNewString . +.LP +.IN "XtNewString" "" "@DEF@" +.sM +.FD 0 +String XtNewString(\fIstring\fP) +.br + String \fIstring\fP; +.FN +.IP \fIstring\fP 1i +Specifies a previously declared string. +.LP +.eM +.PN XtNewString +returns a pointer to the allocated storage. +If there is insufficient memory to allocate the new block, +.PN XtNewString +calls +.PN XtErrorMsg . +.PN XtNewString +is a convenience macro that calls +.PN XtMalloc +with the following arguments specified: +.LP +.Ds +.TA .5i +.ta .5i +(strcpy(XtMalloc((unsigned)strlen(str) + 1), str)) +.De +.LP +The storage allocated by +.PN XtNewString +should be freed using +.PN XtFree . + +.NH 2 +Sharing Graphics Contexts +.XS +\fB\*(SN Sharing Graphics Contexts\fP +.XE +.LP +The \*(xI provide a mechanism whereby cooperating objects can share a +graphics context (GC), thereby reducing both the number of GCs +created and the total number of server calls in any given application. +The mechanism is a simple caching scheme +and allows for clients to declare both modifiable and nonmodifiable +fields of the shared GCs. +.LP +To obtain a shareable GC with modifiable fields, use +.PN XtAllocateGC . +.LP +.IN "XtAllocateGC" "" "@DEF@" +.sM +.FD 0 +GC XtAllocateGC(\fIwidget\fP, \fIdepth\fP, \fIvalue_mask\fP, \fIvalues\fP, \ +\fIdynamic_mask\fP, \fIunused_mask\fP) +.br + Widget \fIobject\fP; +.br + Cardinal \fIdepth\fP; +.br + XtGCMask \fIvalue_mask\fP; +.br + XGCValues *\fIvalues\fP; +.br + XtGCMask \fIdynamic_mask\fP; +.br + XtGCMask \fIunused_mask\fP; +.FN +.IP \fIobject\fP 1i +Specifies an object, giving the screen for which the +returned GC is valid. \*(oI +.IP \fIdepth\fP 1i +Specifies the depth for which the returned GC is valid, or 0. +.IP \fIvalue_mask\fP 1i +Specifies fields of the GC that are initialized from \fIvalues\fP. +.IP \fIvalues\fP 1i +Specifies the values for the initialized fields. +.IP \fIdynamic_mask\fP 1i +Specifies fields of the GC that will be modified by the caller. +.IP \fIunused_mask\fP 1i +Specifies fields of the GC that will not be needed by the caller. +.LP +.eM +The +.PN XtAllocateGC +function returns a shareable GC that may be +modified by the client. The \fIscreen\fP field of the specified +widget or of the nearest widget ancestor of the specified +object and the specified \fIdepth\fP argument supply +the root and drawable depths for which the GC is to be +valid. If \fIdepth\fP is zero, the depth is taken from the +\fIdepth\fP field of the specified widget or of the nearest +widget ancestor of the specified object. +.LP +The \fIvalue_mask\fP argument specifies fields of the GC +that are initialized with the respective member of the +\fIvalues\fP structure. The \fIdynamic_mask\fP argument specifies fields +that the caller intends to modify during program execution. +The caller must ensure that the corresponding GC field is set +prior to each use of the GC. The \fIunused_mask\fP argument +specifies fields of the GC that are of no interest to the +caller. The caller may make no assumptions about the contents +of any fields specified in \fIunused_mask\fP. The caller may assume +that at all times all fields not specified in either +\fIdynamic_mask\fP or \fIunused_mask\fP have their default value if not +specified in \fIvalue_mask\fP or the value specified by \fIvalues\fP. +If a field is specified in both \fIvalue_mask\fP and \fIdynamic_mask\fP, +the effect is as if it were specified only in \fIdynamic_mask\fP +and then immediately set to the value in \fIvalues\fP. If a field +is set in \fIunused_mask\fP and also in either \fIvalue_mask\fP or +\fIdynamic_mask\fP, the specification in \fIunused_mask\fP is ignored. +.LP +.PN XtAllocateGC +tries to minimize the number of unique GCs +created by comparing the arguments with those of previous +calls and returning an existing GC when there are no +conflicts. +.PN XtAllocateGC +may modify and return an existing GC if it was allocated with a +nonzero \fIunused_mask\fP. +.sp +.LP +To obtain a shareable GC with no modifiable fields, use +.PN XtGetGC . +.LP +.IN "XtGetGC" "" "@DEF@" +.sM +.FD 0 +GC XtGetGC(\fIobject\fP, \fIvalue_mask\fP, \fIvalues\fP) +.br + Widget \fIobject\fP; +.br + XtGCMask \fIvalue_mask\fP; +.br + XGCValues *\fIvalues\fP; +.FN +.IP \fIobject\fP 1i +Specifies an object, giving the screen and depth for which the +returned GC is valid. \*(oI +.IP \fIvalue_mask\fP 1i +Specifies which fields of the \fIvalues\fP structure are specified. +.IP \fIvalues\fP 1i +Specifies the actual values for this GC. +.LP +.eM +The +.PN XtGetGC +function returns a shareable, read-only GC. +The parameters to this function are the same as those for +.PN XCreateGC +except that an Object is passed instead of a Display. +.PN XtGetGC +is equivalent to +.PN XtAllocateGC +with \fIdepth\fP, \fIdynamic_mask\fP, and \fIunused_mask\fP all zero. +.LP +.PN XtGetGC +shares only GCs in which all values in the GC returned by +.PN XCreateGC +are the same. +In particular, it does not use the \fIvalue_mask\fP provided to +determine which fields of the GC a widget considers relevant. +The \fIvalue_mask\fP is used only to tell the server which fields should be +filled in from \fIvalues\fP and which it should fill in with default values. +.sp +.LP +To deallocate a shared GC when it is no longer needed, use +.PN XtReleaseGC . +.LP +.IN "XtReleaseGC" "" "@DEF@" +.sM +.FD 0 +void XtReleaseGC(\fIobject\fP, \fIgc\fP) +.br + Widget \fIobject\fP; +.br + GC \fIgc\fP; +.FN +.IP \fIobject\fP 1i +Specifies any object on the Display for which the GC was created. \*(oI +.IP \fIgc\fP 1i +Specifies the shared GC obtained with either +.PN XtAllocateGC +or +.PN XtGetGC . +.LP +.eM +References to shareable GCs are counted and a free request is generated to the +server when the last user of a given GC releases it. + +.NH 2 +Managing Selections +.XS +\*(SN Managing Selections +.XE +.LP +Arbitrary widgets in multiple applications can communicate +with each other by means of the \*(xI global selection mechanism, +which conforms to the specifications in the \fI\*(xC\fP. +The \*(xI supply functions for providing and receiving selection data in +one logical piece (atomic transfers) +or in smaller logical segments (incremental transfers). +.LP +The incremental interface is provided for a selection owner or +selection requestor that cannot or prefers not to pass the selection +value to and from the \*(xI in a single call. For instance, +either an application that is running on a machine with limited memory +may not be able to store the entire selection value in memory or a +selection owner may already have the selection value available in +discrete chunks, and it would be more efficient not to have to +allocate additional storage to copy the pieces contiguously. Any +owner or requestor that prefers to deal with the selection value in +segments can use the incremental interfaces to do so. +The transfer between the selection owner or requestor and the \*(xI is not +required to match the underlying +transport protocol between the application and the X server; +the \*(xI will break too large a selection +into smaller pieces for transport if necessary +and will coalesce a selection transmitted incrementally if the value +was requested atomically. + +.NH 3 +Setting and Getting the Selection Timeout Value +.XS +\fB\*(SN Setting and Getting the Selection Timeout Value\fP +.XE +.LP +To set the \*(xI selection timeout, use +.PN XtAppSetSelectionTimeout . +.LP +.IN "XtAppSetSelectionTimeout" "" "@DEF@" +.sM +.FD 0 +void XtAppSetSelectionTimeout(\fIapp_context\fP, \fItimeout\fP) +.br + XtAppContext \fIapp_context\fP; +.br + unsigned long \fItimeout\fP; +.FN +.IP \fIapp_context\fP 1i +Specifies the application context. +.IP \fItimeout\fP 1i +Specifies the selection timeout in milliseconds. +.eM +.LP +To get the current selection timeout value, use +.PN XtAppGetSelectionTimeout . +.LP +.IN "XtAppGetSelectionTimeout" "" "@DEF@" +.sM +.FD 0 +unsigned long XtAppGetSelectionTimeout(\fIapp_context\fP) +.br + XtAppContext \fIapp_context\fP; +.FN +.IP \fIapp_context\fP 1i +Specifies the application context. +.LP +.eM +The +.PN XtAppGetSelectionTimeout +function returns the current selection timeout value in milliseconds. +The selection timeout is the time within which the two communicating +applications must respond to one another. +The initial timeout value is set by the +selectionTimeout +.IN "selectionTimeout" +application resource as retrieved by +.PN XtDisplayInitialize . +If +selectionTimeout +is not specified, +the default is five seconds. + +.NH 3 +Using Atomic Transfers +.XS +\*(SN Using Atomic Transfers +.XE +.LP +When using atomic transfers, the owner will completely +process one selection request at a time. +The owner may consider each request individually, +since there is no possibility for overlap +between evaluation of two requests. + +.NH 4 +Atomic Transfer Procedures +.XS +\*(SN Atomic Transfer Procedures +.XE +.IN "Selections" "atomic" +.LP +The following procedures are used by the selection owner when +providing selection data in a single unit. +.LP +The procedure pointer specified by the owner to supply the selection +data to the \*(xI is of type +.PN XtConvertSelectionProc . +.LP +.IN "XtConvertSelectionProc" "" "@DEF@" +.sM +.FD 0 +typedef Boolean (*XtConvertSelectionProc)(Widget, Atom*, Atom*, Atom*, +.br + XtPointer*, unsigned long*, int*); +.br + Widget \fIw\fP; +.br + Atom *\fIselection\fP; +.br + Atom *\fItarget\fP; +.br + Atom *\fItype_return\fP; +.br + XtPointer *\fIvalue_return\fP; +.br + unsigned long *\fIlength_return\fP; +.br + int *\fIformat_return\fP; +.FN +.IP \fIw\fP 1i +Specifies the widget that currently owns this selection. +.IP \fIselection\fP 1i +Specifies the atom naming the selection requested +(for example, +.PN XA_PRIMARY +or +.PN XA_SECONDARY ). +.IP \fItarget\fP 1i +Specifies the target type of the selection that has been requested, +which indicates the desired information about the selection +(for example, File Name, Text, Window). +.IP \fItype_return\fP 1i +Specifies a pointer to an atom into which the property type of the +converted value of the selection is to be stored. +For instance, either File Name or Text might have property type +.PN XA_STRING . +.IP \fIvalue_return\fP 1i +Specifies a pointer into which a pointer to the converted value of the +selection is to be stored. +The selection owner is responsible for allocating this storage. +If the selection owner has provided an +.PN XtSelectionDoneProc +for the selection, +this storage is owned by the selection owner; +otherwise, it is owned by the \*(xI selection mechanism, +which frees it by calling +.PN XtFree +when it is done with it. +.IP \fIlength_return\fP 1i +Specifies a pointer into which the number of elements in \fIvalue_return\fP, +each of size indicated by \fIformat_return\fP, is to be stored. +.IP \fIformat_return\fP 1i +Specifies a pointer into which the size in bits of the data elements +of the selection value is to be stored. +.LP +.eM +This procedure is called by the \*(xI selection mechanism +to get the value of a selection as a given type +from the current selection owner. +It returns +.PN True +if the owner successfully converted the selection to the target type or +.PN False +otherwise. +If the procedure returns +.PN False , +the values of the return arguments are undefined. +Each +.PN XtConvertSelectionProc +should respond to target value +.PN TARGETS +by returning a value containing the list of the targets +into which it is +prepared to convert the selection. +The value returned in +\fIformat_return\fP must be one of 8, 16, or 32 to allow the server to +byte-swap the data if necessary. +.LP +.IN "Selections" "MULTIPLE" +.IN "Selections" "TIMESTAMP" +This procedure does not need to worry about responding to the +MULTIPLE or the TIMESTAMP target values (see Section 2.6.2 in the \fI\*(xC\fP). +A selection request with +the MULTIPLE target type is transparently transformed into a +series of calls to this procedure, one for each target type, and a +selection request with the TIMESTAMP target value is answered +automatically by the \*(xI using the time specified in the +call to +.PN XtOwnSelection +or +.PN XtOwnSelectionIncremental . +.sp +.LP +To retrieve the +.PN SelectionRequest +event that triggered the +.PN XtConvertSelectionProc +procedure, use +.PN XtGetSelectionRequest . +.LP +.IN "XtGetSelectionRequest" "" "@DEF@" +.sM +.FD 0 +XSelectionRequestEvent *XtGetSelectionRequest(\fIw\fP, \fIselection\fP, \ +\fIrequest_id\fP) +.br + Widget \fIw\fP; +.br + Atom \fIselection\fP; +.br + XtRequestId \fIrequest_id\fP; +.FN +.IP \fIw\fP 1i +Specifies the widget that currently owns this selection. \*(cI +.IP \fIselection\fP 1i +Specifies the selection being processed. +.IP \fIrequest_id\fP 1i +Specifies the requestor id in the case of incremental +selections, or NULL in the case of atomic transfers. +.LP +.eM +.PN XtGetSelectionRequest +may be called only from within an +.PN XtConvertSelectionProc +procedure and returns a pointer to the +.PN SelectionRequest +event that caused the conversion procedure to be invoked. +\fIRequest_id\fP specifies a unique id for the individual request in the +case that multiple incremental transfers are outstanding. For atomic +transfers, \fIrequest_id\fP must be specified as NULL. If no +.PN SelectionRequest +event is being processed for the specified +\fIwidget\fP, \fIselection\fP, and \fIrequest_id\fP, +.PN XtGetSelectionRequest +returns NULL. +.sp +.LP +The procedure pointer specified by the owner when it desires +notification upon losing ownership is of type +.PN XtLoseSelectionProc . +.LP +.IN "XtLoseSelectionProc" "" "@DEF@" +.sM +.FD 0 +typedef void (*XtLoseSelectionProc)(Widget, Atom*); +.br + Widget \fIw\fP; +.br + Atom *\fIselection\fP; +.FN +.IP \fIw\fP 1i +Specifies the widget that has lost selection ownership. +.IP \fIselection\fP 1i +Specifies the atom naming the selection. +.LP +.eM +This procedure is called by the \*(xI selection mechanism +to inform the specified widget that it has lost the given selection. +Note that this procedure does not ask the widget to relinquish the +selection ownership; it is merely informative. +.sp +.LP +The procedure pointer specified by the owner when it desires +notification of receipt of the data or when it manages the storage +containing the data is of type +.PN XtSelectionDoneProc . +.LP +.IN "XtSelectionDoneProc" "" "@DEF@" +.sM +.FD 0 +typedef void (*XtSelectionDoneProc)(Widget, Atom*, Atom*); +.br + Widget \fIw\fP; +.br + Atom *\fIselection\fP; +.br + Atom *\fItarget\fP; +.FN +.IP \fIw\fP 1i +Specifies the widget that owns the converted selection. +.IP \fIselection\fP 1i +Specifies the atom naming the selection that was converted. +.IP \fItarget\fP 1i +Specifies the target type to which the conversion was done. +.LP +.eM +This procedure is called by the \*(xI selection mechanism +to inform the selection owner that a selection requestor has successfully +retrieved a selection value. +If the selection owner has registered an +.PN XtSelectionDoneProc , +it should expect it to be called once for each conversion that it performs, +after the converted value has been successfully transferred +to the requestor. +If the selection owner has registered an +.PN XtSelectionDoneProc , +it also owns the storage containing the converted +selection value. + +.NH 4 +Getting the Selection Value +.XS +\*(SN Getting the Selection Value +.XE +.LP +The procedure pointer specified by the requestor to receive the +selection data from the \*(xI is of type +.PN XtSelectionCallbackProc . +.LP +.IN "XtSelectionCallbackProc" "" "@DEF@" +.sM +.FD 0 +typedef void (*XtSelectionCallbackProc)(Widget, XtPointer, Atom*, Atom*, \ +XtPointer, unsigned long*, int*); +.br + Widget \fIw\fP; +.br + XtPointer \fIclient_data\fP; +.br + Atom *\fIselection\fP; +.br + Atom *\fItype\fP; +.br + XtPointer \fIvalue\fP; +.br + unsigned long *\fIlength\fP; +.br + int *\fIformat\fP; +.FN +.IP \fIw\fP 1i +Specifies the widget that requested the selection value. +.IP \fIclient_data\fP 1i +Specifies a value passed in by the widget when it requested the +selection. +.IP \fIselection\fP 1i +Specifies the name of the selection that was requested. +.IP \fItype\fP 1i +Specifies the representation type of the selection value (for example, +.PN XA_STRING ). +Note that it is not the target that was requested (which the client +must remember for itself), but the type that +is used to represent the target. +The special symbolic constant +.PN XT_CONVERT_FAIL +is used to indicate that the selection conversion failed because the +selection owner did not respond within the \*(xI selection timeout +interval. +.IP \fIvalue\fP 1i +Specifies a pointer to the selection value. +The requesting client owns this storage and is responsible for freeing it +by calling +.PN XtFree +when it is done with it. +.IP \fIlength\fP 1i +Specifies the number of elements in \fIvalue\fP. +.IP \fIformat\fP 1i +Specifies the size in bits of the data in each element of \fIvalue\fP. +.LP +.eM +This procedure is called by the \*(xI selection mechanism to deliver the +requested selection to the requestor. +.LP +If the +.PN SelectionNotify +event returns a property of +.PN None , +meaning the conversion has been refused because there is no owner for the +specified selection or the owner cannot convert the selection to the +requested target for any reason, the procedure is called with a value +of NULL and a length of zero. +.sp +.LP +To obtain the selection value in a single logical unit, use +.PN XtGetSelectionValue +or +.PN XtGetSelectionValues . +.LP +.IN "XtGetSelectionValue" "" "@DEF@" +.sM +.FD 0 +void XtGetSelectionValue(\fIw\fP, \fIselection\fP, \fItarget\fP, \ +\fIcallback\fP, \fIclient_data\fP, \fItime\fP) +.br + Widget \fIw\fP; +.br + Atom \fIselection\fP; +.br + Atom \fItarget\fP; +.br + XtSelectionCallbackProc \fIcallback\fP; +.br + XtPointer \fIclient_data\fP; +.br + Time \fItime\fP; +.FN +.IP \fIw\fP 1i +Specifies the widget making the request. \*(cI +.IP \fIselection\fP 1i +Specifies the particular selection desired; for example, +.PN XA_PRIMARY . +.IP \fItarget\fP 1i +Specifies the type of information needed about the selection. +.IP \fIcallback\fP 1i +Specifies the procedure to be called when the selection value +has been obtained. +Note that this is how the selection value is communicated back to the client. +.IP \fIclient_data\fP 1i +Specifies additional data to be passed to the specified procedure +when it is called. +.IP \fItime\fP 1i +Specifies the timestamp that indicates when the selection request was +initiated. +This should be the timestamp of the event that triggered this request; +the value +.PN CurrentTime +is not acceptable. +.LP +.eM +The +.PN XtGetSelectionValue +function requests the value of the selection converted to +the target type. +The specified callback is called at some time after +.PN XtGetSelectionValue +is called, when the selection value is received from the X server. +It may be called before or after +.PN XtGetSelectionValue +returns. +For more information about \fIselection\fP, \fItarget\fP, and +\fItime\fP, see Section 2.6 in the \fI\*(xC\fP. +.sp +.LP +.IN "XtGetSelectionValues" "" "@DEF@" +.sM +.FD 0 +void XtGetSelectionValues(\fIw\fP, \fIselection\fP, \fItargets\fP, \ +\fIcount\fP, \fIcallback\fP, \fIclient_data\fP, \fItime\fP) +.br + Widget \fIw\fP; +.br + Atom \fIselection\fP; +.br + Atom *\fItargets\fP; +.br + int \fIcount\fP; +.br + XtSelectionCallbackProc \fIcallback\fP; +.br + XtPointer *\fIclient_data\fP; +.br + Time \fItime\fP; +.FN +.IP \fIw\fP 1i +Specifies the widget making the request. \*(cI +.IP \fIselection\fP 1i +Specifies the particular selection desired (that is, primary or secondary). +.IP \fItargets\fP 1i +Specifies the types of information needed about the selection. +.IP \fIcount\fP 1i +Specifies the length of the \fItargets\fP and \fIclient_data\fP lists. +.IP \fIcallback\fP 1i +Specifies the callback procedure +to be called with each selection value obtained. +Note that this is how the selection values are communicated back to the +client. +.IP \fIclient_data\fP 1i +Specifies a list of additional data values, one for each target type, +that are passed to the callback procedure when it is called for that target. +.IP \fItime\fP 1i +Specifies the timestamp that indicates when the selection request was +initiated. +This should be the timestamp of the event that triggered this request; +the value +.PN CurrentTime +is not acceptable. +.LP +.eM +The +.PN XtGetSelectionValues +function is similar to multiple calls to +.PN XtGetSelectionValue +except that it guarantees that no other client can assert ownership +between requests and therefore that all the conversions will refer to +the same selection value. The callback is invoked once for each +target value with the corresponding client data. +For more information about \fIselection\fP, \fItarget\fP, and +\fItime\fP, see Section 2.6 in the \fI\*(xC\fP. + +.NH 4 +Setting the Selection Owner +.XS +\*(SN Setting the Selection Owner +.XE +.LP +To set the selection owner and indicate that the selection value will +be provided in one piece, use +.PN XtOwnSelection . +.LP +.IN "XtOwnSelection" "" "@DEF@" +.sM +.FD 0 +Boolean XtOwnSelection(\fIw\fP, \fIselection\fP, \fItime\fP, \ +\fIconvert_proc\fP, \fIlose_selection\fP, \fIdone_proc\fP) +.br + Widget \fIw\fP; +.br + Atom \fIselection\fP; +.br + Time \fItime\fP; +.br + XtConvertSelectionProc \fIconvert_proc\fP; +.br + XtLoseSelectionProc \fIlose_selection\fP; +.br + XtSelectionDoneProc \fIdone_proc\fP; +.FN +.IP \fIw\fP 1i +Specifies the widget that wishes to become the owner. \*(cI +.IP \fIselection\fP 1i +Specifies the name of the selection (for example, +.PN XA_PRIMARY ). +.IP \fItime\fP 1i +Specifies the timestamp that indicates when the ownership request was +initiated. +This should be the timestamp of the event that triggered ownership; +the value +.PN CurrentTime +is not acceptable. +.IP \fIconvert_proc\fP 1i +Specifies the procedure to be called whenever a client requests the +current value of the selection. +.IP \fIlose_selection\fP 1i +Specifies the procedure to be called whenever the widget has +lost selection ownership, or NULL if the owner is not interested in being +called back. +.IP \fIdone_proc\fP 1i +Specifies the procedure called +after the requestor has received the selection value, or NULL if the +owner is not +interested in being called back. +.LP +.eM +The +.PN XtOwnSelection +function informs the \*(xI selection mechanism that a +widget wishes to own a selection. +It returns +.PN True +if the widget successfully becomes the owner and +.PN False +otherwise. +The widget may fail to become the owner if some other widget +has asserted ownership at a time later than this widget. +The widget can lose selection ownership either +because some other widget asserted later ownership of the selection +or because the widget voluntarily gave up ownership of the selection. +The lose_selection procedure is not called +if the widget fails to obtain selection ownership in the first place. +.LP +If a done_proc is specified, the client owns the storage allocated +for passing the value to the \*(xI. If \fIdone_proc\fP is NULL, +the convert_proc must allocate storage using +.PN XtMalloc , +.PN XtRealloc , +or +.PN XtCalloc , +and the value specified is freed by the +\*(xI when the transfer is complete. +.sp +.LP +Usually, a selection owner maintains ownership indefinitely until some +other widget requests ownership, at which time +the \*(xI selection mechanism informs the previous owner that it +has lost ownership of the selection. +However, in response to some user actions +(for example, when a user deletes the information selected), +the application may wish to explicitly inform the \*(xI +by using +.PN XtDisownSelection +that it no longer is to be the selection owner. +.LP +.IN "XtDisownSelection" "" "@DEF@" +.sM +.FD 0 +void XtDisownSelection(\fIw\fP, \fIselection\fP, \fItime\fP) +.br + Widget \fIw\fP; +.br + Atom \fIselection\fP; +.br + Time \fItime\fP; +.FN +.IP \fIw\fP 1i +Specifies the widget that wishes to relinquish ownership. +.IP \fIselection\fP 1i +Specifies the atom naming the selection being given up. +.IP \fItime\fP 1i +Specifies the timestamp that indicates when the request to +relinquish selection ownership was initiated. +.LP +.eM +The +.PN XtDisownSelection +function informs the \*(xI selection mechanism that +the specified widget is to lose ownership of the selection. +If the widget does not currently own the selection, either +because it lost the selection +or because it never had the selection to begin with, +.PN XtDisownSelection +does nothing. +.LP +After a widget has called +.PN XtDisownSelection , +its convert procedure is not called even if a request arrives later +with a timestamp during the period that this widget owned the selection. +However, its done procedure is called if a conversion that started +before the call to +.PN XtDisownSelection +finishes after the call to +.PN XtDisownSelection . + +.NH 3 +Using Incremental Transfers +.XS +\*(SN Using Incremental Transfers +.XE +.LP +When using the incremental interface, an owner may have to process +more than one selection request for the same selection, converted to +the same target, at the same time. The incremental functions take a +\fIrequest_id\fP argument, which is an identifier that is guaranteed to be +unique among all incremental requests that are active concurrently. +.LP +For example, consider the following: +.IP \(bu 5 +Upon receiving a request for the selection value, the owner sends +the first segment. +.IP \(bu 5 +While waiting to be called to provide the next segment value but +before sending it, the owner receives another request from a +different requestor for the same selection value. +.IP \(bu 5 +To distinguish between the requests, the owner uses the request_id +value. This allows the owner to distinguish between the first +requestor, which is asking for the second segment, and the second +requestor, which is asking for the first segment. + +.NH 4 +Incremental Transfer Procedures +.XS +\*(SN Incremental Transfer Procedures +.XE +.IN "Selections" "incremental" +.LP +The following procedures are used by selection owners who wish to +provide the selection data in multiple segments. +.LP +The procedure pointer specified by the incremental owner to supply the +selection data to the \*(xI is of type +.PN XtConvertSelectionIncrProc . +.LP +.sM +.Ds 0 +typedef XtPointer XtRequestId; +.De +.IN "XtRequestId" "" "@DEF@" +.IN "XtConvertSelectionIncrProc" "" "@DEF@" +.FD 0 +typedef Boolean (*XtConvertSelectionIncrProc)(Widget, Atom*, Atom*, \ +Atom*, XtPointer*, + unsigned long*, int*, unsigned long*, \ +XtPointer, XtRequestId*); +.br + Widget \fIw\fP; +.br + Atom *\fIselection\fP; +.br + Atom *\fItarget\fP; +.br + Atom *\fItype_return\fP; +.br + XtPointer *\fIvalue_return\fP; +.br + unsigned long *\fIlength_return\fP; +.br + int *\fIformat_return\fP; +.br + unsigned long *\fImax_length\fP; +.br + XtPointer \fIclient_data\fP; +.br + XtRequestId *\fIrequest_id\fP; +.FN +.IP \fIw\fP 1i +Specifies the widget that currently owns this selection. +.IP \fIselection\fP 1i +Specifies the atom that names the selection requested. +.IP \fItarget\fP 1i +Specifies the type of information required about the selection. +.IP \fItype_return\fP 1i +Specifies a pointer to an atom into which the property +type of the converted value of the selection is to be +stored. +.IP \fIvalue_return\fP 1i +Specifies a pointer into which a pointer to the +converted value of the selection is to be stored. +The selection owner is responsible for allocating this storage. +.IP \fIlength_return\fP 1i +Specifies a pointer into which the number of elements +in \fIvalue_return\fP, each of size indicated by +\fIformat_return\fP, is to be stored. +.IP \fIformat_return\fP 1i +Specifies a pointer into which the size in bits of the +data elements of the selection value is to be stored so that the +server may byte-swap the data if necessary. +.IP \fImax_length\fP 1i +Specifies the maximum number of bytes which may be +transferred at any one time. +.IP \fIclient_data\fP 1i +Specifies the value passed in by the widget when it +took ownership of the selection. +.IP \fIrequest_id\fP 1i +Specifies an opaque identification for a specific request. +.LP +.eM +This procedure is called repeatedly by the \*(xI selection mechanism to get +the next incremental chunk of data from a selection owner who has +called +.PN XtOwnSelectionIncremental . +It must return +.PN True +if the procedure has succeeded in converting the selection data or +.PN False +otherwise. +On the first call with a particular request id, the owner must begin +a new incremental transfer for the requested selection and target. On +subsequent calls with the same request id, the owner may assume that +the previously supplied value is no longer needed by the \*(xI; +that is, a fixed transfer area may be allocated and returned in \fIvalue_return\fP +for each segment to be transferred. This procedure should store a +non-NULL value in \fIvalue_return\fP and zero in \fIlength_return\fP to indicate that the +entire selection has been delivered. After returning this final +segment, the request id may be reused by the \*(xI to begin a +new transfer. +.LP +To retrieve the +.PN SelectionRequest +event that triggered the selection conversion procedure, use +.PN XtGetSelectionRequest , +described in Section 11.5.2.1. +.sp +.LP +The procedure pointer specified by the incremental selection owner +when it desires notification upon no longer having ownership is of +type +.PN XtLoseSelectionIncrProc . +.LP +.IN "XtLoseSelectionIncrProc" "" "@DEF@" +.sM +.FD 0 +typedef void (*XtLoseSelectionIncrProc)(Widget, Atom*, XtPointer); +.br + Widget \fIw\fP; +.br + Atom *\fIselection\fP; +.br + XtPointer \fIclient_data\fP; +.FN +.IP \fIw\fP 1i +Specifies the widget that has lost the selection ownership. +.IP \fIselection\fP 1i +Specifies the atom that names the selection. +.IP \fIclient_data\fP 1i +Specifies the value passed in by the widget when it +took ownership of the selection. +.LP +.eM +This procedure, which is optional, is called by the \*(xI to +inform the selection owner that it no longer owns the selection. +.sp +.LP +The procedure pointer specified by the incremental selection owner +when it desires notification of receipt of the data or when it manages +the storage containing the data is of type +.PN XtSelectionDoneIncrProc . +.LP +.IN "XtSelectionDoneIncrProc" "" "@DEF@" +.sM +.FD 0 +typedef void (*XtSelectionDoneIncrProc)(Widget, Atom*, Atom*, \ +XtRequestId*, XtPointer); +.br + Widget \fIw\fP; +.br + Atom *\fIselection\fP; +.br + Atom *\fItarget\fP; +.br + XtRequestId *\fIrequest_id\fP; +.br + XtPointer \fIclient_data\fP; +.FN +.IP \fIw\fP 1i +Specifies the widget that owns the selection. +.IP \fIselection\fP 1i +Specifies the atom that names the selection being transferred. +.IP \fItarget\fP 1i +Specifies the target type to which the conversion was done. +.IP \fIrequest_id\fP 1i +Specifies an opaque identification for a specific request. +.IP \fIclient_data\fP 1i +Specified the value passed in by the widget when it +took ownership of the selection. +.LP +.eM +This procedure, which is optional, is called by the \*(xI after +the requestor has retrieved the final (zero-length) segment of the +incremental transfer to indicate that the entire transfer is complete. +If this procedure is not specified, the \*(xI will free only the +final value returned by the selection owner using +.PN XtFree . +.sp +.LP +The procedure pointer specified by the incremental selection owner to +notify it if a transfer should be terminated prematurely is of type +.PN XtCancelConvertSelectionProc . +.LP +.IN "XtCancelConvertSelectionProc" "" "@DEF@" +.sM +.FD 0 +typedef void (*XtCancelConvertSelectionProc)(Widget, Atom*, Atom*, \ +XtRequestId*, XtPointer); +.br + Widget \fIw\fP; +.br + Atom *\fIselection\fP; +.br + Atom *\fItarget\fP; +.br + XtRequestId *\fIrequest_id\fP; +.br + XtPointer \fIclient_data\fP; +.FN +.IP \fIw\fP 1i +Specifies the widget that owns the selection. +.IP \fIselection\fP 1i +Specifies the atom that names the selection being transferred. +.IP \fItarget\fP 1i +Specifies the target type to which the conversion was done. +.IP \fIrequest_id\fP 1i +Specifies an opaque identification for a specific request. +.IP \fIclient_data\fP 1i +Specifies the value passed in by the widget when it took ownership of +the selection. +.LP +.eM +This procedure is called by the \*(xI when it has been determined +by means of a timeout or other mechanism that any remaining segments +of the selection no longer need to be transferred. Upon receiving +this callback, the selection request is considered complete and the +owner can free the memory and any other resources that have been +allocated for the transfer. + +.NH 4 +Getting the Selection Value Incrementally +.XS +\*(SN Getting the Selection Value Incrementally +.XE +.LP +To obtain the value of the selection using incremental transfers, use +.PN XtGetSelectionValueIncremental +or +.PN XtGetSelectionValuesIncremental . +.LP +.IN "XtGetSelectionValueIncremental" "" "@DEF@" +.sM +.FD 0 +void XtGetSelectionValueIncremental(\fIw\fP, \fIselection\fP, \fItarget\fP, \ +\fIselection_callback\fP, \fIclient_data\fP, \fItime\fP) +.br + Widget \fIw\fP; +.br + Atom \fIselection\fP; +.br + Atom \fItarget\fP; +.br + XtSelectionCallbackProc \fIselection_callback\fP; +.br + XtPointer \fIclient_data\fP; +.br + Time \fItime\fP; +.FN +.IP \fIw\fP 1i +Specifies the widget making the request. \*(cI +.IP \fIselection\fP 1i +Specifies the particular selection desired. +.IP \fItarget\fP 1i +Specifies the type of information needed +about the selection. +.IP \fIselection_callback\fP 1i +Specifies the callback procedure to be +called to receive each data segment. +.IP \fIclient_data\fP 1i +Specifies client-specific data to be passed to +the specified callback procedure when it is invoked. +.IP \fItime\fP 1i +Specifies the timestamp that indicates when the +selection request was initiated. This should be the +timestamp of the event that triggered this request; +the value +.PN CurrentTime +is not acceptable. +.LP +.eM +The +.PN XtGetSelectionValueIncremental +function is similar to +.PN XtGetSelectionValue +except that the selection_callback procedure will +be called repeatedly upon delivery of multiple segments of the +selection value. The end of the selection value is indicated when +\fIselection_callback\fP is called with a non-NULL value of length zero, +which must still be freed by the client. If the +transfer of the selection is aborted in the middle of a transfer +(for example, because of a timeout), the selection_callback procedure is +called with a type value equal to the symbolic constant +.PN XT_CONVERT_FAIL +so that the requestor can dispose +of the partial selection value it has collected up until that point. +Upon receiving +.PN XT_CONVERT_FAIL , +the requesting client must determine +for itself whether or not a partially completed data transfer is meaningful. +For more information about \fIselection\fP, \fItarget\fP, and +\fItime\fP, see Section 2.6 in the \fI\*(xC\fP. +.LP +.IN "XtGetSelectionValuesIncremental" "" "@DEF@" +.sM +.FD 0 +void XtGetSelectionValuesIncremental(\fIw\fP, \fIselection\fP, \fItargets\fP, \ +\fIcount\fP, \fIselection_callback\fP, \fIclient_data\fP, \fItime\fP) +.br + Widget \fIw\fP; +.br + Atom \fIselection\fP; +.br + Atom *\fItargets\fP; +.br + int \fIcount\fP; +.br + XtSelectionCallbackProc \fIselection_callback\fP; +.br + XtPointer *\fIclient_data\fP; +.br + Time \fItime\fP; +.FN +.IP \fIw\fP 1i +Specifies the widget making the request. \*(cI +.IP \fIselection\fP 1i +Specifies the particular selection desired. +.IP \fItargets\fP 1i +Specifies the types of information needed about +the selection. +.IP \fIcount\fP 1i +Specifies the length of the \fItargets\fP and \fIclient_data\fP lists. +.IP \fIselection_callback\fP 1i +Specifies the callback procedure to be called +to receive each selection value. +.IP \fIclient_data\fP 1i +Specifies a list of client data (one for each target +type) values that are passed to the callback procedure when +it is invoked for the corresponding target. +.IP \fItime\fP 1i +Specifies the timestamp that indicates when the +selection request was initiated. This should be the +timestamp of the event that triggered this request; +the value +.PN CurrentTime +is not acceptable. +.LP +.eM +The +.PN XtGetSelectionValuesIncremental +function is similar to +.PN XtGetSelectionValueIncremental +except that it takes a list of targets and client data. +.PN XtGetSelectionValuesIncremental +is equivalent to calling +.PN XtGetSelectionValueIncremental +successively for each \fItarget/client_data\fP pair except that +.PN XtGetSelectionValuesIncremental +does guarantee that all the conversions will use the same selection +value because the ownership of the selection cannot change in the +middle of the list, as would be possible when calling +.PN XtGetSelectionValueIncremental +repeatedly. +For more information about \fIselection\fP, \fItarget\fP, and +\fItime\fP, see Section 2.6 in the \fI\*(xC\fP. + +.NH 4 +Setting the Selection Owner for Incremental Transfers +.XS +\*(SN Setting the Selection Owner for Incremental Transfers +.XE +.LP +To set the selection owner when using incremental transfers, use +.PN XtOwnSelectionIncremental . +.LP +.IN "XtOwnSelectionIncremental" "" "@DEF@" +.sM +.FD 0 +Boolean XtOwnSelectionIncremental(\fIw\fP, \fIselection\fP, \fItime\fP, \ +\fIconvert_callback\fP, \fIlose_callback\fP, + \fIdone_callback\fP, \ +\fIcancel_callback\fP, \fIclient_data\fP) +.br + Widget \fIw\fP; +.br + Atom \fIselection\fP; +.br + Time \fItime\fP; +.br + XtConvertSelectionIncrProc \fIconvert_callback\fP; +.br + XtLoseSelectionIncrProc \fIlose_callback\fP; +.br + XtSelectionDoneIncrProc \fIdone_callback\fP; +.br + XtCancelConvertSelectionProc \fIcancel_callback\fP; +.br + XtPointer \fIclient_data\fP; +.FN +.IP \fIw\fP 1.25i +Specifies the widget that wishes to become the owner. \*(cI +.IP \fIselection\fP 1.25i +Specifies the atom that names the selection. +.IP \fItime\fP 1.25i +Specifies the timestamp that indicates when the +selection ownership request was initiated. This should be +the timestamp of the event that triggered ownership; the value +.PN CurrentTime +is not acceptable. +.IP \fIconvert_callback\fP 1.25i +Specifies the procedure to be called whenever +the current value of the selection is requested. +.IP \fIlose_callback\fP 1.25i +Specifies the procedure to be called whenever +the widget has lost selection ownership, or NULL if the +owner is not interested in being notified. +.IP \fIdone_callback\fP 1.25i +Specifies the procedure called after the +requestor has received the entire selection, or NULL if +the owner is not interested in being notified. +.IP \fIcancel_callback\fP 1.25i +Specifies the callback procedure to be called +when a selection request aborts because a timeout expires, +or NULL if the owner is not interested in being notified. +.IP \fIclient_data\fP 1.25i +Specifies the argument to be passed to each of +the callback procedures when they are called. +.LP +.eM +The +.PN XtOwnSelectionIncremental +procedure informs the \*(xI +incremental selection mechanism that the specified widget wishes to +own the selection. It returns +.PN True +if the specified widget successfully becomes the selection owner or +.PN False +otherwise. +For more information about \fIselection\fP, \fItarget\fP, and +\fItime\fP, see Section 2.6 in the \fI\*(xC\fP. +.LP +If a done_callback procedure is specified, the client owns the storage allocated +for passing the value to the \*(xI. If \fIdone_callback\fP is NULL, +the convert_callback procedure must allocate storage using +.PN XtMalloc , +.PN XtRealloc , +or +.PN XtCalloc , +and the final value specified is freed by the +\*(xI when the transfer is complete. After a selection transfer +has started, only one of the done_callback or cancel_callback +procedures is invoked to indicate completion of the transfer. +.LP +The lose_callback procedure does not indicate completion of any in-progress +transfers; it is invoked at the time a +.PN SelectionClear +event is dispatched regardless of any active transfers, which are still +expected to continue. +.LP +A widget that becomes the selection owner using +.PN XtOwnSelectionIncremental +may use +.PN XtDisownSelection +to relinquish selection ownership. + +.NH 3 +Setting and Retrieving Selection Target Parameters +.XS +\*(SN Setting and Retrieving Selection Target Parameters +.XE +.LP +To specify target parameters for a selection request with a single target, +use +.PN XtSetSelectionParameters . +.LP +.IN "XtSetSelectionParameters" "" "@DEF@" +.sM +.FD 0 +void XtSetSelectionParameters(\fIrequestor\fP, \fIselection\fP, \fItype\fP, \ +\fIvalue\fP, \fIlength\fP, \fIformat\fP) +.br + Widget \fIrequestor\fP; +.br + Atom \fIselection\fP; +.br + Atom \fItype\fP; +.br + XtPointer \fIvalue\fP; +.br + unsigned long \fIlength\fP; +.br + int \fIformat\fP; +.FN +.IP \fIrequestor\fP 1i +Specifies the widget making the request. \*(cI +.IP \fIselection\fP 1i +Specifies the atom that names the selection. +.IP \fItype\fP 1i +Specifies the type of the property in which the parameters are passed. +.IP \fIvalue\fP 1i +Specifies a pointer to the parameters. +.IP \fIlength\fP 1i +Specifies the number of elements containing data in \fIvalue\fP, +each element of a size indicated by \fIformat\fP. +.IP \fIformat\fP 1i +Specifies the size in bits of the data in the elements of \fIvalue\fP. +.LP +The specified parameters are copied and stored in a new property +of the specified type and format on the requestor's window. To initiate +a selection request with a target and these parameters, a subsequent +call to +.PN XtGetSelectionValue +or to +.PN XtGetSelectionValueIncremental +specifying the same requestor widget and selection atom will generate a +.PN ConvertSelection +request referring to the property containing the parameters. If +.PN XtSetSelectionParameters +is called more than once with the same widget and selection without +a call to specify a request, the most recently specified parameters +are used in the subsequent request. +.LP +.eM +The possible values of \fIformat\fP are 8, 16, or 32. If the format is 8, +the elements of \fIvalue\fP are assumed to be sizeof(char); +if 16, sizeof(short); if 32, sizeof(long). +.LP +To generate a MULTIPLE +target request with parameters for any of the multiple targets of the +selection request, precede individual calls to +.PN XtGetSelectionValue +and +.PN XtGetSelectionValueIncremental +with corresponding individual calls to +.PN XtSetSelectionParameters , +and enclose these all within +.PN XtCreateSelectionRequest +and +.PN XtSendSelectionRequest. +.PN XtGetSelectionValues +and +.PN XtGetSelectionValuesIncremental +cannot be used to make selection requests with parameterized targets. +.sp +.LP +To retrieve any target parameters needed to perform a selection conversion, +the selection owner calls +.PN XtGetSelectionParameters . +.LP +.IN "XtGetSelectionParameters" "" "@DEF@" +.sM +.FD 0 +void XtGetSelectionParameters(\fIowner\fP, \fIselection\fP, \ +\fIrequest_id\fP, \fItype_return\fP, \fIvalue_return\fP, + \fIlength_return\fP, \ +\fIformat_return\fP) +.br + Widget \fIowner\fP; +.br + Atom \fIselection\fP; +.br + XtRequestId \fIrequest_id\fP; +.br + Atom *\fItype_return\fP; +.br + XtPointer *\fIvalue_return\fP; +.br + unsigned long *\fIlength_return\fP; +.br + int *\fIformat_return\fP; +.FN +.IP \fIowner\fP 1i +Specifies the widget that owns the specified selection. +.IP \fIselection\fP 1i +Specifies the selection being processed. +.IP \fIrequest_id\fP 1i +Specifies the requestor id in the case of incremental selections, +or NULL in the case of atomic transfers. +.IP \fItype_return\fP 1i +Specifies a pointer to an atom in which the property type +of the parameters is stored. +.IP \fIvalue_return\fP 1i +Specifies a pointer into which a pointer to the parameters is to be stored. +A NULL is stored if no parameters accompany the request. +.IP \fIlength_return\fP 1i +Specifies a pointer into which the number of data elements +in \fIvalue_return\fP of size indicated by \fIformat_return\fP are stored. +.IP \fIformat_return\fP 1i +Specifies a pointer into which the size in bits of the parameter data +in the elements of \fIvalue\fP is stored. +.LP +.eM +.PN XtGetSelectionParameters +may be called only from within an +.PN XtConvertSelectionProc +or from within the first call to an +.PN XtConvertSelectionIncrProc +with a new request_id. +.LP +It is the responsibility of the caller to free the returned parameters using +.PN XtFree +when the parameters are no longer needed. + +.NH 3 +Generating MULTIPLE Requests +.XS +\*(SN Generating MULTIPLE Requests +.XE +.LP +To have the \*(xI bundle multiple calls to make selection requests into +a single request using a \s-1MULTIPLE\s+1 target, use +.PN XtCreateSelectionRequest +and +.PN XtSendSelectionRequest . +.LP +.IN "XtCreateSelectionRequest" "" "@DEF@" +.sM +.FD 0 +void XtCreateSelectionRequest(\fIrequestor\fP, \fIselection\fP) +.br + Widget \fIrequestor\fP; +.br + Atom \fIselection\fP; +.FN +.IP \fIrequestor\fP 1i +Specifies the widget making the request. \*(cI +.IP \fIselection\fP 1i +Specifies the particular selection desired. +.LP +.eM +When +.PN XtCreateSelectionRequest +is called, subsequent calls to +.PN XtGetSelectionValue , +.PN XtGetSelectionValueIncremental , +.PN XtGetSelectionValues , +and +.PN XtGetSelectionValuesIncremental , +with the requestor and selection as specified to +.PN XtCreateSelectionRequest , +are bundled into a single selection request with +multiple targets. The request is made by calling +.PN XtSendSelectionRequest . +.LP +.IN "XtSendSelectionRequest" "" "@DEF@" +.sM +.FD 0 +void XtSendSelectionRequest(\fIrequestor\fP, \fIselection\fP, \fItime\fP) +.br + Widget \fIrequestor\fP; +.br + Atom \fIselection\fP; +.br + Time \fItime\fP; +.FN +.IP \fIrequestor\fP 1i +Specifies the widget making the request. \*(cI +.IP \fIselection\fP 1i +Specifies the particular selection desired. +.IP \fItime\fP 1i +Specifies the timestamp that indicates when the selection request was +initiated. The value +.PN CurrentTime +is not acceptable. +.LP +.eM +When +.PN XtSendSelectionRequest +is called with a value of \fIrequestor\fP and \fIselection\fP matching +a previous call to +.PN XtCreateSelectionRequest , +a selection request is sent to the selection owner. +If a single target request is queued, that request is made. +If multiple targets are queued, they are bundled into a single request +with a target of MULTIPLE using the specified timestamp. +As the values are returned, the callbacks specified in +.PN XtGetSelectionValue , +.PN XtGetSelectionValueIncremental , +.PN XtGetSelectionValues , +and +.PN XtGetSelectionValueIncremental +are invoked. +.LP +Multi-threaded applications should lock the application context before +calling +.PN XtCreateSelectionRequest +and release the lock after calling +.PN XtSendSelectionRequest +to ensure that the thread assembling the request is safe from interference +by another thread assembling a different request naming the same widget +and selection. +.sp +.LP +To relinquish the composition of a MULTIPLE request without sending it, use +.PN XtCancelSelectionRequest . +.LP +.IN "XtCancelSelectionRequest" "" "@DEF@" +.sM +.FD 0 +void XtCancelSelectionRequest(\fIrequestor\fP, \fIselection\fP) +.br + Widget \fIrequestor\fP; +.br + Atom \fIselection\fP; +.FN +.IP \fIrequestor\fP 1i +Specifies the widget making the request. \*(cI +.IP \fIselection\fP 1i +Specifies the particular selection desired. +.LP +.eM +When +.PN XtCancelSelectionRequest +is called, any requests queued since the last call to +.PN XtCreateSelectionRequest +for the same widget and selection are discarded +and any resources reserved are released. +A subsequent call to +.PN XtSendSelectionRequest +will not result in any request being made. +Subsequent calls to +.PN XtGetSelectionValue , +.PN XtGetSelectionValues , +.PN XtGetSelectionValueIncremental , +or +.PN XtGetSelectionValuesIncremental +will not be deferred. + +.NH 3 +Auxiliary Selection Properties +.XS +\*(SN Auxiliary Selection Properties +.XE +.LP +Certain uses of parameterized selections require clients to name +other window properties within a selection parameter. To permit +reuse of temporary property names in these circumstances and +thereby reduce the number of unique atoms created in the server, +the \*(xI provides two interfaces for acquiring temporary property names. +.LP +To acquire a temporary property name atom for use in a selection +request, the client may call +.PN XtReservePropertyAtom . +.LP +.IN "XtReservePropertyAtom" "" "@DEF@" +.sM +.FD 0 +Atom XtReservePropertyAtom(\fIw\fP) +.br + Widget \fIw\fP; +.FN +.IP \fIw\fP 1i +Specifies the widget making a selection request. +.LP +.eM +.PN XtReservePropertyAtom +returns an atom that may be used as a property name during selection +requests involving the specified widget. +As long as the atom remains reserved, it is unique with respect to all +other reserved atoms for the widget. +.LP +To return a temporary property name atom for reuse and to delete +the property named by that atom, use +.PN XtReleasePropertyAtom . +.LP +.IN "XtReleasePropertyAtom" "" "@DEF@" +.sM +.FD 0 +void XtReleasePropertyAtom(\fIw\fP, \fIatom\fP) +.br + Widget \fIw\fP; +.br + Atom \fIatom\fP; +.FN +.IP \fIw\fP 1i +Specifies the widget used to reserve the property name atom. +.IP \fIatom\fP 1i +Specifies the property name atom returned by +.PN XtReservePropertyAtom +that is to be released for reuse. +.LP +.eM +.PN XtReleasePropertyAtom +marks the specified property name atom as +no longer in use and ensures that any property having that name +on the specified widget's window is deleted. If \fIatom\fP does not +specify a value returned by +.PN XtReservePropertyAtom +for the specified widget, the results are undefined. + +.NH 3 +Retrieving the Most Recent Timestamp +.XS +\*(SN Retrieving the Most Recent Timestamp +.XE +.LP +To retrieve the timestamp from the most recent call to +.PN XtDispatchEvent +that contained a timestamp, use +.PN XtLastTimestampProcessed . +.LP +.IN "XtLastTimestampProcessed" "" "@DEF@" +.sM +.FD 0 +Time XtLastTimestampProcessed(\fIdisplay\fP) +.br + Display *\fIdisplay\fP; +.FN +.IP \fIdisplay\fP 1i +Specifies an open display connection. +.LP +.eM +If no +.PN KeyPress , +.PN KeyRelease , +.PN ButtonPress , +.PN ButtonRelease , +.PN MotionNotify , +.PN EnterNotify , +.PN LeaveNotify , +.PN PropertyNotify , +or +.PN SelectionClear +event has yet been passed to +.PN XtDispatchEvent +for the specified display, +.PN XtLastTimestampProcessed +returns zero. + +.NH 3 +Retrieving the Most Recent Event +.XS +\*(SN Retrieving the Most Recent Event +.XE +.LP +To retrieve the event from the most recent call to +.PN XtDispatchEvent +for a specific display, use +.PN XtLastEventProcessed . +.LP +.IN "XtLastEventProcessed" "" "@DEF@" +.sM +.FD 0 +XEvent *XtLastEventProcessed(\fIdisplay\fP) +.br + Display *\fIdisplay\fP; +.FN +.IP \fIdisplay\fP 1i +Specifies the display connection from which to retrieve the event. +.LP +.eM +Returns the last event passed to +.PN XtDispatchEvent +for the specified display. Returns NULL if there is no such event. +The client must not modify the contents of the returned event. + +.NH 2 +Merging Exposure Events into a Region +.XS +\*(SN Merging Exposure Events into a Region +.XE +.LP +The \*(xI provide an +.PN XtAddExposureToRegion +utility function that merges +.PN Expose +and +.PN GraphicsExpose +events into a region for clients to process at once +rather than processing individual rectangles. +For further information about regions, +see Section 16.5 in \fI\*(xL\fP. +.sp +.LP +To merge +.PN Expose +and +.PN GraphicsExpose +events into a region, use +.PN XtAddExposureToRegion . +.LP +.IN "XtAddExposureToRegion" "" "@DEF@" +.sM +.FD 0 +void XtAddExposureToRegion(\fIevent\fP, \fIregion\fP) +.br + XEvent *\fIevent\fP; +.br + Region \fIregion\fP; +.FN +.IP \fIevent\fP 1i +Specifies a pointer to the +.PN Expose +or +.PN GraphicsExpose +event. +.IP \fIregion\fP 1i +Specifies the region object (as defined in +.Pn < X11/Xutil.h >). +.LP +.eM +The +.PN XtAddExposureToRegion +function computes the union of the rectangle defined by the exposure +event and the specified region. +Then it stores the results back in \fIregion\fP. +If the event argument is not an +.PN Expose +or +.PN GraphicsExpose +event, +.PN XtAddExposureToRegion +returns without an error and without modifying \fIregion\fP. +.LP +This function is used by the exposure compression mechanism; +see Section 7.9.3. + +.NH 2 +Translating Widget Coordinates +.XS +\fB\*(SN Translating Widget Coordinates\fP +.XE +.LP +To translate an x-y coordinate pair from widget coordinates to root +window absolute coordinates, use +.PN XtTranslateCoords . +.LP +.IN "XtTranslateCoords" "" "@DEF@" +.sM +.FD 0 +void XtTranslateCoords(\fIw\fP, \fIx\fP, \fIy\fP, \fIrootx_return\fP, \ +\fIrooty_return\fP) +.br + Widget \fIw\fP; +.br + Position \fIx\fP, \fIy\fP; +.br + Position *\fIrootx_return\fP, *\fIrooty_return\fP; +.FN +.IP \fIw\fP 1i +Specifies the widget. \*(rI +.IP \fIx\fP 1i +.br +.ns +.IP \fIy\fP 1i +Specify the widget-relative x and y coordinates. +.IP \fIrootx_return\fP 1i +.br +.ns +.IP \fIrooty_return\fP 1i +Return the root-relative x and y coordinates. +.LP +.eM +While +.PN XtTranslateCoords +is similar to the Xlib +.PN XTranslateCoordinates +function, it does not generate a server request because all the required +information already is in the widget's data structures. + +.NH 2 +Translating a Window to a Widget +.XS +\fB\*(SN Translating a Window to a Widget\fP +.XE +.LP +To translate a given window and display pointer into a widget instance, use +.PN XtWindowToWidget . +.LP +.IN "XtWindowToWidget" "" "@DEF@" +.sM +.FD 0 +Widget XtWindowToWidget(\fIdisplay\fP, \fIwindow\fP) +.br + Display *\fIdisplay\fP; +.br + Window \fIwindow\fP; +.FN +.IP \fIdisplay\fP 1i +Specifies the display on which the window is defined. +.IP \fIwindow\fP 1i +Specifies the drawable for which you want the widget. +.LP +.eM +If there is a realized widget whose window is the specified drawable on +the specified \fIdisplay\fP, +.PN XtWindowToWidget +returns that widget. +If not and if the drawable has been associated with a widget through +.PN XtRegisterDrawable , +.PN XtWindowToWidget +returns the widget associated with the drawable. In other cases it +returns NULL. + +.NH 2 +Handling Errors +.XS +\fB\*(SN Handling Errors\fP +.XE +.LP +The \*(xI allow a client to register procedures that are called +whenever a fatal or nonfatal error occurs. +These facilities are intended for both error reporting and logging +and for error correction or recovery. +.LP +Two levels of interface are provided: +.IP \(bu 5 +A high-level interface that takes an error +name and class and retrieves the error message text from +an error resource database. +.IP \(bu 5 +A low-level interface that takes a simple string to display. +.LP +The high-level functions construct a string to pass to the lower-level +interface. +The strings may be specified in application code and are +overridden by the contents of an external systemwide file, +the ``error database file''. The location and name of this file are +implementation-dependent. +.NT +The application-context-specific error handling is not +implemented on many systems, although the interfaces are +always present. +Most implementations will have just one set of error handlers +for all application contexts within a process. +If they are set for different application contexts, +the ones registered last will prevail. +.NE +.sp +.LP +To obtain the error database (for example, to merge with +an application- or widget-specific database), use +.PN XtAppGetErrorDatabase . +.LP +.IN "XtAppGetErrorDatabase" "" "@DEF@" +.sM +.FD 0 +XrmDatabase *XtAppGetErrorDatabase(\^\fIapp_context\fP\^) +.br + XtAppContext \fIapp_context\fP; +.FN +.IP \fIapp_context\fP 1i +Specifies the application context. +.LP +.eM +The +.PN XtAppGetErrorDatabase +function returns the address of the error database. +The \*(xI do a lazy binding of the error database and do not merge in the +database file until the first call to +.PN XtAppGetErrorDatabaseText . +.LP +For a complete listing of all errors and warnings +that can be generated by the \*(xI, see Appendix D. +.sp +.LP +The high-level error and warning handler procedure pointers are of type +.PN XtErrorMsgHandler . +.LP +.IN "XtErrorMsgHandler" "" "@DEF@" +.sM +.FD 0 +typedef void (*XtErrorMsgHandler)(String, String, String, String, \ +String*, Cardinal*); +.br + String \fIname\fP; +.br + String \fItype\fP; +.br + String \fIclass\fP; +.br + String \fIdefaultp\fP; +.br + String *\fIparams\fP; +.br + Cardinal *\fInum_params\fP; +.FN +.IP \fIname\fP 1i +Specifies the name to be concatenated with the specified type to form +the resource name of the error message. +.IP \fItype\fP 1i +Specifies the type to be concatenated with the name to form the +resource name of the error message. +.IP \fIclass\fP 1i +Specifies the resource class of the error message. +.IP \fIdefaultp\fP 1i +Specifies the default message to use if no error database entry is found. +.IP \fIparams\fP 1i +Specifies a pointer to a list of parameters to be substituted in the message. +.IP \fInum_params\fP 1i +Specifies the number of entries in \fIparams\fP. +.LP +.eM +The specified name can be a general kind of error, +like ``invalidParameters'' or ``invalidWindow'', +and the specified type gives extra information +such as the name of the routine in which the error was detected. +Standard +.PN printf +notation is used to substitute the parameters into the message. +.sp +.LP +An error message handler can obtain the error database text for an +error or a warning by calling +.PN XtAppGetErrorDatabaseText . +.LP +.IN "XtAppGetErrorDatabaseText" "" "@DEF@" +.sM +.FD 0 +void XtAppGetErrorDatabaseText(\fIapp_context\fP, \fIname\fP, \fItype\fP, \fIclass\fP, \fIdefault\fP, \fIbuffer_return\fP, \fInbytes\fP, \fIdatabase\fP) +.br + XtAppContext \fIapp_context\fP; +.br + String \fIname\fP, \fItype\fP, \fIclass\fP; +.br + String \fIdefault\fP; +.br + String \fIbuffer_return\fP; +.br + int \fInbytes\fP; +.br + XrmDatabase \fIdatabase\fP; +.FN +.IP \fIapp_context\fP 1i +Specifies the application context. +.IP \fIname\fP 1i +.br +.ns +.IP \fItype\fP 1i +Specify the name and type concatenated to form the resource name +of the error message. +.IP \fIclass\fP 1i +Specifies the resource class of the error message. +.IP \fIdefault\fP 1i +Specifies the default message to use if an error database entry is not found. +.IP \fIbuffer_return\fP 1i +Specifies the buffer into which the error message is to be returned. +.IP \fInbytes\fP 1i +Specifies the size of the buffer in bytes. +.IP \fIdatabase\fP 1i +Specifies the name of the alternative database to be used, +or NULL if the application context's error database is to be used. +.LP +.eM +The +.PN XtAppGetErrorDatabaseText +returns the appropriate message from the error database +or returns the specified default message if one is not found in the +error database. +To form the full resource name and class when querying the database, +the \fIname\fP and \fItype\fP are concatenated with a single ``.'' +between them and the \fIclass\fP is concatenated with itself with a +single ``.'' if it does not already contain a ``.''. +.sp +.LP +To return the application name and class as passed to +.PN XtDisplayInitialize +for a particular Display, use +.PN XtGetApplicationNameAndClass . +.LP +.IN "XtGetApplicationNameAndClass" "" "@DEF@" +.sM +.FD 0 +void XtGetApplicationNameAndClass(\fIdisplay\fP, \fIname_return\fP, \ +\fIclass_return\fP) +.br + Display* \fIdisplay\fP; +.br + String* \fIname_return\fP; +.br + String* \fIclass_return\fP; +.FN +.IP \fIdisplay\fP 1i +Specifies an open display connection that has been initialized with +.PN XtDisplayInitialize . +.IP \fIname_return\fP 1i +Returns the application name. +.IP \fIclass_return\fP 1i +Returns the application class. +.LP +.eM +.PN XtGetApplicationNameAndClass +returns the application name and class passed to +.PN XtDisplayInitialize +for the specified display. If the display was +never initialized or has been closed, the result is undefined. The +returned strings are owned by the \*(xI and must not be modified +or freed by the caller. +.sp +.LP +To register a procedure to be called on fatal error conditions, use +.PN XtAppSetErrorMsgHandler . +.LP +.IN "XtAppSetErrorMsgHandler" "" "@DEF@" +.sM +.FD 0 +XtErrorMsgHandler XtAppSetErrorMsgHandler(\fIapp_context\fP, \fImsg_handler\fP) +.br + XtAppContext \fIapp_context\fP; +.br + XtErrorMsgHandler \fImsg_handler\fP; +.FN +.IP \fIapp_context\fP 1i +Specifies the application context. +.IP \fImsg_handler\fP 1i +Specifies the new fatal error procedure, which should not return. +.LP +.eM +.PN XtAppSetErrorMsgHandler +returns a pointer to the previously +installed high-level fatal error handler. +The default high-level fatal error handler provided by the \*(xI is named +.PN _XtDefaultErrorMsg +.IN "_XtDefaultErrorMsg" "" "@DEF" +and constructs a string from the error resource database and calls +.PN XtError . +Fatal error message handlers should not return. +If one does, +subsequent \*(xI behavior is undefined. +.sp +.LP +To call the high-level error handler, use +.PN XtAppErrorMsg . +.LP +.IN "XtAppErrorMsg" "" "@DEF@" +.sM +.FD 0 +void XtAppErrorMsg(\fIapp_context\fP, \fIname\fP, \fItype\fP, \fIclass\fP, \ +\fIdefault\fP, \ \fIparams\fP, \fInum_params\fP) +.br + XtAppContext \fIapp_context\fP; +.br + String \fIname\fP; +.br + String \fItype\fP; +.br + String \fIclass\fP; +.br + String \fIdefault\fP; +.br + String *\fIparams\fP; +.br + Cardinal *\fInum_params\fP; +.FN +.IP \fIapp_context\fP 1i +Specifies the application context. +.IP \fIname\fP 1i +Specifies the general kind of error. +.IP \fItype\fP 1i +Specifies the detailed name of the error. +.IP \fIclass\fP 1i +Specifies the resource class. +.IP \fIdefault\fP 1i +Specifies the default message to use if an error database entry is not found. +.IP \fIparams\fP 1i +Specifies a pointer to a list of values to be stored in the message. +.IP \fInum_params\fP 1i +Specifies the number of entries in \fIparams\fP. +.LP +.eM +The \*(xI internal errors all have class +``XtToolkitError''. +.sp +.LP +To register a procedure to be called on nonfatal error conditions, use +.PN XtAppSetWarningMsgHandler . +.LP +.IN "XtAppSetWarningMsgHandler" "" "@DEF@" +.sM +.FD 0 +XtErrorMsgHandler XtAppSetWarningMsgHandler(\fIapp_context\fP, \fImsg_handler\fP) +.br + XtAppContext \fIapp_context\fP; +.br + XtErrorMsgHandler \fImsg_handler\fP; +.FN +.IP \fIapp_context\fP 1i +Specifies the application context. +.IP \fImsg_handler\fP 1i +Specifies the new nonfatal error procedure, which usually returns. +.LP +.eM +.PN XtAppSetWarningMsgHandler +returns a pointer to the previously +installed high-level warning handler. +The default high-level warning handler provided by the \*(xI is named +.PN _XtDefaultWarningMsg +.IN "_XtDefaultWarningMsg" "" "@DEF@" +and constructs a string +from the error resource database and calls +.PN XtWarning . +.sp +.LP +To call the installed high-level warning handler, use +.PN XtAppWarningMsg . +.LP +.IN "XtAppWarningMsg" "" "@DEF@" +.sM +.FD 0 +void XtAppWarningMsg(\fIapp_context\fP, \fIname\fP, \fItype\fP, \fIclass\fP, \fIdefault\fP, \fIparams\fP, \fInum_params\fP) +.br + XtAppContext \fIapp_context\fP; +.br + String \fIname\fP; +.br + String \fItype\fP; +.br + String \fIclass\fP; +.br + String \fIdefault\fP; +.br + String *\fIparams\fP; +.br + Cardinal *\fInum_params\fP; +.FN +.IP \fIapp_context\fP 1i +Specifies the application context. +.IP \fIname\fP 1i +Specifies the general kind of error. +.IP \fItype\fP 1i +Specifies the detailed name of the error. +.IP \fIclass\fP 1i +Specifies the resource class. +.IP \fIdefault\fP 1i +Specifies the default message to use if an error database entry is not found. +.IP \fIparams\fP 1i +Specifies a pointer to a list of values to be stored in the message. +.IP \fInum_params\fP 1i +Specifies the number of entries in \fIparams\fP. +.LP +.eM +The \*(xI internal warnings all have class +``XtToolkitError''. +.sp +.LP +The low-level error and warning handler procedure pointers are of type +.PN XtErrorHandler . +.LP +.IN "XtErrorHandler" "" "@DEF@" +.sM +.FD 0 +typedef void (*XtErrorHandler)(String); +.br + String \fImessage\fP; +.FN +.IP \fImessage\fP 1i +Specifies the error message. +.LP +.eM +The error handler should display the message string in some appropriate fashion. +.sp +.LP +To register a procedure to be called on fatal error conditions, use +.PN XtAppSetErrorHandler . +.LP +.IN "XtAppSetErrorHandler" "" "@DEF@" +.sM +.FD 0 +XtErrorHandler XtAppSetErrorHandler(\fIapp_context\fP, \fIhandler\fP) +.br + XtAppContext \fIapp_context\fP; +.br + XtErrorHandler \fIhandler\fP; +.FN +.IP \fIapp_context\fP 1i +Specifies the application context. +.IP \fIhandler\fP 1i +Specifies the new fatal error procedure, which should not return. +.LP +.eM +.PN XtAppSetErrorHandler +returns a pointer to the previously installed +low-level fatal error handler. +The default low-level error handler provided by the \*(xI is +.PN _XtDefaultError . +.IN "_XtDefaultError" "" "@DEF@" +On POSIX-based systems, +it prints the message to standard error and terminates the application. +Fatal error message handlers should not return. +If one does, +subsequent \*(xI behavior is undefined. +.sp +.LP +To call the installed fatal error procedure, use +.PN XtAppError . +.LP +.IN "XtAppError" "" "@DEF@" +.sM +.FD 0 +void XtAppError(\fIapp_context\fP, \fImessage\fP) +.br + XtAppContext \fIapp_context\fP; +.br + String \fImessage\fP; +.FN +.IP \fIapp_context\fP 1i +Specifies the application context. +.IP \fImessage\fP 1i +Specifies the message to be reported. +.LP +.eM +Most programs should use +.PN XtAppErrorMsg , +not +.PN XtAppError , +to provide for customization and internationalization of error messages. +.sp +.LP +To register a procedure to be called on nonfatal error conditions, use +.PN XtAppSetWarningHandler . +.LP +.IN "XtAppSetWarningHandler" "" "@DEF@" +.sM +.FD 0 +XtErrorHandler XtAppSetWarningHandler(\fIapp_context\fP, \fIhandler\fP) +.br + XtAppContext \fIapp_context\fP; +.br + XtErrorHandler \fIhandler\fP; +.FN +.IP \fIapp_context\fP 1i +Specifies the application context. +.IP \fIhandler\fP 1i +Specifies the new nonfatal error procedure, which usually returns. +.LP +.eM +.PN XtAppSetWarningHandler +returns a pointer to the previously installed +low-level warning handler. +The default low-level warning handler provided by the \*(xI is +.PN _XtDefaultWarning . +.IN "_XtDefaultWarning" "" "@DEF@" +On POSIX-based systems, +it prints the message to standard error and returns to the caller. +.sp +.LP +To call the installed nonfatal error procedure, use +.PN XtAppWarning . +.LP +.IN "XtAppWarning" "" "@DEF@" +.sM +.FD 0 +void XtAppWarning(\fIapp_context\fP, \fImessage\fP) +.br + XtAppContext \fIapp_context\fP; +.br + String \fImessage\fP; +.FN +.IP \fIapp_context\fP 1i +Specifies the application context. +.IP \fImessage\fP 1i +Specifies the nonfatal error message to be reported. +.LP +.eM +Most programs should use +.PN XtAppWarningMsg , +not +.PN XtAppWarning , +to provide for customization and internationalization of warning messages. + +.NH 2 +Setting WM_COLORMAP_WINDOWS +.XS +\fB\*(SN Setting WM_COLORMAP_WINDOWS\fP +.XE +.LP +A client may set the value of the \s-1WM_COLORMAP_WINDOWS\s+1 +.IN "WM_COLORMAP_WINDOWS" "" "@DEF@" +property on a widget's window by calling +.PN XtSetWMColormapWindows . +.LP +.IN "XtSetWMColormapWindows" "" "@DEF@" +.sM +.FD 0 +void XtSetWMColormapWindows(\fIwidget\fP, \fIlist\fP, \fIcount\fP) +.br + Widget \fIwidget\fP; +.br + Widget* \fIlist\fP; +.br + Cardinal \fIcount\fP; +.FN +.IP \fIwidget\fP 1i +Specifies the widget on whose window the \s-1WM_COLORMAP_WINDOWS\s+1 +property is stored. \*(cI +.IP \fIlist\fP 1i +Specifies a list of widgets whose windows are potentially to be +listed in the \s-1WM_COLORMAP_WINDOWS\s+1 property. +.IP \fIcount\fP 1i +Specifies the number of widgets in \fIlist\fP. +.LP +.eM +.PN XtSetWMColormapWindows +returns immediately if \fIwidget\fP is not realized or if \fIcount\fP is 0. +Otherwise, +.PN XtSetWMColormapWindows +constructs an ordered list of windows +by examining each widget in \fIlist\fP in turn and +ignoring the widget if it is not realized, or +adding the widget's window to the window list if the widget is realized +and if its colormap resource is different from the colormap +resources of all widgets whose windows are already on the window list. +.LP +Finally, +.PN XtSetWMColormapWindows +stores the resulting window list in the \s-1WM_COLORMAP_WINDOWS\s+1 +property on the specified widget's window. +Refer to Section 4.1.8 in the \fI\*(xC\fP for details of +the semantics of the \s-1WM_COLORMAP_WINDOWS\s+1 property. + +.NH 2 +Finding File Names +.XS +\fB\*(SN Finding File Names\fP +.XE +.LP +The \*(xI provide procedures to look for a file by name, allowing +string substitutions in a list of file specifications. Two +routines are provided for this: +.PN XtFindFile +and +.PN XtResolvePathname . +.PN XtFindFile +uses an arbitrary set of client-specified substitutions, and +.PN XtResolvePathname +uses a set of standard substitutions corresponding +to the \fIX/Open Portability Guide\fP language localization conventions. +Most applications should use +.PN XtResolvePathname . +.LP +A string substitution is defined by a list of +.PN Substitution +.IN "Substitution" "" "@DEF@" +entries. +.LP +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + char match; + String substitution; +} SubstitutionRec, *Substitution; +.De +.eM +.LP +File name evaluation is handled in an operating-system-dependent +fashion by an +.PN XtFilePredicate +.IN "XtFilePredicate" "" "@DEF@" +procedure. +.LP +.sM +.FD 0 +typedef Boolean (*XtFilePredicate)(String); +.br + String \fIfilename\fP; +.FN +.IP \fIfilename\fP 1i +Specifies a potential filename. +.LP +.eM +A file predicate procedure is called with a string that is +potentially a file name. It should return +.PN True +if this string specifies a file that is appropriate for the intended use and +.PN False +otherwise. +.sp +.LP +To search for a file using substitutions in a path list, use +.PN XtFindFile . +.LP +.IN "XtFindFile" "" "@DEF@" +.sM +.FD 0 +String XtFindFile(\fIpath\fP, \fIsubstitutions\fP, \fInum_substitutions\fP, \ +\fIpredicate\fP) +.br + String \fIpath\fP; +.br + Substitution \fIsubstitutions\fP; +.br + Cardinal \fInum_substitutions\fP; +.br + XtFilePredicate \fIpredicate\fP; +.FN +.IP \fIpath\fP 1.2i +Specifies a path of file names, including substitution characters. +.IP \fIsubstitutions\fP 1.2i +Specifies a list of substitutions to make into the path. +.IP \fInum_substitutions\fP 1.2i +Specifies the number of substitutions passed in. +.IP \fIpredicate\fP 1.2i +Specifies a procedure called to judge each potential file name, or NULL. +.LP +.eM +The \fIpath\fP parameter specifies a string that consists of a series of +potential file names delimited by colons. Within each name, the +percent character specifies a string substitution selected by the +following character. The character sequence ``%:'' specifies an +embedded colon that is not a delimiter; the sequence is replaced by a +single colon. The character sequence ``%%'' specifies a percent +character that does not introduce a substitution; the sequence is +replaced by a single percent character. If a percent character is +followed by any other character, +.PN XtFindFile +looks through the +specified \fIsubstitutions\fP for that character in the \fImatch\fP field +and, if found, +replaces the percent and match characters with the string in the +corresponding \fIsubstitution\fP field. A \fIsubstitution\fP field entry of NULL +is equivalent to a pointer to an empty string. If the operating +system does not interpret multiple embedded name separators in the +path (i.e., ``/'' in POSIX) the same way as a single separator, +.PN XtFindFile +will collapse multiple separators into a single one after performing +all string substitutions. Except for collapsing embedded separators, +the contents of the string substitutions are not interpreted by +.PN XtFindFile +and may therefore contain any operating-system-dependent +characters, including additional name separators. Each resulting +string is passed to the predicate procedure until a string is found for +which the procedure returns +.PN True ; +this string is the return value for +.PN XtFindFile . +If no string yields a +.PN True +return from the predicate, +.PN XtFindFile +returns NULL. +.LP +If the \fIpredicate\fP parameter is NULL, an internal procedure that checks +if the file exists, is readable, and is not a directory is used. +.LP +It is the responsibility of the caller to free the returned string using +.PN XtFree +when it is no longer needed. +.sp +.LP +To search for a file using standard substitutions in a path list, use +.PN XtResolvePathname . +.LP +.IN "XtResolvePathname" "" "@DEF@" +.sM +.FD 0 +String XtResolvePathname(\fIdisplay\fP, \fItype\fP, \fIfilename\fP, \fIsuffix\fP, \ +\fIpath\fP, \fIsubstitutions\fP, \fInum_substitutions\fP, \fIpredicate\fP) +.br + Display *\fIdisplay\fP; +.br + String \fItype\fP, \fIfilename\fP, \fIsuffix\fP, \fIpath\fP; +.br + Substitution \fIsubstitutions\fP; +.br + Cardinal \fInum_substitutions\fP; +.br + XtFilePredicate \fIpredicate\fP; +.FN +.IP \fIdisplay\fP 1.2i +Specifies the display to use to find the language for language substitutions. +.IP \fItype\fP +.br +.ns +.IP \fIfilename\fP +.br +.ns +.IP \fIsuffix\fP 1.2i +Specify values to substitute into the path. +.IP \fIpath\fP 1.2i +Specifies the list of file specifications, or NULL. +.IP \fIsubstitutions\fP 1.2i +Specifies a list of additional substitutions to make into the path, or NULL. +.IP \fInum_substitutions\fP 1.2i +Specifies the number of entries in \fIsubstitutions\fP. +.IP \fIpredicate\fP 1.2i +Specifies a procedure called to judge each potential file name, or NULL. +.LP +.eM +The substitutions specified by +.PN XtResolvePathname +are determined from the value of the language string retrieved by +.PN XtDisplayInitialize +for the specified display. +To set the +language for all applications specify ``*xnlLanguage: \fIlang\fP'' in the +resource database. +.IN "xnlLanguage" +The format and content of the language string are +implementation-defined. One suggested syntax is to compose +the language string of three parts; a ``language part'', a +``territory part'' and a ``codeset part''. The manner in which +this composition is accomplished is implementation-defined, +and the \*(xI make no interpretation of the parts other +than to use them in substitutions as described below. +.LP +.PN XtResolvePathname +calls +.PN XtFindFile +with the following substitutions +in addition to any passed by the caller and returns the value returned by +.PN XtFindFile : +.IP %N 5 +The value of the \fIfilename\fP parameter, or the application's +class name if \fIfilename\fP is NULL. +.IP %T 5 +The value of the \fItype\fP parameter. +.IP %S 5 +The value of the \fIsuffix\fP parameter. +.IP %L 5 +The language string associated with the specified display. +.IP %l 5 +The language part of the display's language string. +.IP %t 5 +The territory part of the display's language string. +.IP %c 5 +The codeset part of the display's language string. +.IP %C 5 +The customization string retrieved from the resource +database associated with \fIdisplay\fP. +.IP %D 5 +The value of the implementation-specific default path. +.LP +If a path is passed to +.PN XtResolvePathname , +it is passed along to +.PN XtFindFile . +If the \fIpath\fP argument is NULL, the value of the +.PN \s-1XFILESEARCHPATH\s+1 +.IN "XFILESEARCHPATH" "" "@DEF@" +environment variable is passed to +.PN XtFindFile . +If +.PN \s-1XFILESEARCHPATH\s+1 +is not defined, an implementation-specific default path is used +that contains at least six entries. These entries +must contain the following substitutions: + +.nf +.ta .3i 2i 2.5i +1. %C, %N, %S, %T, %L or %C, %N, %S, %T, %l, %t, %c +2. %C, %N, %S, %T, %l +3. %C, %N, %S, %T +4. %N, %S, %T, %L or %N, %S, %T, %l, %t, %c +5. %N, %S, %T, %l +6. %N, %S, %T +.fi + +The order of these six entries within the path must be as given above. +The order and use of substitutions within a given entry +are implementation-dependent. +If the path begins +with a colon, it is preceded by %N%S. If the path includes two +adjacent colons, \fB%N%S\fP is inserted between them. +.LP +The \fItype\fP parameter is intended to be a category of files, usually +being translated into a directory in the pathname. Possible values +might include ``app-defaults'', ``help'', and ``bitmap''. +.LP +The \fIsuffix\fP parameter is intended to be appended to the file name. +Possible values might include ``.txt'', ``.dat'', and ``.bm''. +.LP +A suggested value for the default path on POSIX-based systems is +.IP +/usr/lib/X11/%L/%T/%N%C%S:/usr/lib/X11/%l/%T/%N%C%S:\\ +.br +/usr/lib/X11/%T/%N%C%S:/usr/lib/X11/%L/%T/%N%S:\\ +.br +/usr/lib/X11/%l/%T/%N%S:/usr/lib/X11/%T/%N%S + +.LP +Using this example, if the user has specified a language, it is +used as a subdirectory of /usr/lib/X11 that is searched for other +files. If the desired file is not found there, the lookup is +tried again using just the language part of the specification. If the +file is not there, it is looked for in /usr/lib/X11. The \fItype\fP +parameter is used as a subdirectory of the language directory or of +/usr/lib/X11, and \fIsuffix\fP is appended to the file name. +.LP +The %D substitution allows the addition of path +elements to the implementation-specific default path, typically to +allow additional directories to be searched without preventing +resources in the system directories from being found. For example, a +user installing resource files under a directory called ``ourdir'' +might set +.PN \s-1XFILESEARCHPATH\s+1 +to +.IP +%D:ourdir/%T/%N%C:ourdir/%T/%N +.LP +The customization string is obtained by querying the resource database +currently associated with the display (the database returned by +.PN XrmGetDatabase ) +for the resource \fIapplication_name\fP.customization, class +\fIapplication_class\fP.Customization, where \fIapplication_name\fP +and \fIapplication_class\fP are the values returned by +.PN XtGetApplicationNameAndClass . +If no value is specified in the database, the empty string is used. +.LP +It is the responsibility of the caller to free the returned string using +.PN XtFree +when it is no longer needed. + +.NH 2 +Hooks for External Agents +.XS +\fB\*(SN Hooks for External Agents\fP +.XE +.LP +Applications may register +functions that are called at a particular control points in the \*(xI. +These functions are intended to be used to provide notification +of an \*Q\*(tk event\*U, such as widget creation, to an external agent, +such as an interactive resource editor, drag-and-drop server, or +an aid for physically challenged users. +The control points containing such registration hooks are identified +in a \*Qhook registration\*U object. +.LP +To retrieve the hook registration widget, use +.PN XtHooksOfDisplay . +.LP +.IN "XtHooksOfDisplay" "" "@DEF@" +.sM +.FD 0 +Widget XtHooksOfDisplay(\fIdisplay\fP) +.br + Display *\fIdisplay\fP; +.FN +.IP \fIdisplay\fP 1i +Specifies the desired display. +.LP +.eM +The class of this object is a private, implementation-dependent +subclass of +.PN Object . +The hook object has no parent. The resources of this object are +the callback lists for hooks and the read-only resources for getting +a list of parentless shells. All of the callback lists are initially +empty. When a display is closed, the hook object associated with it +is destroyed. +.LP +The following procedures can be called with the hook registration object +as an argument: +.sp +.IP +.PN XtAddCallback , +.PN XtAddCallbacks , +.PN XtRemoveCallback , +.PN XtRemoveCallbacks , +.PN XtRemoveAllCallbacks , +.PN XtCallCallbacks , +.PN XtHasCallbacks , +.PN XtCallCallbackList +.IP +.PN XtClass , +.PN XtSuperclass , +.PN XtIsSubclass , +.PN XtCheckSubclass , +.PN XtIsObject , +.PN XtIsRectObj , +.PN XtIsWidget , +.PN XtIsComposite , +.PN XtIsConstraint , +.PN XtIsShell , +.PN XtIsOverrideShell , +.PN XtIsWMShell , +.PN XtIsVendorShell , +.PN XtIsTransientShell , +.PN XtIsToplevelShell , +.PN XtIsApplicationShell , +.PN XtIsSessionShell +.IP +.PN XtWidgetToApplicationContext +.IP +.PN XtName , +.PN XtParent , +.PN XtDisplayOfObject , +.PN XtScreenOfObject +.IP +.PN XtSetValues , +.PN XtGetValues , +.PN XtVaSetValues , +.PN XtVaGetValues +.sp +.LP + +.NH 3 +Hook Object Resources +.XS +\fB\*(SN Hook Object Resources\fP +.XE +.LP +The resource names, classes, and representation types that are specified +in the hook object resource list are: +.KS +.TS +lw(1.5i) lw(1.5i) lw(2.5i) . +_ +.sp 6p +Name Class Representation +.sp 6p +_ +.sp 6p +XtNcreateHook XtCCallback XtRCallback +XtNchangeHook XtCCallback XtRCallback +XtNconfigureHook XtCCallback XtRCallback +XtNgeometryHook XtCCallback XtRCallback +XtNdestroyHook XtCCallback XtRCallback +XtNshells XtCReadOnly XtRWidgetList +XtNnumShells XtCReadOnly XtRCardinal +.sp 6p +_ +.TE +.KE +.LP +Descriptions of each of these resources: +.LP +The XtNcreateHook callback list is called from: +.PN XtCreateWidget , +.PN XtCreateManagedWidget , +.PN XtCreatePopupShell , +.PN XtAppCreateShell , +and their corresponding varargs versions. +.LP +The \fIcall_data\fP parameter in a createHook callback may be +cast to type +.PN XtCreateHookData . +.LP +.IN "XtCreateHookData" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + String type; + Widget widget; + ArgList args; + Cardinal num_args; +} XtCreateHookDataRec, *XtCreateHookData; +.De +.eM +.LP +The \fItype\fP is set to +.PN XtHcreate , +\fIwidget\fP is the newly created widget, and \fIargs\fP and \fInum_args\fP +are the arguments passed to the create function. The callbacks are +called before returning from the create function. +.LP +The XtNchangeHook callback list is called from: +.IP +.PN XtSetValues , +.PN XtVaSetValues +.IP +.PN XtManageChild , +.PN XtManageChildren , +.PN XtUnmanageChild , +.PN XtUnmanageChildren +.IP +.PN XtRealizeWidget , +.PN XtUnrealizeWidget +.IP +.PN XtAddCallback , +.PN XtRemoveCallback , +.PN XtAddCallbacks, +.PN XtRemoveCallbacks , +.PN XtRemoveAllCallbacks +.IP +.PN XtAugmentTranslations , +.PN XtOverrideTranslations , +.PN XtUninstallTranslations +.IP +.PN XtSetKeyboardFocus , +.PN XtSetWMColormapWindows +.IP +.PN XtSetMappedWhenManaged , +.PN XtMapWidget , +.PN XtUnmapWidget +.IP +.PN XtPopup , +.PN XtPopupSpringLoaded , +.PN XtPopdown +.LP +.sp +.LP +The \fIcall_data\fP parameter in a changeHook callback may +be cast to type +.PN XtChangeHookData . +.IN "XtChangeHookData" "" "@DFEF@" +.LP +.KS +.sM +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef struct { + String type; + Widget widget; + XtPointer event_data; + Cardinal num_event_data; +} XtChangeHookDataRec, *XtChangeHookData; +.De +.eM +.KE +.LP +When the changeHook callbacks are called as a result of a call to +.PN XtSetValues +or +.PN XtVaSetValues , +\fItype\fP is set to +.PN XtHsetValues , +\fIwidget\fP is the new widget passed to the set_values procedure, and +\fIevent_data\fP may be cast to type +.PN XtChangeHookSetValuesData . +.IN "XtChangeHookSetValuesData" "" "@DEF@" +.LP +.KS +.sM +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef struct { + Widget old, req; + ArgList args; + Cardinal num_args; +} XtChangeHookSetValuesDataRec, *XtChangeHookSetValuesData; +.De +.eM +.KE +.LP +The \fIold\fP, \fIreq\fP, \fIargs\fP, and \fInum_args\fP are the +parameters passed to the set_values procedure. The callbacks are called +after the set_values and constraint set_values procedures have been called. +.LP +When the changeHook callbacks are called as a result of a call to +.PN XtManageChild +or +.PN XtManageChildren , +\fItype\fP is set to +.PN XtHmanageChildren , +\fIwidget\fP is the parent, \fIevent_data\fP may be cast to type +WidgetList and is the list of children being managed, and +\fInum_event_data\fP is the length of the widget list. +The callbacks are called after the children have been managed. +.LP +When the changeHook callbacks are called as a result of a call to +.PN XtUnmanageChild +or +.PN XtUnmanageChildren , +\fItype\fP is set to +.PN XtHunmanageChildren , +\fIwidget\fP is the parent, \fIevent_data\fP may be cast to type +WidgetList and is a list of the children being unmanaged, and +\fInum_event_data\fP is the length of the widget list. +The callbacks are called after the children have been unmanaged. +.LP +The changeHook callbacks are called twice as a result of a call to +.PN XtChangeManagedSet , +once after unmanaging and again after managing. +When the callbacks are called the first time, \fItype\fP is set to +.PN XtHunmanageSet , +\fIwidget\fP is the parent, \fIevent_data\fP may be cast to type +WidgetList and is a list of the children being unmanaged, and +\fInum_event_data\fP is the length of the widget list. +When the callbacks are called the second time, the \fItype\fP is set to +.PN XtHmanageSet , +\fIwidget\fP is the parent, \fIevent_data\fP may be cast to type +WidgetList and is a list of the children being managed, and +\fInum_event_data\fP is the length of the widget list. +.LP +When the changeHook callbacks are called as a result of a call to +.PN XtRealizeWidget , +the \fItype\fP is set to +.PN XtHrealizeWidget +and \fIwidget\fP is the widget being realized. +The callbacks are called after the widget has been realized. +.LP +When the changeHook callbacks are called as a result of a call to +.PN XtUnrealizeWidget , +the \fItype\fP is set to +.PN XtHunrealizeWidget , +and \fIwidget\fP is the widget being unrealized. +The callbacks are called after the widget has been unrealized. +.LP +When the changeHook callbacks are called as a result of a call to +.PN XtAddCallback , +\fItype\fP is set to +.PN XtHaddCallback , +\fIwidget\fP is the widget to which the callback is being added, and +\fIevent_data\fP may be cast to type String and is the name of the +callback being added. +The callbacks are called after the callback has been added to the widget. +.LP +When the changeHook callbacks are called as a result of a call to +.PN XtAddCallbacks , +the \fItype\fP is set to +.PN XtHaddCallbacks , +\fIwidget\fP is the widget to which the callbacks are being added, and +\fIevent_data\fP may be cast to type String and is the name of the +callbacks being added. +The callbacks are called after the callbacks have been added to the widget. +.LP +When the changeHook callbacks are called as a result of a call to +.PN XtRemoveCallback , +the \fItype\fP is set to +.PN XtHremoveCallback , +\fIwidget\fP is the widget from which the callback is being removed, and +\fIevent_data\fP may be cast to type String and is the name of +the callback being removed. The callbacks are called after the callback +has been removed from the widget. +.LP +When the changeHook callbacks are called as a result of a call to +.PN XtRemoveCallbacks , +the \fItype\fP is set to +.PN XtHremoveCallbacks , +\fIwidget\fP is the widget from which the callbacks are being removed, and +\fIevent_data\fP may be cast to type String and is the name of the +callbacks being removed. The callbacks are called after the callbacks +have been removed from the widget. +.LP +When the changeHook callbacks are called as a result of a call to +.PN XtRemoveAllCallbacks , +the \fItype\fP is set to +.PN XtHremoveAllCallbacks +and \fIwidget\fP is the widget from which the callbacks are being removed. +The callbacks are called after the callbacks have been removed from the +widget. +.LP +When the changeHook callbacks are called as a result of a call to +.PN XtAugmentTranslations , +the \fItype\fP is set to +.PN XtHaugmentTranslations +and \fIwidget\fP is the widget whose translations are being modified. +The callbacks are called after the widget's translations have been +modified. +.LP +When the changeHook callbacks are called as a result of a call to +.PN XtOverrideTranslations , +the \fItype\fP is set to +.PN XtHoverrideTranslations +and \fIwidget\fP is the widget whose translations are being modified. +The callbacks are called after the widget's translations have been +modified. +.LP +When the changeHook callbacks are called as a result of a call to +.PN XtUninstallTranslations , +The \fItype\fP is +.PN XtHuninstallTranslations +and \fIwidget\fP is the widget whose translations are being uninstalled. +The callbacks are called after the widget's translations have been +uninstalled. +.LP +When the changeHook callbacks are called as a result of a call to +.PN XtSetKeyboardFocus , +the \fItype\fP is set to +.PN XtHsetKeyboardFocus +and \fIevent_data\fP may be cast to type Widget and is the value of +the descendant argument passed to \fBXtSetKeyboardFocus\fP. The +callbacks are called before returning from \fBXtSetKeyboardFocus\fP. +.LP +When the changeHook callbacks are called as a result of a call to +.PN XtSetWMColormapWindows , +\fItype\fP is set to +.PN XtHsetWMColormapWindows , +\fIevent_data\fP may be cast to type WidgetList and is the value of +the list argument passed to \fBXtSetWMColormapWindows\fP, and +\fInum_event_data\fP is the length of the list. The callbacks are +called before returning from \fBXtSetWMColormapWindows\fP. +.LP +When the changeHook callbacks are called as a result of a call to +.PN XtSetMappedWhenManaged , +the \fItype\fP is set to +.PN XtHsetMappedWhenManaged +and \fIevent_data\fP may be cast to type Boolean and is the value of +the mapped_when_managed argument passed to \fBXtSetMappedWhenManaged\fP. +The callbacks are called after setting the widget's mapped_when_managed +field and before realizing or unrealizing the widget. +.LP +When the changeHook callbacks are called as a result of a call to +.PN XtMapWidget , +the \fItype \fP is set to +.PN XtHmapWidget +and \fIwidget\fP is the widget being mapped. +The callbacks are called after mapping the widget. +.LP +When the changeHook callbacks are called as a result of a call to +.PN XtUnmapWidget , +the \fItype \fP is set to +.PN XtHunmapWidget +and \fIwidget\fP is the widget being unmapped. +The callbacks are called after unmapping the widget. +.LP +When the changeHook callbacks are called as a result of a call to +.PN XtPopup , +the \fItype\fP is set to +.PN XtHpopup , +\fIwidget\fP is the widget being popped up, and \fIevent_data\fP may +be cast to type XtGrabKind and is the value of the grab_kind argument +passed to \fBXtPopup\fP. +The callbacks are called before returning from \fBXtPopup\fP. +.LP +When the changeHook callbacks are called as a result of a call to +.PN XtPopupSpringLoaded , +the \fItype\fP is set to +.PN XtHpopupSpringLoaded +and \fIwidget\fP is the widget being popped up. +The callbacks are called +before returning from \fBXtPopupSpringLoaded\fP. +.LP +When the changeHook callbacks are called as a result of a call to +.PN XtPopdown , +the \fItype\fP is set to +.PN XtHpopdown +and \fIwidget\fP is the widget being popped down. +The callbacks are called +before returning from \fBXtPopdown\fP. +.LP +A widget set that exports interfaces that change application state +without employing the \*(xI library should invoke the change hook +itself. This is done by: +.sp +.Ds +.TA .5i 2i +.ta .5i 2i + XtCallCallbacks(XtHooksOfDisplay(dpy), XtNchangeHook, call_data); +.De +.sp +.LP +The XtNconfigureHook callback list is called any time the \*(xI +move, resize, or configure a widget and when +.PN XtResizeWindow +is called. +.LP +The \fIcall_data\fP parameter may be cast to type +.PN XtConfigureHookData. +.LP +.IN "XtConfigureHookData" "" "@DEF@" +.KS +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + String type; + Widget widget; + XtGeometryMask changeMask; + XWindowChanges changes; +} XtConfigureHookDataRec, *XtConfigureHookData; +.De +.eM +.KE +.sp +.LP +When the configureHook callbacks are called, the \fItype\fP is +.PN XtHconfigure , +\fIwidget\fP is the widget being configured, and \fIchangeMask\fP and +\fIchanges\fP reflect the changes made to the widget. The callbacks +are called after changes have been made to the widget. +.LP +The XtNgeometryHook callback list is called from +.PN XtMakeGeometryRequest +and +.PN XtMakeResizeRequest +once before and once after geometry negotiation occurs. +.LP +The \fIcall_data\fP parameter may be cast to type +.PN XtGeometryHookData . +.LP +.IN "XtGeometryHookData" "" "@DFEF@" +.LP +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + String type; + Widget widget; + XtWidgetGeometry* request; + XtWidgetGeometry* reply; + XtGeometryResult result; +} XtGeometryHookDataRec, *XtGeometryHookData; +.De +.eM +.sp +.LP +When the geometryHook callbacks are called prior to geometry negotiation, +the \fItype\fP is +.PN XtHpreGeometry , +\fIwidget\fP is the widget for which the request is being made, and +\fIrequest\fP is the requested geometry. +When the geometryHook callbacks +are called after geometry negotiation, the \fItype\fP is +.PN XtHpostGeometry , +\fIwidget\fP is the widget for which the request was made, \fIrequest\fP +is the requested geometry, \fIreply\fP is the resulting geometry granted, +and \fIresult\fP is the value returned from the geometry negotiation. +.LP +The XtNdestroyHook callback list is called when a widget is destroyed. +The \fIcall_data parameter\fP may be cast to type +.PN XtDestroyHookData . +.LP +.IN "XtDestroyHookData" "" "@DFEF@" +.sp +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + String type; + Widget widget; +} XtDestroyHookDataRec, *XtDestroyHookData; +.De +.eM +.sp +.LP +When the destroyHook callbacks are called as a result of a call to +.PN XtDestroyWidget , +the \fItype\fP is +.PN XtHdestroy +and \fIwidget\fP is the widget being destroyed. The callbacks are +called upon completion of phase one destroy for a widget. +.LP +The XtNshells and XtnumShells are read-only resources that report a +list of all parentless shell widgets associated with a display. +.LP +Clients who use these hooks must exercise caution in calling \*(xI +functions in order to avoid recursion. + +.NH 3 +Querying Open Displays +.XS +\fB\*(SN Querying Open Displays\fP +.XE +.LP +To retrieve a list of the Displays associated with an application context, +use +.PN XtGetDisplays . +.LP +.IN "XtGetDisplays" "" "@DEF@" +.sM +.FD 0 +void XtGetDisplays(\fIapp_context\fP, \fIdpy_return\fP, \fInum_dpy_return\fP) +.br + XtAppContext \fIapp_context\fP; +.br + Display ***\fIdpy_return\fP; +.br + Cardinal *\fInum_dpy_return\fP; +.FN +.IP \fIapp_context\fP 1.5i +Specifies the application context. +.IP \fIdpy_return\fP 1.5i +Returns a list of open Display connections in the specified application +context. +.IP \fInum_dpy_return\fP 1.5i +Returns the count of open Display connections in \fIdpy_return\fP. +.LP +.eM +\fBXtGetDisplays\fP may be used by an external agent to query the +list of open displays that belong to an application context. To free +the list of displays, use +.PN XtFree . +.bp |