3567 lines
101 KiB
Plaintext
3567 lines
101 KiB
Plaintext
|
.\" $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
|