summaryrefslogtreecommitdiff
path: root/xc/doc/specs/Xaw/CH2
diff options
context:
space:
mode:
Diffstat (limited to 'xc/doc/specs/Xaw/CH2')
-rw-r--r--xc/doc/specs/Xaw/CH21103
1 files changed, 0 insertions, 1103 deletions
diff --git a/xc/doc/specs/Xaw/CH2 b/xc/doc/specs/Xaw/CH2
deleted file mode 100644
index 497aa7f5a..000000000
--- a/xc/doc/specs/Xaw/CH2
+++ /dev/null
@@ -1,1103 +0,0 @@
-.\" $XConsortium: CH2,v 1.21 94/05/01 20:33:23 gildea Exp $
-.bp
-\&
-.sp 1
-.ce 3
-\s+1\fBChapter 2\fP\s-1
-
-\s+1\fBUsing Widgets\fP\s-1
-.sp 2
-.nr H1 2
-.nr H2 0
-.nr H3 0
-.nr H4 0
-.nr H5 0
-.LP
-.XS
-Chapter 2 \- Using Widgets
-.XE
-.IN "using widgets" "" "@DEF@"
-Widgets serve as the primary tools for building a user interface or
-application environment. The Athena widget set consists of primitive
-widgets that contain no children (for example, a command button) and
-composite widgets which may contain one or more widget children (for
-example, a Box widget).
-.LP
-The remaining chapters explain the widgets that are provided
-by the Athena widget set.
-These user-interface components serve as an interface for
-application programmers who do not want to implement their own widgets.
-In addition, they serve as a starting point
-for those widget programmers who, using the \*(xI mechanisms,
-want to implement alternative application programming interfaces.
-.LP
-This chapter is a brief introduction to widget programming. The
-examples provided use the Athena widgets, though most of the concepts
-will apply to all widget sets. Although there are several programming
-interfaces to the \*(tk, only one is described here. A full
-description of the programming interface is provided in the document
-\fI\*(xT\fP.
-.NH 2
-Setting the Locale
-.LP
-.XS
- Setting the Locale
-.XE
-If it is desirable that the application take advantage of
-internationalization (i18n), you must establish locale with
-.PN XtSetLanguageProc
-before \fBXtDisplayInitialize\fP or \fBXtAppInitialize\fP
-is called. For full details, please refer to the document
-\fI\*(xT\fP, section 2.2. However, the following simplest-case
-call is sufficient in many or most applications.
-.LP
-.IN "internationalization" "" ""
-.IN "XtSetLanguageProc" "" "@DEF@"
-.IN "locale" "" ""
-.Ds
-.TA .5i 2i
-.ta .5i 2i
- XtSetLanguageProc(NULL, NULL, NULL);
-.De
-.LP
-Most notably, this will affect the Standard C locale, determine which
-resource files will be loaded, and what fonts will be required of FontSet
-specifications. In many cases, the addition of this line is the only source change
-required to internationalize Xaw programs, and will not disturb the function
-of programs in the default "C" locale.
-.NH 2
-Initializing the Toolkit
-.LP
-.XS
- Initializing the Toolkit
-.XE
-You must call a toolkit initialization function before invoking any
-other toolkit routines (besides locale setting, above).
-.PN XtAppInitialize
-opens the X server connection, parses the command line,
-and creates an initial widget that will serve as the root of
-a tree of widgets created by this application.
-.IN "initialization" "" "@DEF@"
-.IN "toolkit initialization" "" "@DEF@"
-.IN "XtAppInitialize" "" "@DEF@"
-.IN "fallback resources" "" "@DEF@"
-.FD 0
-Widget XtAppInitialize(\fIapp_context_return\fP, \fIapplication_class\fP, \
-\fIoptions\fP, \fInum_options\fP,
-.ta 2i
- \fIargc_in_out\fP, \fIargv_in_out\fP, \fIfallback_resources\fP, \
-\fIargs\fP, \fInum_args\fP)
-.br
- XtAppContext *\fIapp_context_return\fP;
-.br
- String \fIapplication_class\fP;
-.br
- XrmOptionDescRec \fIoptions\fP[];
-.br
- Cardinal \fInum_options\fP;
-.br
- int *\fIargc_in_out\fP;
-.br
- String *\fIargv_in_out\fP[];
-.br
- String *\fIfallback_resources\fP;
-.br
- ArgList \fIargs\fP;
-.br
- Cardinal \fInum_args\fP;
-.FN
-.IP \fIapp_con_return\fP 1.5i
-Returns the application context of this application, if non-NULL.
-.IP \fIapplication_class\fP 1.5i
-Specifies the class name of this application,
-which is usually the generic name for all instances of this application.
-A useful convention is to form the class name by capitalizing the
-first letter of the application name. For example, the application named
-``xman'' has a class name of ``Xman''.
-.IP \fIoptions\fP 1.5i
-Specifies how to parse the command line for any application-specific
-resources.
-The options argument is passed as a parameter to
-.PN XrmParseCommand .
-For further information,
-see \fI\*(xL\fP.
-.IP \fInum_options\fP 1.5i
-Specifies the number of entries in the options list.
-.IP \fIargc_in_out\fP 1.5i
-Specifies a pointer to the number of command line parameters.
-.IP \fIargv_in_out\fP 1.5i
-Specifies the command line parameters.
-.IP \fIfallback_resources\fP 1.5i
-Specifies resource values to be used if the site-wide application class
-defaults file cannot be opened, or NULL.
-.IP \fIargs\fP 1.5i
-Specifies the argument list to use when creating the Application shell.
-.IP \fInum_args\fP 1.5i
-Specifies the number of arguments in \fIargs\fP.
-.LP
-This function will remove the command line arguments that the toolkit
-reads from \fIargc_in_out\fP, and \fIargv_in_out\fP. It will then
-attempt to open the display. If the display cannot be opened, an error
-message is issued and XtAppInitialize terminates the application. Once
-the display is opened, all resources are read from the locations
-specified by the \*(xI. This function returns an ApplicationShell
-widget to be used as the root of the application's widget tree.
-.NH 2
-Creating a Widget
-.LP
-.XS
- Creating a Widget
-.XE
-.IN "widget creation" "" "@DEF@"
-.IN "creating widgets" "" "@DEF@"
-.IN "XtRealizeWidget" "" ""
-Creating a widget is a three-step process. First, the widget instance
-is allocated, and various instance-specific attributes are set by
-using \fBXtCreateWidget\fP. Second, the widget's parent is informed
-of the new child by using \fBXtManageChild\fP. Finally, X windows are
-created for the parent and all its children by using \fBXtRealizeWidget\fP
-and specifying the top-most widget. The first two steps can be
-combined by using \fBXtCreateManagedWidget\fP. In addition,
-\fBXtRealizeWidget\fP is automatically called when the child becomes
-managed if the parent is already realized.
-.LP
-To allocate, initialize, and manage a widget, use
-.PN XtCreateManagedWidget .
-.IN "XtCreateManagedWidget" "" "@DEF@"
-.FD 0
-Widget XtCreateManagedWidget(\fIname\fP, \fIwidget_class\fP, \fIparent\fP, \
-\fIargs\fP, \fInum_args\fP)
-.br
- String \fIname\fP;
-.br
- WidgetClass \fIwidget_class\fP;
-.br
- Widget \fIparent\fP;
-.br
- ArgList \fIargs\fP;
-.br
- Cardinal \fInum_args\fP;
-.FN
-.IP \fIname\fP 1i
-Specifies the instance name for the created widget that is used for retrieving
-widget resources.
-.IP \fIwidget_class\fP 1i
-Specifies the widget class pointer for the created widget.
-.IP \fIparent\fP 1i
-Specifies the parent widget ID.
-.IP \fIargs\fP 1i
-Specifies the argument list. The argument list is a variable-length
-list composed of name and value pairs that contain information
-pertaining to the specific widget instance being created. For further
-information, see Section 2.7.2.
-.IP \fInum_args\fP 1i
-Specifies the number of arguments in the argument list.
-If the num_args is zero, the argument list is never referenced.
-.LP
-When a widget instance is successfully created, the widget identifier
-is returned to the application. If an error is encountered, the
-.PN XtError
-routine is invoked to inform the user of the error.
-.IN "XtError" "" ""
-.LP
-For further information, see \fI\*(xT\fP.
-.NH 2
-Common Resources
-.XS
- Common Resources
-.XE
-.IN "resource" ""
-.LP
-Although a widget can have unique arguments that it understands, all
-widgets have common arguments that provide some regularity of operation.
-The common arguments allow arbitrary widgets to be managed by
-higher-level components without regard for the individual widget type.
-Widgets will ignore any argument that they do not understand.
-.LP
-The following resources are retrieved from the argument list
-or from the resource database by all of the Athena widgets:
-.TS H
-lw(1.5i) lw(1i) lw(1i) lw(2i).
-_
-.sp 3p
-.TB
-Name Class Type Default Value
-.sp 3p
-_
-.TH
-.R
-.sp 3p
-accelerators Accelerators AcceleratorTable NULL
-ancestorSensitive AncestorSensitive Boolean True
-background Background Pixel XtDefaultBackground
-backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap
-borderColor BorderColor Pixel XtDefaultForeground
-borderPixmap Pixmap Pixmap XtUnspecifiedPixmap
-borderWidth BorderWidth Dimension 1
-colormap Colormap Colormap Parent's Colormap
-depth Depth int Parent's Depth
-destroyCallback Callback XtCallbackList NULL
-height Height Dimension \fIwidget dependent\fP
-mappedWhenManaged MappedWhenManaged Boolean True
-screen Screen Screen Parent's Screen
-sensitive Sensitive Boolean True
-translations Translations TranslationTable \fIwidget dependent\fP
-width Width Dimension \fIwidget dependent\fP
-x Position Position 0
-y Position Position 0
-.sp 3p
-_
-.TE
-.IN "XtDefaultForeground" "" ""
-.IN "XtDefaultBackground" "" ""
-.LP
-The following additional resources are retrieved from the argument list
-or from the resource database by many of the Athena widgets:
-.TS H
-lw(1.5i) lw(1i) lw(1i) lw(2i).
-_
-.sp 3p
-.TB
-Name Class Type Default Value
-.sp 3p
-_
-.TH
-.R
-.sp 3p
-callback Callback XtCallbackList NULL
-cursor Cursor Cursor \fIwidget dependent\fP
-foreground Foreground Pixel XtDefaultForeground
-insensitiveBorder Insensitive Pixmap GreyPixmap
-.sp 3p
-_
-.TE
-.IN "XtDefaultForeground" "" ""
-.NH 2
-Resource Conversions
-.XS
- Resource Conversions
-.XE
-.IN "conversions" "" "@DEF@"
-.IN "string conversions" "" "@DEF@"
-.IN "type conversions" "" "@DEF@"
-.LP
-Most resources in the Athena widget set have a converter registered that
-will translate the string in a resource file to the correct internal
-representation. While some are obvious (string to integer, for example),
-others need specific mention of the allowable values. Three general
-converters are described here:
-.IP \(bu 5
-Cursor
-.IP \(bu 5
-Pixel
-.IP \(bu 5
-Bitmap
-.LP
-Many widgets have defined special converters that apply only to that
-widget. When these occur, the documentation section for that widget
-will describe the converter.
-.NH 3
-Cursor Conversion
-.IN "conversions" "ColorCursor" "@DEF@"
-.IN "conversions" "Cursor" "@DEF@"
-.IN "cursor" "" ""
-.LP
-The value for the \fBcursorName\fP resource is specified in the resource
-database as a string, and is of the following forms:
-.IP \(bu 5
-A standard X cursor name from \fB< X11/cursorfont.h >\fP.
-The names in \fBcursorfont.h\fP each describe a specific cursor. The
-resource names for these cursors are exactly like the names in this file
-except the \fBXC_\fP is not used. The cursor definition \fBXC_gumby\fP
-has a resource name of \fBgumby\fP.
-.IP \(bu 5
-Glyphs, as in \fIFONT font-name glyph-index [[ font-name ] glyph-index ]\fP.
-The first font and glyph specify the cursor source pixmap.
-The second font and glyph specify the cursor mask pixmap.
-The mask font defaults to the source font,
-and the mask glyph index defaults to the source glyph index.
-.IP \(bu 5
-A relative or absolute file name.
-If a relative or absolute file name is specified, that file is used to
-create the source pixmap. Then the string "Mask" is appended to
-locate the cursor mask pixmap. If the "Mask" file does not exist, the
-suffix "msk" is tried. If "msk" fails, no cursor mask will be used.
-If the filename does not start with '/' or './' the the bitmap
-file path is used (see section 2.4.3).
-.NH 3
-Pixel Conversion
-.LP
-.IN "conversions" "Pixel" "@DEF@"
-.IN "pixel" "" ""
-.IN "rgb.txt" "" ""
-.IN "XtDefaultForeground" "" ""
-.IN "XtDefaultBackground" "" ""
-The string-to-pixel converter takes any name that is acceptable to
-XParseColor (see \fI\*(xL\fP). In addition this routine understands
-the special toolkit symbols `XtDefaultForeground' and
-`XtDefaultBackground', described in \fI\*(xT\fP. In short the acceptable
-pixel names are:
-.IP \(bu 5
-Any color name for the rgb.txt file (typically in the directory
-/usr/lib/X11 on POSIX systems).
-.IP \(bu 5
-A numeric specification of the form #<red><green><blue> where these
-numeric values are hexadecimal digits (both upper and lower case).
-.IP \(bu 5
-The special strings `XtDefaultForeground' and `XtDefaultBackground'
-.NH 3
-Bitmap Conversion
-.IN "bitmap conversions" "" "@DEF@"
-.IN "conversions" "Bitmap" "@DEF@"
-.IN "bitmapFilePath" "" "@DEF@"
-.IN "BitmapFilePath" "" "@DEF@"
-.IN "/usr/include/X11/bitmaps" "" ""
-.LP
-The string-to-bitmap converter attempts to locate a file containing
-bitmap data whose name is specified by the input string. If the file
-name is relative (i.e. does not begin with / or ./), the directories to
-be searched are specified in the \fBbitmapFilePath\fP resource--class
-\fBBitmapFilePath\fP. This resource specifies a colon (:) separated
-list of directories that will be searched for the named bitmap or
-cursor glyph (see section 2.4.1). The \fBbitmapFilePath\fP resource is
-global to the application, and may \fBnot\fP be specified differently
-for each widget that wishes to convert a cursor to bitmap. In addition
-to the directories specified in the \fBbitmapFilePath\fP resource a
-default directory is searched. When using POSIX the default
-directory is
-.PN /usr/include/X11/bitmaps .
-.NH 2
-Realizing a Widget
-.LP
-.XS
- Realizing a Widget
-.XE
-.IN "realizing widgets" "" "@DEF@"
-The
-.PN XtRealizeWidget
-function performs two tasks:
-.IP \(bu 5
-Calculates the geometry constraints of all managed descendants
-of this widget. The actual calculation is put off until realize time
-for performance reasons.
-.IP \(bu 5
-Creates an X window for the widget and, if it is a composite widget,
-realizes each of its managed children.
-.IN "XtRealizeWidget" "" "@DEF@"
-.FD 0
-void XtRealizeWidget(\fIw\fP)
-.br
- Widget \fIw\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget.
-.LP
-For further information about this function,
-see the \fI\*(xT\fP.
-.NH 2
-Processing Events
-.LP
-.XS
- Processing Events
-.XE
-.IN "events" "" ""
-.IN "XtAppInitialize" "" ""
-Now that the application has created, managed and realized its
-widgets, it is ready to process the events that will be delivered by the
-X Server to this client. A function call that will process the
-events is \fBXtAppMainLoop\fP.
-.IN "XtAppMainLoop" "" "@DEF@"
-.FD 0
-void XtAppMainLoop(\fIapp_context\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context of this application. The value is
-normally returned by \fBXtAppInitialize\fP.
-.LP
-This function never returns: it is an infinite loop that processes the
-X events. User input can be handled through callback procedures and
-application defined action routines. More details are provided in
-\fI\*(xT\fP.
-.NH 2
-Standard Widget Manipulation Functions
-.XS
- Standard Widget Manipulation Functions
-.XE
-.LP
-After a widget has been created, a client can interact with that
-widget by calling one of the standard widget manipulation routines
-provided by the \*(xI, or a widget class-specific manipulation routine.
-.LP
-The \*(xI provide generic routines to give the application programmer
-access to a set of standard widget functions. The common widget
-routines let an application or composite widget perform the following
-operations on widgets without requiring explicit knowledge of the widget
-type.
-.IP \(bu 5
-Control the mapping of widget windows
-.IP \(bu 5
-Destroy a widget instance
-.IP \(bu 5
-Obtain an argument value
-.IP \(bu 5
-Set an argument value
-.NH 3
-Mapping Widgets
-.LP
-By default,
-widget windows are mapped (made viewable) automatically by
-\fBXtRealizeWidget\fP. This behavior can be disabled by using
-\fBXtSetMappedWhenManaged\fP, making the client responsible for calling
-\fBXtMapWidget\fP to make the widget viewable.
-.IN "XtSetMappedWhenManaged" "" "@DEF@"
-.IN "XtMapWidget" "" ""
-.IN "XtRealizeWidget" "" ""
-.FD 0
-void XtSetMappedWhenManaged(\fIw\fP, \fImap_when_managed\fP)
-.br
- Widget \fIw\fP;
-.br
- Boolean \fImap_when_managed\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget.
-.IP \fImap_when_managed\fP 1i
-Specifies the new value.
-If map_when_managed is \fBTrue\fP, the widget is mapped automatically
-when it is realized. If map_when_managed is \fBFalse\fP, the client
-must call
-.PN XtMapWidget
-or make a second call to
-.PN XtSetMappedWhenManaged
-to cause the child window to be mapped.
-.LP
-.sp
-The definition for
-.PN XtMapWidget
-is:
-.IN "XtMapWidget" "" "@DEF@"
-.FD 0
-void XtMapWidget(\fIw\fP)
-.br
- Widget \fIw\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget.
-.LP
-When you are creating several children in sequence for a previously
-realized common parent it is generally more efficient to construct a
-list of children as they are created (using \fBXtCreateWidget\fP) and
-then use \fBXtManageChildren\fP to request that their parent managed
-them all at once. By managing a list of children at one time, the
-parent can avoid wasteful duplication of geometry processing and the
-associated ``screen flash''.
-.IN "XtManageChildren" "" "@DEF@"
-.IN "XtCreateWidget" "" ""
-.FD 0
-void XtManageChildren(\fIchildren\fP, \fInum_children\fP)
-.br
- WidgetList \fIchildren\fP;
-.br
- Cardinal \fInum_children\fP;
-.FN
-.IP \fIchildren\fP 1i
-Specifies a list of children to add.
-.IP \fInum_children\fP 1i
-Specifies the number of children to add.
-.LP
-If the parent is already visible on the screen, it is especially
-important to batch updates so that the minimum amount of visible window
-reconfiguration is performed.
-.LP
-For further information about these functions,
-see the \fI\*(xT\fP.
-.NH 3
-Destroying Widgets
-.LP
-To destroy a widget instance of any type, use
-.PN XtDestroyWidget .
-.IN "XtDestroyWidget" "" "@DEF@"
-.FD 0
-void XtDestroyWidget(\fIw\fP)
-.br
- Widget \fIw\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget.
-.LP
-.PN XtDestroyWidget
-destroys the widget and recursively destroys any children that it may have,
-including the windows created by its children.
-After calling
-.PN XtDestroyWidget ,
-no further references should be made to the widget or any children
-that the destroyed widget may have had.
-.NH 3
-Retrieving Widget Resource Values
-.LP
-To retrieve the current value of a resource attribute associated
-with a widget instance, use
-.PN XtGetValues .
-.IN "XtGetValues" "" "@DEF@"
-.FD 0
-void XtGetValues(\fIw\fP, \fIargs\fP, \fInum_args\fP)
-.br
- Widget \fIw\fP;
-.br
- ArgList \fIargs\fP;
-.br
- Cardinal \fInum_args\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget.
-.IP \fIargs\fP 1i
-Specifies a variable-length argument list of name and \fBaddress\fP
-pairs that contain the resource name and the address into which the
-resource value is stored.
-.IP \fInum_args\fP 1i
-Specifies the number of arguments in the argument list.
-.LP
-The arguments and values passed in the argument list are dependent on
-the widget. Note that the caller is responsible for providing space
-into which the returned resource value is copied; the \fBArgList\fP
-contains a pointer to this storage (e.g. x and y must be
-allocated as Position). For further information, see the \fI\*(xT\fP.
-.NH 3
-Modifying Widget Resource Values
-.LP
-To modify the current value of a resource attribute associated with a
-widget instance, use
-.PN XtSetValues .
-.IN "XtSetValues" "" "@DEF@"
-.FD 0
-void XtSetValues(\fIw\fP, \fIargs\fP, \fInum_args\fP)
-.br
- Widget \fIw\fP;
-.br
- ArgList \fIargs\fP;
-.br
- Cardinal \fInum_args\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget.
-.IP \fIargs\fP 1i
-Specifies an array of name and \fBvalue\fP pairs that contain the
-arguments to be modified and their new values.
-.IP \fInum_args\fP 1i
-Specifies the number of arguments in the argument list.
-.LP
-The arguments and values that are passed will depend on the widget
-being modified. Some widgets may not allow certain resources to be
-modified after the widget instance has been created or realized.
-No notification is given if any part of a \fBXtSetValues\fP request is
-ignored.
-.LP
-For further information about these functions, see the \fI\*(xT\fP.
-.IN "XtGetValues" "" ""
-.IN "XtSetValues" "" ""
-.NT
-The argument list entry for
-.PN XtGetValues
-specifies the address to which the caller wants the value copied. The
-argument list entry for
-.PN XtSetValues ,
-however, contains the new value itself, if the size of value is less than
-sizeof(XtArgVal) (architecture dependent, but at least sizeof(long));
-otherwise, it is a pointer to the value. String resources are always
-passed as pointers, regardless of the length of the string.
-.NE
-.NH 2
-Using the Client Callback Interface
-.LP
-.XS
- Using the Client Callback Interface
-.XE
-.IN "callbacks" "" ""
-Widgets can communicate changes in their state to their clients
-by means of a callback facility.
-The format for a client's callback handler is:
-.IN "CallbackProc" "" "@DEF@"
-.FD 0
-void \fICallbackProc\fP(\fIw\fP, \fIclient_data\fP, \fIcall_data\fP)
-.br
- Widget \fIw\fP;
-.br
- XtPointer \fIclient_data\fP;
-.br
- XtPointer \fIcall_data\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies widget for which the callback is registered.
-.IP \fIclient_data\fP 1i
-Specifies arbitrary client-supplied data that the widget should pass
-back to the client when the widget executes the client's callback
-procedure. This is a way for the client registering the callback to
-also register client-specific data: a pointer to additional information
-about the widget, a reason for invoking the callback, and so on. If no
-additional information is necessary, NULL may be passed as this argument.
-This field is also frequently known as the \fIclosure\fP.
-.IP \fIcall_data\fP 1i
-Specifies any callback-specific data the widget wants to pass to the client.
-For example, when Scrollbar executes its \fBjumpProc\fP callback list,
-it passes the current position of the thumb in \fIcall_data\fP.
-.LP
-Callbacks can be registered either by creating an argument containing
-the callback list described below or by using the special convenience
-routines \fBXtAddCallback\fP and \fBXtAddCallbacks\fP. When the widget
-is created, a pointer to a list of callback procedure and data pairs can
-be passed in the argument list to
-.PN XtCreateWidget .
-The list is of type
-.PN XtCallbackList :
-.IN "XtCallbackProc"
-.IN "XtAddCallbacks"
-.IN "XtAddCallback"
-.IN "XtCallbackList" "" "@DEF@"
-.IN "XtCallbackRec" "" "@DEF@"
-.LP
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct {
- XtCallbackProc callback;
- XtPointer closure;
-} XtCallbackRec, *XtCallbackList;
-.De
-.LP
-The callback list must be allocated and initialized before calling
-.PN XtCreateWidget .
-.IN "XtCreateWidget"
-The end of the list is identified by an entry containing NULL in
-callback and closure. Once the widget is created, the client can change
-or de-allocate this list; the widget itself makes no further reference
-to it. The closure field contains the client_data passed to the
-callback when the callback list is executed.
-.LP
-The second method for registering callbacks is to use
-.PN XtAddCallback
-after the widget has been created.
-.IN "XtAddCallback" "" "@DEF@"
-.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 to add the callback to.
-.IP \fIcallback_name\fP 1i
-Specifies the callback list within the widget to append to.
-.IP \fIcallback\fP 1i
-Specifies the callback procedure to add.
-.IP \fIclient_data\fP 1i
-Specifies the data to be passed to the callback when it is invoked.
-.LP
-.PN XtAddCallback
-adds the specified callback to the list for the named widget.
-.LP
-All widgets provide a callback list named
-.PN destroyCallback
-.IN "destroyCallback" "" "@DEF@"
-where clients can register procedures that are to be executed when the
-widget is destroyed. The destroy callbacks are executed when the widget
-or an ancestor is destroyed. The \fIcall_data\fP argument is unused for
-destroy callbacks.
-.NH 2
-Programming Considerations
-.LP
-.XS
- Programming Considerations
-.XE
-This section provides some guidelines on how to set up an application
-program that uses the \*(tk.
-.NH 3
-Writing Applications
-.LP
-.IN "writing applications"
-.IN "StringDefs.h"
-.IN "Intrinsic.h"
-When writing an application that uses the X Toolkit,
-you should make sure that your application performs the following:
-.IP 1. 5
-Include
-.Pn < X11/Intrinsic.h >
-in your application programs.
-This header file automatically includes
-.Pn < X11/Xlib.h >,
-so all Xlib functions also are defined.
-It may also be necessary to include \fB< X11/StringDefs.h >\fP when setting
-up argument lists, as many of the XtN\fIsomething\fP definitions are
-only defined in this file.
-.IP 2. 5
-Include the widget-specific header files for each widget type
-that you need to use.
-For example,
-.Pn < X11/Xaw/Label.h >
-and
-.Pn < X11/Xaw/Command.h >.
-.IP 3. 5
-Call the
-.PN XtAppInitialize
-.IN "XtAppInitialize"
-function before invoking any other toolkit or Xlib functions.
-For further information,
-see Section 2.1 and the \fI\*(xT\fP.
-.IP 4. 5
-To pass attributes to the widget creation routines that will override
-any site or user customizations, set up argument lists. In this
-document, a list of valid argument names is provided in the discussion
-of each widget. The names each have a global symbol defined that begins
-with \fBXtN\fP to help catch spelling errors. For example,
-\fBXtNlabel\fP is defined for the \fBlabel\fP resource of many widgets.
-.IN "XtN" "" "@DEF@"
-.IP
-For further information, see Section 2.9.2.2.
-.IP 5. 5
-When the argument list is set up, create the widget with the
-\fBXtCreateManagedWidget\fP function. For further information, see
-Section 2.2 and the \fI\*(xT\fP.
-.IN "XtCreateManagedWidget"
-.IP 6. 5
-If the widget has any callback routines, set by the
-.PN XtNcallback
-argument or the
-.PN XtAddCallback
-function, declare these routines within the application.
-.IN "XtAddCallback"
-.IP 7. 5
-After creating the initial widget hierarchy, windows must be created
-for each widget by calling
-.PN XtRealizeWidget
-on the top level widget.
-.IN "XtRealizeWidget"
-.IP 8. 5
-Most applications now sit in a loop processing events using
-.PN XtAppMainLoop ,
-for example:
-.IN "XtAppMainLoop"
-.IP
-.Ds 0
-XtCreateManagedWidget(\fIname\fP, \fIclass\fP, \fIparent\fP, \fIargs\fP, \fInum_args\fP);
-XtRealizeWidget(\fIshell\fP);
-XtAppMainLoop(\fIapp_context\fP);
-.De
-.IP
-For information about this function, see the \fI\*(xT\fP.
-.IP 9. 5
-Link your application with
-.PN libXaw
-(the Athena widgets),
-.PN libXmu
-(miscellaneous utilities),
-.PN libXt
-(the \*(tk \*(xI),
-.PN libSM
-(Session Management),
-.PN libICE
-(Inter-Client Exchange),
-.PN libXext
-(the extension library needed for the shape extension code which allows
-rounded Command buttons), and
-.PN libX11
-(the core X library).
-The following provides a sample command line:
-.IN "libXaw"
-.IN "libXmu"
-.IN "libXt"
-.IN "libSM"
-.IN "libICE"
-.IN "libXext"
-.IN "libX11"
-.IN "linking applications"
-.IN "compiling applications"
-.IP
-.Ds 0
-cc -o \fIapplication\fP \fIapplication\fP.c \-lXaw \-lXmu \-lXt \
-\-lSM \-lICE \-lXext \-lX11
-.De
-.NH 3
-Changing Resource Values
-.IN "resource" ""
-.LP
-The \*(xI support two methods of changing the default resource
-values; the resource manager, and an argument list passed into
-XtCreateWidget. While resources values will get updated no matter
-which method you use, the two methods provide slightly different
-functionality.
-.IP "Resource Manager" 1.5i
-This method picks up resource definitions described in \fI\*(xL\fP from
-many different locations at run time. The locations most important to
-the application programmer are the \fIfallback resources\fP and the
-\fIapp-defaults\fP file, (see \fI\*(xT\fP for the complete list).
-Since these resource are loaded at run time, they can be overridden by
-the user, allowing an application to be customized to fit the
-particular needs of each individual user. These values can also be
-modified without the need to rebuild the application, allowing rapid
-prototyping of user interfaces. Application programmers should use
-resources in preference to hard-coded values whenever possible.
-.IP "Argument Lists" 1.5i
-The values passed into the widget at creation time via an argument list
-cannot be modified by the user, and allow no opportunity for
-customization. It is used to set resources that cannot be specified as
-strings (e.g. callback lists) or resources that should not be
-overridden (e.g. window depth) by the user.
-.NH 4
-Specifying Resources
-.LP
-It is important for all X Toolkit application programmers to
-understand how to use the X Resource Manager to specify resources for
-widgets in an X application. This section will describe the most common
-methods used to specify these resources, and how to use the X Resource
-manager.
-.IN "xrdb"
-.IP \fBXrdb\fP 1.5i
-The \fBxrdb\fP utility may be used to load a file containing
-resources into the X server. Once the resources are loaded, the
-resources will affect any new applications started on the display that
-they were loaded onto.
-.IN "application defaults"
-.IN "app-defaults"
-.IN "/usr/lib/X11/app-defaults"
-.IP "\fBApplication Defaults\fP" 1.5i
-The application defaults (app-defaults) file (normally in
-/usr/lib/X11/app-defaults/\fIclassname\fP) for an application is loaded
-whenever the application is started.
-.LP
-The resource specification has two colon-separated parts, a name, and
-a value. The \fIvalue\fP is a string whose format is dependent on the
-resource specified by \fIname\fP. \fIName\fP is constructed by
-appending a resource name to a full widget name.
-.LP
-The full widget name is a list of the name of every ancestor of the
-desired widget separated by periods (.). Each widget also has a class
-associated with it. A class is a type of widget (e.g. Label or
-Scrollbar or Box). Notice that class names, by convention, begin with
-capital letters and instance names begin with lower case letters. The
-class of any widget may be used in place of its name in a resource
-specification. Here are a few examples:
-.IP xman.form.button1 1.5i
-This is a fully specified resource name, and will affect only widgets
-called button1 that are children of widgets called form that are
-children of
-applications named xman. (Note that while typically two widgets that
-are siblings will have different names, it is not prohibited.)
-
-.IP Xman.Form.Command 1.5i
-This will match any Command widget that is a child of a Form widget
-that is itself a child of an application of class \fIXman\fP.
-.IP Xman.Form.button1 1.5i
-This is a mixed resource name with both widget names and classes specified.
-.LP
-This syntax allows an application programmer to specify any widget
-in the widget tree. To match more than one widget (for example a user
-may want to make all Command buttons blue), use an asterisk (*)
-instead of a period. When an asterisk is used, any number of widgets
-(including zero) may exist between the two widget names. For example:
-.IP Xman*Command 1.5i
-This matches all Command widgets in the Xman application.
-.IP Foo*button1 1.5i
-This matches any widget in the Foo application that is named \fIbutton1\fP.
-.LP
-The root of all application widget trees is the widget returned by
-\fBXtAppInitialize\fP. Even though this is actually an
-ApplicationShell widget, the toolkit replaces its widget class with the
-class name of the application. The name of this widget is either
-the name used to invoke the application (\fBargv[0]\fP) or the name of
-the application specified using the standard \fI-name\fP command line
-option supported by the \*(xI.
-.LP
-The last step in constructing the resource name is to append the name of
-the resource with either a period or asterisk to the full or partial
-widget name already constructed.
-.IP *foreground:Blue 2.25i
-Specifies that all widgets in all applications will have a foreground
-color of blue.
-.IP Xman*borderWidth:10 2.25i
-Specifies that all widgets in an application whose class is Xman will
-have a border width of 10 (pixels).
-.IP xman.form.button1.label:Testing 2.25i
-Specifies that a particular widget in the xman application will have a
-label named \fITesting\fP.
-.LP
-An exclamation point (!) in the first column of a line indicates
-that the rest of the line should be treated as a comment.
-.LP
-\fBFinal Words\fP
-.LP
-The Resource manager is a powerful tool that can be used very
-effectively to customize \*(tk applications at run time by either the
-application programmer or the user. Some final points to note:
-.IP \(bu 5
-An application programmer may add new resources to their
-application. These resources are associated with the global
-application, and not any particular widget. The \*(tk function used for
-adding the application resources is \fBXtGetApplicationResources\fP.
-.IN "XtGetApplicationResources"
-.IP \(bu 5
-Be careful when creating resource files. Since widgets will
-ignore resources that they do not understand, any spelling
-errors will cause a resource to have no effect.
-.IP \(bu 5
-Only one resource line will match any given resource. There is a set
-of precedence rules, which take the following general stance.
-.ta 10n
-.IP "" 5
-\(bu More specific overrides less specific, thus period always overrides asterisk.
-.IP "" 5
-\(bu Names on the left are more specific and override names on the right.
-.IP "" 5
-\(bu When resource specifications are exactly the same, user defaults
-.br
- will override program defaults.
-.LP
-For a complete explanation of the rules of precedence, and
-other specific topics see \fI\*(xT\fP and \fI\*(xL\fP.
-.NH 4
-Creating Argument Lists
-.IN "argument lists" "" "@DEF@"
-.LP
-To set up an argument list for the inline specification of widget attributes,
-you may use any of the four approaches discussed in this section.
-Each resource name has a global symbol associated with it. This
-global symbol has the form XtN\fIresource name\fP. For example, the
-symbol for ``foreground'' is \fBXtNforeground\fP. For further information,
-see the \fI\*(xT\fP.
-.LP
-Argument are specified by using the following structure:
-.IN "ArgList" "" "@DEF@"
-.IN "Arg" "" "@DEF@"
-.LP
-.Ds 0
-.TA .5i 1.5i
-.ta .5i 1.5i
-typedef struct {
- String name;
- XtArgVal value;
-} Arg, *ArgList;
-.De
-.LP
-The first approach is to statically initialize the argument list.
-For example:
-.LP
-.Ds 0
-.TA .5i
-.ta .5i
-static Arg arglist[] = {
- {XtNwidth, (XtArgVal) 400},
- {XtNheight, (XtArgVal) 300},
-};
-.De
-.LP
-This approach is convenient for lists that do not need to be computed
-at runtime and makes adding or deleting new elements easy.
-The
-.IN "XtNumber"
-.PN XtNumber
-macro is used to compute the number of elements in the argument list,
-preventing simple programming errors:
-.LP
-.Ds
-XtCreateWidget(\fIname\fP, \fIclass\fP, \fIparent\fP, \fIarglist\fP, XtNumber(\fIarglist\fP));
-.De
-.IN "XtSetArg" "" "@DEF@"
-.LP
-The second approach is to use the
-.PN XtSetArg
-macro.
-For example:
-.LP
-.Ds 0
-.TA .5i
-.ta .5i
-Arg arglist[10];
-XtSetArg(arglist[1], XtNwidth, 400);
-XtSetArg(arglist[2], XtNheight, 300);
-.De
-.LP
-To make it easier to insert and delete entries,
-you also can use a variable index:
-.LP
-.Ds 0
-.TA .5i
-.ta .5i
-Arg arglist[10];
-Cardinal i=0;
-XtSetArg(arglist[i], XtNwidth, 400); i++;
-XtSetArg(arglist[i], XtNheight, 300); i++;
-.De
-.LP
-The i variable can then be used as the argument list count in the widget
-create function.
-In this example,
-.IN "XtNumber"
-.PN XtNumber
-would return 10, not 2, and therefore is not useful.
-.NT
-You should not use auto-increment or auto-decrement
-within the first argument to
-.PN XtSetArg .
-As it is currently implemented,
-.PN XtSetArg
-is a macro that dereferences the first argument twice.
-.NE
-.LP
-The third approach is to individually set the elements of the
-argument list array:
-.LP
-.Ds 0
-.TA .5i
-.ta .5i
-Arg arglist[10];
-arglist[0].name = XtNwidth;
-arglist[0].value = (XtArgVal) 400;
-arglist[1].name = XtNheight;
-arglist[1].value = (XtArgVal) 300;
-.De
-.LP
-Note that in this example, as in the previous example,
-.IN "XtNumber"
-.PN XtNumber
-would return 10, not 2, and therefore would not be useful.
-.LP
-The fourth approach is to use a mixture of the first and third approaches:
-you can statically define the argument list but modify some entries at runtime.
-For example:
-.LP
-.Ds 0
-.TA .5i
-.ta .5i
-static Arg arglist[] = {
- {XtNwidth, (XtArgVal) 400},
- {XtNheight, (XtArgVal) NULL},
-};
-arglist[1].value = (XtArgVal) 300;
-.De
-.LP
-In this example,
-.IN "XtNumber"
-.PN XtNumber
-can be used, as in the first approach, for easier code maintenance.
-.NH 2
-Example Programs
-.XS
- Example Programs
-.XE
-.IN "examples"
-.LP
-The best way to understand how to use any programming library is by
-trying some simple examples. A collection of example programs that
-introduces each of the widgets in that Athena widget set, as well as many
-important toolkit programming concepts, is available in the X11R6
-release as distributed by the X Consortium. It can be found in the
-distribution directory \fBcontrib/examples/mit/Xaw\fP, but see your
-site administrator for the exact location of these files on your system.
-See the README file from that directory for a guide to the examples.
-