aboutsummaryrefslogtreecommitdiff
path: root/libXt/specs/CH08
diff options
context:
space:
mode:
Diffstat (limited to 'libXt/specs/CH08')
-rw-r--r--libXt/specs/CH08452
1 files changed, 452 insertions, 0 deletions
diff --git a/libXt/specs/CH08 b/libXt/specs/CH08
new file mode 100644
index 000000000..6dfb5290b
--- /dev/null
+++ b/libXt/specs/CH08
@@ -0,0 +1,452 @@
+.\" $Xorg: CH08,v 1.3 2000/08/17 19:42:46 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 8\fP\s-1
+
+\s+1\fBCallbacks\fP\s-1
+.sp 2
+.nr H1 8
+.nr H2 0
+.nr H3 0
+.nr H4 0
+.nr H5 0
+.LP
+.XS
+Chapter 8 \(em Callbacks
+.XE
+.IN "Destroy Callbacks"
+Applications and other widgets often need to register a procedure
+with a widget that gets called under certain prespecified conditions.
+For example,
+when a widget is destroyed,
+every procedure on the widget's \fIdestroy_callbacks\fP
+list is called to notify clients of the widget's impending doom.
+.LP
+Every widget has an XtNdestroyCallbacks callback list resource.
+Widgets can define additional callback lists as they see fit.
+For example, the Pushbutton widget has a callback
+list to notify clients when the button has been activated.
+.LP
+Except where otherwise noted, it is the intent that all Intrinsics
+functions may be called at any time, including from within callback
+procedures, action routines, and event handlers.
+
+.NH 2
+Using Callback Procedure and Callback List Definitions
+.XS
+\fB\*(SN Using Callback Procedure and Callback List Definitions\fP
+.XE
+.IN "XtCallbackList"
+.IN "XtCallbackProc"
+.LP
+Callback procedure pointers for use in callback lists are of type
+.PN XtCallbackProc .
+.LP
+.IN "XtCallbackProc" "" "@DEF@"
+.sM
+.FD 0
+typedef void (*XtCallbackProc)(Widget, XtPointer, XtPointer);
+.br
+ Widget \fIw\fP;
+.br
+ XtPointer \fIclient_data\fP;
+.br
+ XtPointer \fIcall_data\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the widget owning the list in which the callback is registered.
+.IP \fIclient_data\fP 1i
+Specifies additional data supplied by the client when the procedure
+was registered.
+.IP \fIcall_data\fP 1i
+Specifies any callback-specific data the widget wants to pass to the client.
+For example, when Scrollbar executes its XtNthumbChanged callback list,
+it passes the new position of the thumb.
+.LP
+.eM
+The \fIclient_data\fP argument provides a way for the
+client registering the callback procedure also to register client-specific data,
+for example, a pointer to additional information about the widget,
+a reason for invoking the callback, and so on.
+The \fIclient_data\fP value may be NULL
+if all necessary information is in the widget.
+The \fIcall_data\fP argument is a convenience to avoid having simple
+cases where the client could otherwise always call
+.PN XtGetValues
+or a widget-specific function to retrieve data from the widget.
+Widgets should generally avoid putting complex state information
+in \fIcall_data\fP.
+The client can use the more general data retrieval methods, if necessary.
+.LP
+Whenever a client wants to pass a callback list as an argument in an
+.PN XtCreateWidget ,
+.PN XtSetValues ,
+or
+.PN XtGetValues
+call, it should specify the address
+of a NULL-terminated array of type
+.PN XtCallbackList .
+.IN "XtCallbackList" "" "@DEF@"
+.IN "XtCallbackRec" "" "@DEF@"
+.LP
+.sM
+.Ds 0
+.TA .5i 3i
+.ta .5i 3i
+typedef struct {
+ XtCallbackProc callback;
+ XtPointer closure;
+} XtCallbackRec, *XtCallbackList;
+.De
+.LP
+.eM
+For example, the callback list for procedures A and B with client data
+clientDataA and clientDataB, respectively, is
+.LP
+.KS
+.Ds 5
+.TA .5i 3i
+.ta .5i 3i
+static XtCallbackRec callbacks[] = {
+ {A, (XtPointer) clientDataA},
+ {B, (XtPointer) clientDataB},
+ {(XtCallbackProc) NULL, (XtPointer) NULL}
+};
+.De
+.KE
+.LP
+Although callback lists are passed by address in arglists
+and varargs lists,
+the \*(xI recognize callback lists
+through the widget resource list and will copy the contents
+when necessary.
+Widget initialize and set_values procedures
+should not allocate memory for the callback list contents.
+The \*(xI automatically do this,
+potentially using a different structure for their
+internal representation.
+
+.NH 2
+Identifying Callback Lists
+.XS
+\fB\*(SN Identifying Callback Lists\fP
+.XE
+.LP
+Whenever a widget contains a callback list for use by clients,
+it also exports in its public .h file the resource name of the callback list.
+Applications and client widgets never access callback list fields directly.
+Instead, they always identify the desired callback list by using the exported
+resource name.
+All the callback manipulation functions described in this chapter
+except
+.PN XtCallCallbackList
+check
+to see that the requested callback list is indeed implemented by the widget.
+.LP
+For the \*(xI to find and correctly handle callback lists,
+they must be declared with a resource type of
+.PN XtRCallback .
+The internal representation of a callback list is
+implementation-dependent; widgets may make no assumptions about the
+value stored in this resource if it is non-NULL. Except to compare
+the value to NULL (which is equivalent to
+.PN XtCallbackStatus
+.PN XtCallbackHasNone ),
+access to callback list resources must be made
+through other \*(xI procedures.
+
+.NH 2
+Adding Callback Procedures
+.XS
+\fB\*(SN Adding Callback Procedures\fP
+.XE
+.LP
+To add a callback procedure to a widget's callback list, use
+.PN XtAddCallback .
+.LP
+.IN "XtAddCallback" "" "@DEF@"
+.sM
+.FD 0
+void XtAddCallback(\fIw\fP, \fIcallback_name, \fP\fIcallback\fP, \
+\fIclient_data\fP)
+.br
+ Widget \fIw\fP;
+.br
+ String \fIcallback_name\fP;
+.br
+ XtCallbackProc \fIcallback\fP;
+.br
+ XtPointer \fIclient_data\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the widget. \*(oI
+.IP \fIcallback_name\fP 1i
+Specifies the callback list to which the procedure is to be appended.
+.IP \fIcallback\fP 1i
+Specifies the callback procedure.
+.IP \fIclient_data\fP 1i
+Specifies additional data to be passed to the specified procedure
+when it is invoked,
+or NULL.
+.LP
+.eM
+A callback will be invoked as many times as it occurs in the callback list.
+.sp
+.LP
+To add a list of callback procedures to a given widget's callback list, use
+.PN XtAddCallbacks .
+.LP
+.IN "XtAddCallbacks" "" "@DEF@"
+.sM
+.FD 0
+void XtAddCallbacks(\fIw\fP, \fIcallback_name, \fP\fIcallbacks\fP)
+.br
+ Widget \fIw\fP;
+.br
+ String \fIcallback_name\fP;
+.br
+ XtCallbackList \fIcallbacks\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the widget. \*(oI
+.IP \fIcallback_name\fP 1i
+Specifies the callback list to which the procedures are to be appended.
+.IP \fIcallbacks\fP 1i
+Specifies the null-terminated list of callback procedures and corresponding
+client data.
+.LP
+.eM
+.NH 2
+Removing Callback Procedures
+.XS
+\fB\*(SN Removing Callback Procedures\fP
+.XE
+.LP
+To delete a callback procedure from a widget's callback list, use
+.PN XtRemoveCallback .
+.LP
+.IN "XtRemoveCallback" "" "@DEF@"
+.sM
+.FD 0
+void XtRemoveCallback(\fIw\fP, \fIcallback_name\fP, \fIcallback\fP, \
+\fIclient_data\fP)
+.br
+ Widget \fIw\fP;
+.br
+ String \fIcallback_name\fP;
+.br
+ XtCallbackProc \fIcallback\fP;
+.br
+ XtPointer \fIclient_data\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the widget. \*(oI
+.IP \fIcallback_name\fP 1i
+Specifies the callback list from which the procedure is to be deleted.
+.IP \fIcallback\fP 1i
+Specifies the callback procedure.
+.IP \fIclient_data\fP 1i
+Specifies the client data to match with the registered callback entry.
+.LP
+.eM
+The
+.PN XtRemoveCallback
+function removes a callback only if both the procedure and the client
+data match.
+.sp
+.LP
+To delete a list of callback procedures from a given widget's callback list, use
+.PN XtRemoveCallbacks .
+.LP
+.IN "XtRemoveCallbacks" "" "@DEF@"
+.sM
+.FD 0
+void XtRemoveCallbacks(\fIw\fP, \fIcallback_name\fP, \fIcallbacks\fP)
+.br
+ Widget \fIw\fP;
+.br
+ String \fIcallback_name\fP;
+.br
+ XtCallbackList \fIcallbacks\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the widget. \*(oI
+.IP \fIcallback_name\fP 1i
+Specifies the callback list from which the procedures are to be deleted.
+.IP \fIcallbacks\fP 1i
+Specifies the null-terminated list of callback procedures and corresponding
+client data.
+.LP
+.eM
+To delete all callback procedures from a given widget's callback list
+and free all storage associated with the callback list, use
+.PN XtRemoveAllCallbacks .
+.LP
+.IN "XtRemoveAllCallbacks" "" "@DEF@"
+.sM
+.FD 0
+void XtRemoveAllCallbacks(\fIw\fP, \fIcallback_name\fP)
+.br
+ Widget \fIw\fP;
+.br
+ String \fIcallback_name\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the widget. \*(oI
+.IP \fIcallback_name\fP 1i
+Specifies the callback list to be cleared.
+.LP
+.eM
+.NH 2
+Executing Callback Procedures
+.XS
+\*(SN Executing Callback Procedures
+.XE
+.LP
+To execute the procedures in a given widget's callback list,
+specifying the callback list by resource name, use
+.PN XtCallCallbacks .
+.LP
+.IN "XtCallCallbacks" "" "@DEF@"
+.sM
+.FD 0
+void XtCallCallbacks(\fIw\fP, \fIcallback_name\fP, \fIcall_data\fP)
+.br
+ Widget \fIw\fP;
+.br
+ String \fIcallback_name\fP;
+.br
+ XtPointer \fIcall_data\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the widget. \*(oI
+.IP \fIcallback_name\fP 1i
+Specifies the callback list to be executed.
+.IP \fIcall_data\fP 1i
+Specifies a callback-list-specific data value to pass to each of the callback
+procedure in the list, or NULL.
+.LP
+.eM
+.LP
+.PN XtCallCallbacks
+calls each of the callback procedures in the list
+named by \fIcallback_name\fP in the specified widget, passing the client
+data registered with the procedure and \fIcall-data\fP.
+.sp
+.LP
+To execute the procedures in a callback list, specifying the callback
+list by address, use
+.PN XtCallCallbackList .
+.LP
+.IN "XtCallCallbackList" "" "@DEF@"
+.sM
+.FD 0
+void XtCallCallbackList(\fIwidget\fP, \fIcallbacks\fP, \fIcall_data\fP)
+.br
+ Widget \fIwidget\fP;
+.br
+ XtCallbackList \fIcallbacks\fP;
+.br
+ XtPointer \fIcall_data\fP;
+.FN
+.IP \fIwidget\fP 1i
+Specifies the widget instance that contains the callback list. \*(oI
+.IP \fIcallbacks\fP 1i
+Specifies the callback list to be executed.
+.IP \fIcall_data\fP 1i
+Specifies a callback-list-specific data value to pass
+to each of the callback procedures in the list, or NULL.
+.LP
+.eM
+The \fIcallbacks\fP parameter must specify the contents of a widget or
+object resource declared with representation type
+.PN XtRCallback .
+If \fIcallbacks\fP is NULL,
+.PN XtCallCallbackList
+returns immediately; otherwise it calls each of the callback
+procedures in the list, passing the client data and \fIcall_data\fP.
+
+.NH 2
+Checking the Status of a Callback List
+.XS
+\*(SN Checking the Status of a Callback List
+.XE
+.LP
+To find out the status of a given widget's callback list, use
+.PN XtHasCallbacks .
+.LP
+.IN "XtHasCallbacks" "" "@DEF@"
+.sp
+.sM
+.FD 0
+typedef enum {XtCallbackNoList, XtCallbackHasNone, XtCallbackHasSome} \
+XtCallbackStatus;
+.sp
+XtCallbackStatus XtHasCallbacks(\fIw\fP, \fIcallback_name\fP)
+.br
+ Widget \fIw\fP;
+.br
+ String \fIcallback_name\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the widget. \*(oI
+.IP \fIcallback_name\fP 1i
+Specifies the callback list to be checked.
+.LP
+.eM
+The
+.PN XtHasCallbacks
+function first checks to see if the widget has a callback list identified
+by \fIcallback_name\fP.
+If the callback list does not exist,
+.PN XtHasCallbacks
+returns
+.PN XtCallbackNoList .
+If the callback list exists but is empty,
+it returns
+.PN XtCallbackHasNone .
+If the callback list exists and has at least one callback registered,
+it returns
+.PN XtCallbackHasSome .
+.bp