CH12.xml revision 9e7bcd65
19e7bcd65Smrg<chapter id='Nonwidget_Objects'>
29e7bcd65Smrg<title>Nonwidget Objects</title>
39e7bcd65Smrg
49e7bcd65Smrg<para>
59e7bcd65SmrgAlthough widget writers are free to treat
69e7bcd65SmrgCore
79e7bcd65Smrgas the base class of
89e7bcd65Smrgthe widget hierarchy, there are actually three classes above it.
99e7bcd65SmrgThese classes are
109e7bcd65SmrgObject,
119e7bcd65SmrgRectObj
129e7bcd65Smrg(Rectangle Object), and (unnamed),
139e7bcd65Smrgand members of these classes
149e7bcd65Smrgare referred to generically as <emphasis remap='I'>objects</emphasis>.  By convention, the term
159e7bcd65Smrg<emphasis remap='I'>widget</emphasis> refers only to objects that are a subclass of
169e7bcd65SmrgCore,
179e7bcd65Smrgand the term <emphasis remap='I'>nonwidget</emphasis> refers to objects that are not a subclass of
189e7bcd65SmrgCore.
199e7bcd65SmrgIn the preceding portion of this specification, the interface
209e7bcd65Smrgdescriptions indicate explicitly whether the generic <emphasis remap='I'>widget</emphasis> argument
219e7bcd65Smrgis restricted to particular subclasses of Object.  Sections 12.2.5,
229e7bcd65Smrg12.3.5, and 12.5 summarize the permissible classes of the arguments to, and
239e7bcd65Smrgreturn values from, each of the Intrinsics routines.
249e7bcd65Smrg</para>
259e7bcd65Smrg<sect1 id="Data_Structures">
269e7bcd65Smrg<title>Data Structures</title>
279e7bcd65Smrg<para>
289e7bcd65SmrgIn order not to conflict with previous widget code, the data
299e7bcd65Smrgstructures used by nonwidget objects do not follow all the same
309e7bcd65Smrgconventions as those for widgets.  In particular, the class records
319e7bcd65Smrgare not composed of parts but instead are complete data structures
329e7bcd65Smrgwith filler for the widget fields they do not use.  This
339e7bcd65Smrgallows the static class initializers for existing widgets to remain
349e7bcd65Smrgunchanged.
359e7bcd65Smrg</para>
369e7bcd65Smrg</sect1>
379e7bcd65Smrg
389e7bcd65Smrg<sect1 id="Object_Objects">
399e7bcd65Smrg<title>Object Objects</title>
409e7bcd65Smrg<para>
419e7bcd65SmrgThe
429e7bcd65SmrgObject
439e7bcd65Smrgobject contains the definitions of fields common to all
449e7bcd65Smrgobjects.  It encapsulates the mechanisms for resource management.
459e7bcd65SmrgAll objects and widgets are members of subclasses of
469e7bcd65SmrgObject,
479e7bcd65Smrgwhich is defined by the
489e7bcd65Smrg<function>ObjectClassPart</function>
499e7bcd65Smrgand
509e7bcd65Smrg<function>ObjectPart</function>
519e7bcd65Smrgstructures.
529e7bcd65Smrg</para>
539e7bcd65Smrg<sect2 id="ObjectClassPart_Structure">
549e7bcd65Smrg<title>ObjectClassPart Structure</title>
559e7bcd65Smrg<para>
569e7bcd65SmrgThe common fields for all object classes are defined in the
579e7bcd65Smrg<function>ObjectClassPart</function>
589e7bcd65Smrgstructure.  All fields have the same purpose,
599e7bcd65Smrgfunction, and restrictions as the corresponding fields in
609e7bcd65Smrg<function>CoreClassPart</function>;
619e7bcd65Smrgfields whose
629e7bcd65Smrgnames are obj<emphasis remap='I'>n</emphasis> for some integer <emphasis remap='I'>n</emphasis> are not
639e7bcd65Smrgused for Object,
649e7bcd65Smrgbut exist to pad the data structure so that it matches Core's class
659e7bcd65Smrgrecord.  The class record initialization must fill all
669e7bcd65Smrgobj<emphasis remap='I'>n</emphasis> fields with NULL or zero as appropriate to the type.
679e7bcd65Smrg</para>
689e7bcd65Smrg<literallayout >
699e7bcd65Smrgtypedef struct _ObjectClassPart {
709e7bcd65Smrg	WidgetClass superclass;
719e7bcd65Smrg	String class_name;
729e7bcd65Smrg	Cardinal widget_size;
739e7bcd65Smrg	XtProc class_initialize;
749e7bcd65Smrg	XtWidgetClassProc class_part_initialize;
759e7bcd65Smrg	XtEnum class_inited;
769e7bcd65Smrg	XtInitProc initialize;
779e7bcd65Smrg	XtArgsProc initialize_hook;
789e7bcd65Smrg	XtProc obj1;
799e7bcd65Smrg	XtPointer obj2;
809e7bcd65Smrg	Cardinal obj3;
819e7bcd65Smrg	XtResourceList resources;
829e7bcd65Smrg	Cardinal num_resources;
839e7bcd65Smrg	XrmClass xrm_class;
849e7bcd65Smrg	Boolean obj4;
859e7bcd65Smrg	XtEnum obj5;
869e7bcd65Smrg	Boolean obj6;
879e7bcd65Smrg	Boolean obj7;
889e7bcd65Smrg	XtWidgetProc destroy;
899e7bcd65Smrg	XtProc obj8;
909e7bcd65Smrg	XtProc obj9;
919e7bcd65Smrg	XtSetValuesFunc set_values;
929e7bcd65Smrg	XtArgsFunc set_values_hook;
939e7bcd65Smrg	XtProc obj10;
949e7bcd65Smrg	XtArgsProc get_values_hook;
959e7bcd65Smrg	XtProc obj11;
969e7bcd65Smrg	XtVersionType version;
979e7bcd65Smrg	XtPointer callback_private;
989e7bcd65Smrg	String obj12;
999e7bcd65Smrg	XtProc obj13;
1009e7bcd65Smrg	XtProc obj14;
1019e7bcd65Smrg	XtPointer extension;
1029e7bcd65Smrg} ObjectClassPart;
1039e7bcd65Smrg</literallayout>
1049e7bcd65Smrg<para>
1059e7bcd65SmrgThe extension record defined for
1069e7bcd65Smrg<function>ObjectClassPart</function>
1079e7bcd65Smrgwith a <emphasis remap='I'>record_type</emphasis> equal to
1089e7bcd65Smrg<emphasis role='strong'>NULLQUARK</emphasis>
1099e7bcd65Smrgis
1109e7bcd65Smrg<function>ObjectClassExtensionRec</function>.
1119e7bcd65Smrg</para>
1129e7bcd65Smrg<literallayout >
1139e7bcd65Smrgtypedef struct {
1149e7bcd65Smrg	XtPointer next_extension;    See <xref linkend='Class_Extension_Records' />
1159e7bcd65Smrg	XrmQuark record_type;        See <xref linkend='Class_Extension_Records' />
1169e7bcd65Smrg	long version;                See <xref linkend='Class_Extension_Records' />
1179e7bcd65Smrg	Cardinal record_size;        See <xref linkend='Class_Extension_Records' />
1189e7bcd65Smrg	XtAllocateProc allocate;     See <xref linkend='Widget_Instance_Allocation_The_allocate_Procedure' />.
1199e7bcd65Smrg	XtDeallocateProc deallocate; See <xref linkend='Widget_Instance_Deallocation_The_deallocate_Procedure' />.
1209e7bcd65Smrg} ObjectClassExtensionRec, *ObjectClassExtension;
1219e7bcd65Smrg</literallayout>
1229e7bcd65Smrg<para>
1239e7bcd65SmrgThe prototypical
1249e7bcd65Smrg<function>ObjectClass</function>
1259e7bcd65Smrgconsists of just the
1269e7bcd65Smrg<function>ObjectClassPart</function>.
1279e7bcd65Smrg</para>
1289e7bcd65Smrg<literallayout >
1299e7bcd65Smrgtypedef struct _ObjectClassRec {
1309e7bcd65Smrg	ObjectClassPart object_class;
1319e7bcd65Smrg} ObjectClassRec, *ObjectClass;
1329e7bcd65Smrg</literallayout>
1339e7bcd65Smrg<para>
1349e7bcd65SmrgThe predefined class record and pointer for
1359e7bcd65Smrg<function>ObjectClassRec</function>
1369e7bcd65Smrgare
1379e7bcd65Smrg</para>
1389e7bcd65Smrg
1399e7bcd65Smrg<para>
1409e7bcd65SmrgIn
1419e7bcd65Smrg<function>IntrinsicP.h</function>:
1429e7bcd65Smrg</para>
1439e7bcd65Smrg<literallayout >
1449e7bcd65Smrgextern ObjectClassRec objectClassRec;
1459e7bcd65Smrg</literallayout>
1469e7bcd65Smrg<para>
1479e7bcd65SmrgIn
1489e7bcd65Smrg<function>Intrinsic.h</function>:
1499e7bcd65Smrg</para>
1509e7bcd65Smrg<literallayout >
1519e7bcd65Smrgextern WidgetClass objectClass;
1529e7bcd65Smrg</literallayout>
1539e7bcd65Smrg<para>
1549e7bcd65SmrgThe opaque types
1559e7bcd65Smrg<function>Object</function>
1569e7bcd65Smrgand
1579e7bcd65Smrg<function>ObjectClass</function>
1589e7bcd65Smrgand the opaque variable
1599e7bcd65Smrg<function>objectClass</function>
1609e7bcd65Smrgare defined for generic actions on objects.
1619e7bcd65SmrgThe symbolic constant for the
1629e7bcd65Smrg<function>ObjectClassExtension</function>
1639e7bcd65Smrgversion identifier is
1649e7bcd65Smrg<function>XtObjectExtensionVersion</function>
1659e7bcd65Smrg(see <xref linkend='Class_Extension_Records' />).
1669e7bcd65Smrg<function>Intrinsic.h</function>
1679e7bcd65Smrguses an incomplete structure definition to ensure that the
1689e7bcd65Smrgcompiler catches attempts to access private data:
1699e7bcd65Smrg</para>
1709e7bcd65Smrg<literallayout >
1719e7bcd65Smrgtypedef struct _ObjectClassRec* ObjectClass;
1729e7bcd65Smrg</literallayout>
1739e7bcd65Smrg
1749e7bcd65Smrg</sect2>
1759e7bcd65Smrg
1769e7bcd65Smrg<sect2 id="ObjectPart_Structure">
1779e7bcd65Smrg<title>ObjectPart Structure</title>
1789e7bcd65Smrg<para>
1799e7bcd65SmrgThe common fields for all object instances are defined in the
1809e7bcd65Smrg<function>ObjectPart</function>
1819e7bcd65Smrgstructure.  All fields have the same meaning as the
1829e7bcd65Smrgcorresponding fields in
1839e7bcd65Smrg<function>CorePart</function>.
1849e7bcd65Smrg</para>
1859e7bcd65Smrg<literallayout >
1869e7bcd65Smrgtypedef struct _ObjectPart {
1879e7bcd65Smrg	Widget self;
1889e7bcd65Smrg	WidgetClass widget_class;
1899e7bcd65Smrg	Widget parent;
1909e7bcd65Smrg	Boolean being_destroyed;
1919e7bcd65Smrg	XtCallbackList destroy_callbacks;
1929e7bcd65Smrg	XtPointer constraints;
1939e7bcd65Smrg} ObjectPart;
1949e7bcd65Smrg</literallayout>
1959e7bcd65Smrg<para>
1969e7bcd65SmrgAll object instances have the
1979e7bcd65SmrgObject
1989e7bcd65Smrgfields as their first component.  The prototypical type
1999e7bcd65Smrg<function>Object</function>
2009e7bcd65Smrgis defined with only this set of fields.
2019e7bcd65SmrgVarious routines can cast object pointers, as needed, to specific
2029e7bcd65Smrgobject types.
2039e7bcd65Smrg</para>
2049e7bcd65Smrg
2059e7bcd65Smrg<para>
2069e7bcd65SmrgIn
2079e7bcd65Smrg<function>IntrinsicP.h</function>:
2089e7bcd65Smrg</para>
2099e7bcd65Smrg<literallayout >
2109e7bcd65Smrgtypedef struct _ObjectRec {
2119e7bcd65Smrg	ObjectPart object;
2129e7bcd65Smrg} ObjectRec, *Object;
2139e7bcd65Smrg</literallayout>
2149e7bcd65Smrg<para>
2159e7bcd65SmrgIn
2169e7bcd65Smrg<function>Intrinsic.h</function>:
2179e7bcd65Smrg</para>
2189e7bcd65Smrg<literallayout >
2199e7bcd65Smrgtypedef struct _ObjectRec *Object;
2209e7bcd65Smrg</literallayout>
2219e7bcd65Smrg
2229e7bcd65Smrg</sect2>
2239e7bcd65Smrg
2249e7bcd65Smrg<sect2 id="Object_Resources">
2259e7bcd65Smrg<title>Object Resources</title>
2269e7bcd65Smrg<para>
2279e7bcd65SmrgThe resource names, classes, and representation types specified in the
2289e7bcd65Smrg<function>objectClassRec</function>
2299e7bcd65Smrgresource list are:
2309e7bcd65Smrg</para>
2319e7bcd65Smrg
2329e7bcd65Smrg<informaltable frame='topbot'>
2339e7bcd65Smrg  <?dbfo keep-together="always" ?>
2349e7bcd65Smrg  <tgroup cols='3' align='left' colsep='0' rowsep='0'>
2359e7bcd65Smrg  <colspec colwidth='1.0*' colname='c1'/>
2369e7bcd65Smrg  <colspec colwidth='1.0*' colname='c2'/>
2379e7bcd65Smrg  <colspec colwidth='1.0*' colname='c3'/>
2389e7bcd65Smrg  <thead>
2399e7bcd65Smrg    <row rowsep='1'>
2409e7bcd65Smrg      <entry>Name</entry>
2419e7bcd65Smrg      <entry>Class</entry>
2429e7bcd65Smrg      <entry>Representation</entry>
2439e7bcd65Smrg    </row>
2449e7bcd65Smrg  </thead>
2459e7bcd65Smrg  <tbody>
2469e7bcd65Smrg    <row>
2479e7bcd65Smrg      <entry>XtNdestroyCallback</entry>
2489e7bcd65Smrg      <entry>XtCCallback</entry>
2499e7bcd65Smrg      <entry>XtRCallback</entry>
2509e7bcd65Smrg    </row>
2519e7bcd65Smrg  </tbody>
2529e7bcd65Smrg  </tgroup>
2539e7bcd65Smrg</informaltable>
2549e7bcd65Smrg</sect2>
2559e7bcd65Smrg
2569e7bcd65Smrg<sect2 id="ObjectPart_Default_Values">
2579e7bcd65Smrg<title>ObjectPart Default Values</title>
2589e7bcd65Smrg<para>
2599e7bcd65SmrgAll fields in
2609e7bcd65Smrg<function>ObjectPart</function>
2619e7bcd65Smrghave the same default values as the corresponding fields in
2629e7bcd65Smrg<function>CorePart</function>.
2639e7bcd65Smrg</para>
2649e7bcd65Smrg</sect2>
2659e7bcd65Smrg
2669e7bcd65Smrg<sect2 id="Object_Arguments_to_xI_Routines">
2679e7bcd65Smrg<title>Object Arguments to Intrinsics Routines</title>
2689e7bcd65Smrg<para>
2699e7bcd65SmrgThe WidgetClass arguments to the following procedures may be
2709e7bcd65Smrg<function>objectClass</function>
2719e7bcd65Smrgor any subclass:
2729e7bcd65Smrg</para>
2739e7bcd65Smrg
2749e7bcd65Smrg<para>
2759e7bcd65Smrg<emphasis role='strong'>XtInitializeWidgetClass</emphasis>,
2769e7bcd65Smrg<emphasis role='strong'>XtCreateWidget</emphasis>,
2779e7bcd65Smrg<emphasis role='strong'>XtVaCreateWidget</emphasis>
2789e7bcd65Smrg<emphasis role='strong'>XtIsSubclass</emphasis>,
2799e7bcd65Smrg<emphasis role='strong'>XtCheckSubclass</emphasis>
2809e7bcd65Smrg<emphasis role='strong'>XtGetResourceList</emphasis>,
2819e7bcd65Smrg<emphasis role='strong'>XtGetConstraintResourceList</emphasis>
2829e7bcd65Smrg</para>
2839e7bcd65Smrg
2849e7bcd65Smrg<para>
2859e7bcd65SmrgThe Widget arguments to the following procedures may be of class
2869e7bcd65SmrgObject
2879e7bcd65Smrgor any subclass:
2889e7bcd65Smrg</para>
2899e7bcd65Smrg<itemizedlist spacing='compact'>
2909e7bcd65Smrg  <listitem>
2919e7bcd65Smrg    <para>
2929e7bcd65Smrg<xref linkend='XtCreateWidget' xrefstyle='select: title'/>,
2939e7bcd65Smrg<xref linkend='XtVaCreateWidget' xrefstyle='select: title'/>
2949e7bcd65Smrg    </para>
2959e7bcd65Smrg  </listitem>
2969e7bcd65Smrg  <listitem>
2979e7bcd65Smrg    <para>
2989e7bcd65Smrg<xref linkend='XtAddCallback' xrefstyle='select: title'/>,
2999e7bcd65Smrg<xref linkend='XtAddCallbacks' xrefstyle='select: title'/>,
3009e7bcd65Smrg<xref linkend='XtRemoveCallback' xrefstyle='select: title'/>,
3019e7bcd65Smrg<xref linkend='XtRemoveCallbacks' xrefstyle='select: title'/>,
3029e7bcd65Smrg<xref linkend='XtRemoveAllCallbacks' xrefstyle='select: title'/>,
3039e7bcd65Smrg<xref linkend='XtCallCallbacks' xrefstyle='select: title'/>,
3049e7bcd65Smrg<xref linkend='XtHasCallbacks' xrefstyle='select: title'/>,
3059e7bcd65Smrg<xref linkend='XtCallCallbackList' xrefstyle='select: title'/>
3069e7bcd65Smrg    </para>
3079e7bcd65Smrg  </listitem>
3089e7bcd65Smrg  <listitem>
3099e7bcd65Smrg    <para>
3109e7bcd65Smrg<xref linkend='XtClass' xrefstyle='select: title'/>,
3119e7bcd65Smrg<function>XtSuperclass</function>,
3129e7bcd65Smrg<xref linkend='XtIsSubclass' xrefstyle='select: title'/>,
3139e7bcd65Smrg<xref linkend='XtCheckSubclass' xrefstyle='select: title'/>,
3149e7bcd65Smrg<function>XtIsObject</function>,
3159e7bcd65Smrg<function>XtIsRectObj</function>,
3169e7bcd65Smrg<function>XtIsWidget</function>,
3179e7bcd65Smrg<function>XtIsComposite</function>,
3189e7bcd65Smrg<function>XtIsConstraint</function>,
3199e7bcd65Smrg<function>XtIsShell</function>,
3209e7bcd65Smrg<function>XtIsOverrideShell</function>,
3219e7bcd65Smrg<function>XtIsWMShell</function>,
3229e7bcd65Smrg<function>XtIsVendorShell</function>,
3239e7bcd65Smrg<function>XtIsTransientShell</function>,
3249e7bcd65Smrg<function>XtIsToplevelShell</function>,
3259e7bcd65Smrg<function>XtIsApplicationShell</function>,
3269e7bcd65Smrg<function>XtIsSessionShell</function>
3279e7bcd65Smrg    </para>
3289e7bcd65Smrg  </listitem>
3299e7bcd65Smrg  <listitem>
3309e7bcd65Smrg    <para>
3319e7bcd65Smrg<xref linkend='XtIsManaged' xrefstyle='select: title'/>,
3329e7bcd65Smrg<xref linkend='XtIsSensitive' xrefstyle='select: title'/>
3339e7bcd65Smrg(both will return
3349e7bcd65Smrg<function>False</function>
3359e7bcd65Smrgif argument is not a subclass of
3369e7bcd65SmrgRectObj)
3379e7bcd65Smrg    </para>
3389e7bcd65Smrg  </listitem>
3399e7bcd65Smrg  <listitem>
3409e7bcd65Smrg    <para>
3419e7bcd65Smrg<xref linkend='XtIsRealized' xrefstyle='select: title'/>
3429e7bcd65Smrg(returns the state of the nearest windowed ancestor
3439e7bcd65Smrgif class of argument is not a subclass of
3449e7bcd65SmrgCore)
3459e7bcd65Smrg    </para>
3469e7bcd65Smrg  </listitem>
3479e7bcd65Smrg  <listitem>
3489e7bcd65Smrg    <para>
3499e7bcd65Smrg<xref linkend='XtWidgetToApplicationContext' xrefstyle='select: title'/>
3509e7bcd65Smrg    </para>
3519e7bcd65Smrg  </listitem>
3529e7bcd65Smrg  <listitem>
3539e7bcd65Smrg    <para>
3549e7bcd65Smrg<xref linkend='XtDestroyWidget' xrefstyle='select: title'/>
3559e7bcd65Smrg    </para>
3569e7bcd65Smrg  </listitem>
3579e7bcd65Smrg  <listitem>
3589e7bcd65Smrg    <para>
3599e7bcd65Smrg<function>XtParent</function>,
3609e7bcd65Smrg<xref linkend='XtDisplayOfObject' xrefstyle='select: title'/>,
3619e7bcd65Smrg<xref linkend='XtScreenOfObject' xrefstyle='select: title'/>,
3629e7bcd65Smrg<xref linkend='XtWindowOfObject' xrefstyle='select: title'/>
3639e7bcd65Smrg    </para>
3649e7bcd65Smrg  </listitem>
3659e7bcd65Smrg  <listitem>
3669e7bcd65Smrg    <para>
3679e7bcd65Smrg<xref linkend='XtSetKeyboardFocus' xrefstyle='select: title'/>
3689e7bcd65Smrg(descendant)
3699e7bcd65Smrg    </para>
3709e7bcd65Smrg  </listitem>
3719e7bcd65Smrg  <listitem>
3729e7bcd65Smrg    <para>
3739e7bcd65Smrg<xref linkend='XtGetGC' xrefstyle='select: title'/>,
3749e7bcd65Smrg<xref linkend='XtReleaseGC' xrefstyle='select: title'/>
3759e7bcd65Smrg    </para>
3769e7bcd65Smrg  </listitem>
3779e7bcd65Smrg  <listitem>
3789e7bcd65Smrg    <para>
3799e7bcd65Smrg<xref linkend='XtName' xrefstyle='select: title'/>
3809e7bcd65Smrg    </para>
3819e7bcd65Smrg  </listitem>
3829e7bcd65Smrg  <listitem>
3839e7bcd65Smrg    <para>
3849e7bcd65Smrg<xref linkend='XtSetValues' xrefstyle='select: title'/>,
3859e7bcd65Smrg<xref linkend='XtGetValues' xrefstyle='select: title'/>,
3869e7bcd65Smrg<xref linkend='XtVaSetValues' xrefstyle='select: title'/>,
3879e7bcd65Smrg<xref linkend='XtVaGetValues' xrefstyle='select: title'/>
3889e7bcd65Smrg    </para>
3899e7bcd65Smrg  </listitem>
3909e7bcd65Smrg  <listitem>
3919e7bcd65Smrg    <para>
3929e7bcd65Smrg<xref linkend='XtGetSubresources' xrefstyle='select: title'/>,
3939e7bcd65Smrg<xref linkend='XtGetApplicationResources' xrefstyle='select: title'/>,
3949e7bcd65Smrg<xref linkend='XtVaGetSubresources' xrefstyle='select: title'/>,
3959e7bcd65Smrg<xref linkend='XtVaGetApplicationResources' xrefstyle='select: title'/>
3969e7bcd65Smrg    </para>
3979e7bcd65Smrg  </listitem>
3989e7bcd65Smrg  <listitem>
3999e7bcd65Smrg    <para>
4009e7bcd65Smrg<xref linkend='XtConvert' xrefstyle='select: title'/>,
4019e7bcd65Smrg<xref linkend='XtConvertAndStore' xrefstyle='select: title'/>
4029e7bcd65Smrg    </para>
4039e7bcd65Smrg  </listitem>
4049e7bcd65Smrg</itemizedlist>
4059e7bcd65Smrg<para>
4069e7bcd65SmrgThe return value of the following procedures will be of class
4079e7bcd65SmrgObject
4089e7bcd65Smrgor a subclass:
4099e7bcd65Smrg</para>
4109e7bcd65Smrg<itemizedlist spacing='compact'>
4119e7bcd65Smrg  <listitem>
4129e7bcd65Smrg    <para>
4139e7bcd65Smrg<xref linkend='XtCreateWidget' xrefstyle='select: title'/>,
4149e7bcd65Smrg<xref linkend='XtVaCreateWidget' xrefstyle='select: title'/>
4159e7bcd65Smrg    </para>
4169e7bcd65Smrg  </listitem>
4179e7bcd65Smrg  <listitem>
4189e7bcd65Smrg    <para>
4199e7bcd65Smrg<function>XtParent</function>
4209e7bcd65Smrg    </para>
4219e7bcd65Smrg  </listitem>
4229e7bcd65Smrg  <listitem>
4239e7bcd65Smrg    <para>
4249e7bcd65Smrg<xref linkend='XtNameToWidget' xrefstyle='select: title'/>
4259e7bcd65Smrg    </para>
4269e7bcd65Smrg  </listitem>
4279e7bcd65Smrg</itemizedlist>
4289e7bcd65Smrg<para>
4299e7bcd65SmrgThe return value of the following procedures will be
4309e7bcd65Smrg<function>objectClass</function>
4319e7bcd65Smrgor a subclass:
4329e7bcd65Smrg</para>
4339e7bcd65Smrg<itemizedlist spacing='compact'>
4349e7bcd65Smrg  <listitem>
4359e7bcd65Smrg    <para>
4369e7bcd65Smrg<xref linkend='XtClass' xrefstyle='select: title'/>,
4379e7bcd65Smrg<function>XtSuperclass</function>
4389e7bcd65Smrg    </para>
4399e7bcd65Smrg  </listitem>
4409e7bcd65Smrg</itemizedlist>
4419e7bcd65Smrg</sect2>
4429e7bcd65Smrg
4439e7bcd65Smrg<sect2 id="Use_of_Objects">
4449e7bcd65Smrg<title>Use of Objects</title>
4459e7bcd65Smrg<para>
4469e7bcd65SmrgThe
4479e7bcd65SmrgObject
4489e7bcd65Smrgclass exists to enable programmers to use the Intrinsics'
4499e7bcd65Smrgclassing and resource-handling mechanisms for things smaller
4509e7bcd65Smrgand simpler than widgets.
4519e7bcd65SmrgObjects make obsolete many common uses of subresources as described in
4529e7bcd65SmrgSections 9.4, 9.7.2.4, and 9.7.2.5.
4539e7bcd65Smrg</para>
4549e7bcd65Smrg
4559e7bcd65Smrg<para>
4569e7bcd65SmrgComposite
4579e7bcd65Smrgwidget classes that wish to accept nonwidget children must
4589e7bcd65Smrgset the <emphasis remap='I'>accepts_objects</emphasis> field in the
4599e7bcd65Smrg<function>CompositeClassExtension</function>
4609e7bcd65Smrgstructure to
4619e7bcd65Smrg<function>True</function>.
4629e7bcd65Smrg<xref linkend='XtCreateWidget' xrefstyle='select: title'/>
4639e7bcd65Smrgwill otherwise generate an error message on an attempt to create a
4649e7bcd65Smrgnonwidget child.
4659e7bcd65Smrg</para>
4669e7bcd65Smrg
4679e7bcd65Smrg<para>
4689e7bcd65SmrgOf the classes defined by the Intrinsics,
4699e7bcd65SmrgApplicationShell
4709e7bcd65Smrgand
4719e7bcd65SmrgSessionShell
4729e7bcd65Smrgaccept nonwidget children, and the class of any nonwidget child
4739e7bcd65Smrgmust not be
4749e7bcd65Smrg<function>rectObjClass</function>
4759e7bcd65Smrgor any subclass.  The intent of allowing
4769e7bcd65SmrgObject
4779e7bcd65Smrgchildren of
4789e7bcd65SmrgApplicationShell
4799e7bcd65Smrgand
4809e7bcd65SmrgSessionShell
4819e7bcd65Smrgis to provide clients a simple mechanism
4829e7bcd65Smrgfor establishing the resource-naming root of an object hierarchy.
4839e7bcd65Smrg</para>
4849e7bcd65Smrg</sect2>
4859e7bcd65Smrg</sect1>
4869e7bcd65Smrg
4879e7bcd65Smrg<sect1 id="Rectangle_Objects">
4889e7bcd65Smrg<title>Rectangle Objects</title>
4899e7bcd65Smrg<para>
4909e7bcd65SmrgThe class of rectangle objects is a subclass of
4919e7bcd65SmrgObject
4929e7bcd65Smrgthat represents
4939e7bcd65Smrgrectangular areas.  It encapsulates the mechanisms for geometry
4949e7bcd65Smrgmanagement and is called RectObj
4959e7bcd65Smrgto avoid conflict with the Xlib
4969e7bcd65Smrg<function>Rectangle</function>
4979e7bcd65Smrgdata type.
4989e7bcd65Smrg</para>
4999e7bcd65Smrg<sect2 id="RectObjClassPart_Structure">
5009e7bcd65Smrg<title>RectObjClassPart Structure</title>
5019e7bcd65Smrg<para>
5029e7bcd65SmrgAs with the
5039e7bcd65Smrg<function>ObjectClassPart</function>
5049e7bcd65Smrgstructure, all fields in the
5059e7bcd65Smrg<function>RectObjClassPart</function>
5069e7bcd65Smrgstructure have the same
5079e7bcd65Smrgpurpose and function as the corresponding fields in
5089e7bcd65Smrg<function>CoreClassPart</function>;
5099e7bcd65Smrgfields whose names are rect<emphasis remap='I'>n</emphasis> for some integer
5109e7bcd65Smrg<emphasis remap='I'>n</emphasis> are not used for
5119e7bcd65SmrgRectObj, but exist to pad the data structure so that it matches
5129e7bcd65SmrgCore's
5139e7bcd65Smrgclass record.  The class record initialization must fill all
5149e7bcd65Smrgrect<emphasis remap='I'>n</emphasis> fields with NULL or zero as appropriate to the type.
5159e7bcd65Smrg</para>
5169e7bcd65Smrg<literallayout >
5179e7bcd65Smrgtypedef struct _RectObjClassPart {
5189e7bcd65Smrg	WidgetClass superclass;
5199e7bcd65Smrg	String class_name;
5209e7bcd65Smrg	Cardinal widget_size;
5219e7bcd65Smrg	XtProc class_initialize;
5229e7bcd65Smrg	XtWidgetClassProc class_part_initialize;
5239e7bcd65Smrg	XtEnum class_inited;
5249e7bcd65Smrg	XtInitProc initialize;
5259e7bcd65Smrg	XtArgsProc initialize_hook;
5269e7bcd65Smrg	XtProc rect1;
5279e7bcd65Smrg	XtPointer rect2;
5289e7bcd65Smrg	Cardinal rect3;
5299e7bcd65Smrg	XtResourceList resources;
5309e7bcd65Smrg	Cardinal num_resources;
5319e7bcd65Smrg	XrmClass xrm_class;
5329e7bcd65Smrg	Boolean rect4;
5339e7bcd65Smrg	XtEnum rect5;
5349e7bcd65Smrg	Boolean rect6;
5359e7bcd65Smrg	Boolean rect7;
5369e7bcd65Smrg	XtWidgetProc destroy;
5379e7bcd65Smrg	XtWidgetProc resize;
5389e7bcd65Smrg	XtExposeProc expose;
5399e7bcd65Smrg	XtSetValuesFunc set_values;
5409e7bcd65Smrg	XtArgsFunc set_values_hook;
5419e7bcd65Smrg	XtAlmostProc set_values_almost;
5429e7bcd65Smrg	XtArgsProc get_values_hook;
5439e7bcd65Smrg	XtProc rect9;
5449e7bcd65Smrg	XtVersionType version;
5459e7bcd65Smrg	XtPointer callback_private;
5469e7bcd65Smrg	String rect10;
5479e7bcd65Smrg	XtGeometryHandler query_geometry;
5489e7bcd65Smrg	XtProc rect11;
5499e7bcd65Smrg	XtPointer extension ;
5509e7bcd65Smrg} RectObjClassPart;
5519e7bcd65Smrg</literallayout>
5529e7bcd65Smrg<para>
5539e7bcd65SmrgThe
5549e7bcd65SmrgRectObj
5559e7bcd65Smrgclass record consists of just the
5569e7bcd65Smrg<function>RectObjClassPart</function>.
5579e7bcd65Smrg</para>
5589e7bcd65Smrg<literallayout >
5599e7bcd65Smrgtypedef struct _RectObjClassRec {
5609e7bcd65Smrg	RectObjClassPart rect_class;
5619e7bcd65Smrg} RectObjClassRec, *RectObjClass;
5629e7bcd65Smrg</literallayout>
5639e7bcd65Smrg<para>
5649e7bcd65SmrgThe predefined class record and pointer for
5659e7bcd65Smrg<function>RectObjClassRec</function>
5669e7bcd65Smrgare
5679e7bcd65Smrg</para>
5689e7bcd65Smrg
5699e7bcd65Smrg<para>
5709e7bcd65SmrgIn
5719e7bcd65Smrg<function>Intrinsic.h</function>:
5729e7bcd65Smrg</para>
5739e7bcd65Smrg<literallayout >
5749e7bcd65Smrgextern RectObjClassRec rectObjClassRec;
5759e7bcd65Smrg</literallayout>
5769e7bcd65Smrg<para>
5779e7bcd65SmrgIn
5789e7bcd65Smrg<function>Intrinsic.h</function>:
5799e7bcd65Smrg</para>
5809e7bcd65Smrg<literallayout >
5819e7bcd65Smrgextern WidgetClass rectObjClass;
5829e7bcd65Smrg</literallayout>
5839e7bcd65Smrg<para>
5849e7bcd65SmrgThe opaque types
5859e7bcd65Smrg<function>RectObj</function>
5869e7bcd65Smrgand
5879e7bcd65Smrg<function>RectObjClass</function>
5889e7bcd65Smrgand the opaque variable
5899e7bcd65Smrg<function>rectObjClass</function>
5909e7bcd65Smrgare defined for generic actions on objects
5919e7bcd65Smrgwhose class is RectObj or a subclass of
5929e7bcd65SmrgRectObj.
5939e7bcd65Smrg<function>Intrinsic.h</function>
5949e7bcd65Smrguses an incomplete structure definition to ensure that the compiler
5959e7bcd65Smrgcatches attempts to access private data:
5969e7bcd65Smrg</para>
5979e7bcd65Smrg<literallayout >
5989e7bcd65Smrgtypedef struct _RectObjClassRec* RectObjClass;
5999e7bcd65Smrg</literallayout>
6009e7bcd65Smrg
6019e7bcd65Smrg</sect2>
6029e7bcd65Smrg
6039e7bcd65Smrg<sect2 id="RectObjPart_Structure">
6049e7bcd65Smrg<title>RectObjPart Structure</title>
6059e7bcd65Smrg<para>
6069e7bcd65SmrgIn addition to the
6079e7bcd65Smrg<function>ObjectPart</function>
6089e7bcd65Smrgfields,
6099e7bcd65SmrgRectObj
6109e7bcd65Smrgobjects have the following fields defined in the
6119e7bcd65Smrg<function>RectObjPart</function>
6129e7bcd65Smrgstructure.  All fields have the same meaning as the corresponding field in
6139e7bcd65Smrg<function>CorePart</function>.
6149e7bcd65Smrg</para>
6159e7bcd65Smrg<literallayout >
6169e7bcd65Smrgtypedef struct _RectObjPart {
6179e7bcd65Smrg	Position x, y;
6189e7bcd65Smrg	Dimension width, height;
6199e7bcd65Smrg	Dimension border_width;
6209e7bcd65Smrg	Boolean managed;
6219e7bcd65Smrg	Boolean sensitive;
6229e7bcd65Smrg	Boolean ancestor_sensitive;
6239e7bcd65Smrg} RectObjPart;
6249e7bcd65Smrg</literallayout>
6259e7bcd65Smrg<para>
6269e7bcd65SmrgRectObj
6279e7bcd65Smrgobjects have the RectObj fields immediately following the Object fields.
6289e7bcd65Smrg</para>
6299e7bcd65Smrg<literallayout >
6309e7bcd65Smrgtypedef struct _RectObjRec {
6319e7bcd65Smrg	ObjectPart object;
6329e7bcd65Smrg	RectObjPart rectangle;
6339e7bcd65Smrg} RectObjRec, *RectObj;
6349e7bcd65Smrg</literallayout>
6359e7bcd65Smrg<para>
6369e7bcd65SmrgIn
6379e7bcd65Smrg<function>Intrinsic.h</function>:
6389e7bcd65Smrg</para>
6399e7bcd65Smrg<literallayout >
6409e7bcd65Smrgtypedef struct _RectObjRec* RectObj;
6419e7bcd65Smrg</literallayout>
6429e7bcd65Smrg
6439e7bcd65Smrg</sect2>
6449e7bcd65Smrg
6459e7bcd65Smrg<sect2 id="RectObj_Resources">
6469e7bcd65Smrg<title>RectObj Resources</title>
6479e7bcd65Smrg<para>
6489e7bcd65SmrgThe resource names, classes, and representation types that are specified in the
6499e7bcd65Smrg<function>rectObjClassRec</function>
6509e7bcd65Smrgresource list are:
6519e7bcd65Smrg<informaltable frame='topbot'>
6529e7bcd65Smrg  <?dbfo keep-together="always" ?>
6539e7bcd65Smrg  <tgroup cols='3' align='left' colsep='0' rowsep='0'>
6549e7bcd65Smrg  <colspec colwidth='1.0*' colname='c1'/>
6559e7bcd65Smrg  <colspec colwidth='1.0*' colname='c2'/>
6569e7bcd65Smrg  <colspec colwidth='1.0*' colname='c3'/>
6579e7bcd65Smrg  <thead>
6589e7bcd65Smrg    <row rowsep='1'>
6599e7bcd65Smrg      <entry>Name</entry>
6609e7bcd65Smrg      <entry>Class</entry>
6619e7bcd65Smrg      <entry>Representation</entry>
6629e7bcd65Smrg    </row>
6639e7bcd65Smrg  </thead>
6649e7bcd65Smrg  <tbody>
6659e7bcd65Smrg    <row>
6669e7bcd65Smrg      <entry>XtNancestorSensitive</entry>
6679e7bcd65Smrg      <entry>XtCSensitive</entry>
6689e7bcd65Smrg      <entry>XtRBoolean</entry>
6699e7bcd65Smrg    </row>
6709e7bcd65Smrg    <row>
6719e7bcd65Smrg      <entry>XtNborderWidth</entry>
6729e7bcd65Smrg      <entry>XtCBorderWidth</entry>
6739e7bcd65Smrg      <entry>XtRDimension</entry>
6749e7bcd65Smrg    </row>
6759e7bcd65Smrg    <row>
6769e7bcd65Smrg      <entry>XtNheight</entry>
6779e7bcd65Smrg      <entry>XtCHeight</entry>
6789e7bcd65Smrg      <entry>XtRDimension</entry>
6799e7bcd65Smrg    </row>
6809e7bcd65Smrg    <row>
6819e7bcd65Smrg      <entry>XtNsensitive</entry>
6829e7bcd65Smrg      <entry>XtCSensitive</entry>
6839e7bcd65Smrg      <entry>XtRBoolean</entry>
6849e7bcd65Smrg    </row>
6859e7bcd65Smrg    <row>
6869e7bcd65Smrg      <entry>XtNwidth</entry>
6879e7bcd65Smrg      <entry>XtCWidth</entry>
6889e7bcd65Smrg      <entry>XtRDimension</entry>
6899e7bcd65Smrg    </row>
6909e7bcd65Smrg    <row>
6919e7bcd65Smrg      <entry>XtNx</entry>
6929e7bcd65Smrg      <entry>XtCPosition</entry>
6939e7bcd65Smrg      <entry>XtRPosition</entry>
6949e7bcd65Smrg    </row>
6959e7bcd65Smrg    <row>
6969e7bcd65Smrg      <entry>XtNy</entry>
6979e7bcd65Smrg      <entry>XtCPosition</entry>
6989e7bcd65Smrg      <entry>XtRPosition</entry>
6999e7bcd65Smrg    </row>
7009e7bcd65Smrg  </tbody>
7019e7bcd65Smrg  </tgroup>
7029e7bcd65Smrg</informaltable>
7039e7bcd65Smrg</para>
7049e7bcd65Smrg</sect2>
7059e7bcd65Smrg
7069e7bcd65Smrg<sect2 id="RectObjPart_Default_Values">
7079e7bcd65Smrg<title>RectObjPart Default Values</title>
7089e7bcd65Smrg<para>
7099e7bcd65SmrgAll fields in
7109e7bcd65Smrg<function>RectObjPart</function>
7119e7bcd65Smrghave the same default values as the corresponding fields in
7129e7bcd65Smrg<function>CorePart</function>.
7139e7bcd65Smrg</para>
7149e7bcd65Smrg</sect2>
7159e7bcd65Smrg
7169e7bcd65Smrg<sect2 id="Widget_Arguments_to_xI_Routines">
7179e7bcd65Smrg<title>Widget Arguments to Intrinsics Routines</title>
7189e7bcd65Smrg<para>
7199e7bcd65SmrgThe WidgetClass arguments to the following procedures may be
7209e7bcd65Smrg<function>rectObjClass</function>
7219e7bcd65Smrgor any subclass:
7229e7bcd65Smrg</para>
7239e7bcd65Smrg<itemizedlist spacing='compact'>
7249e7bcd65Smrg  <listitem>
7259e7bcd65Smrg    <para>
7269e7bcd65Smrg<xref linkend='XtCreateManagedWidget' xrefstyle='select: title'/>,
7279e7bcd65Smrg<xref linkend='XtVaCreateManagedWidget' xrefstyle='select: title'/>
7289e7bcd65Smrg    </para>
7299e7bcd65Smrg  </listitem>
7309e7bcd65Smrg</itemizedlist>
7319e7bcd65Smrg<para>
7329e7bcd65SmrgThe Widget arguments to the following procedures may be of class
7339e7bcd65SmrgRectObj
7349e7bcd65Smrgor any subclass:
7359e7bcd65Smrg</para>
7369e7bcd65Smrg<itemizedlist spacing='compact'>
7379e7bcd65Smrg  <listitem>
7389e7bcd65Smrg    <para>
7399e7bcd65Smrg<xref linkend='XtConfigureWidget' xrefstyle='select: title'/>,
7409e7bcd65Smrg<xref linkend='XtMoveWidget' xrefstyle='select: title'/>,
7419e7bcd65Smrg<xref linkend='XtResizeWidget' xrefstyle='select: title'/>
7429e7bcd65Smrg    </para>
7439e7bcd65Smrg  </listitem>
7449e7bcd65Smrg  <listitem>
7459e7bcd65Smrg    <para>
7469e7bcd65Smrg<xref linkend='XtMakeGeometryRequest' xrefstyle='select: title'/>,
7479e7bcd65Smrg<xref linkend='XtMakeResizeRequest' xrefstyle='select: title'/>
7489e7bcd65Smrg    </para>
7499e7bcd65Smrg  </listitem>
7509e7bcd65Smrg  <listitem>
7519e7bcd65Smrg    <para>
7529e7bcd65Smrg<xref linkend='XtManageChildren' xrefstyle='select: title'/>,
7539e7bcd65Smrg<xref linkend='XtManageChild' xrefstyle='select: title'/>,
7549e7bcd65Smrg<xref linkend='XtUnmanageChildren' xrefstyle='select: title'/>,
7559e7bcd65Smrg<xref linkend='XtUnmanageChild' xrefstyle='select: title'/>,
7569e7bcd65Smrg<xref linkend='XtChangeManagedSet' xrefstyle='select: title'/>
7579e7bcd65Smrg    </para>
7589e7bcd65Smrg  </listitem>
7599e7bcd65Smrg  <listitem>
7609e7bcd65Smrg    <para>
7619e7bcd65Smrg<xref linkend='XtQueryGeometry' xrefstyle='select: title'/>
7629e7bcd65Smrg    </para>
7639e7bcd65Smrg  </listitem>
7649e7bcd65Smrg  <listitem>
7659e7bcd65Smrg    <para>
7669e7bcd65Smrg<xref linkend='XtSetSensitive' xrefstyle='select: title'/>
7679e7bcd65Smrg    </para>
7689e7bcd65Smrg  </listitem>
7699e7bcd65Smrg  <listitem>
7709e7bcd65Smrg    <para>
7719e7bcd65Smrg<xref linkend='XtTranslateCoords' xrefstyle='select: title'/>
7729e7bcd65Smrg    </para>
7739e7bcd65Smrg  </listitem>
7749e7bcd65Smrg</itemizedlist>
7759e7bcd65Smrg<para>
7769e7bcd65SmrgThe return value of the following procedures will be of class
7779e7bcd65SmrgRectObj
7789e7bcd65Smrgor a subclass:
7799e7bcd65Smrg</para>
7809e7bcd65Smrg<itemizedlist spacing='compact'>
7819e7bcd65Smrg  <listitem>
7829e7bcd65Smrg    <para>
7839e7bcd65Smrg<xref linkend='XtCreateManagedWidget' xrefstyle='select: title'/>,
7849e7bcd65Smrg<xref linkend='XtVaCreateManagedWidget' xrefstyle='select: title'/>
7859e7bcd65Smrg    </para>
7869e7bcd65Smrg  </listitem>
7879e7bcd65Smrg</itemizedlist>
7889e7bcd65Smrg</sect2>
7899e7bcd65Smrg
7909e7bcd65Smrg<sect2 id="Use_of_Rectangle_Objects">
7919e7bcd65Smrg<title>Use of Rectangle Objects</title>
7929e7bcd65Smrg<para>
7939e7bcd65SmrgRectObj
7949e7bcd65Smrgcan be subclassed to provide widgetlike objects (sometimes
7959e7bcd65Smrgcalled gadgets) that do not use windows and do not have those
7969e7bcd65Smrgfeatures that are seldom used in simple widgets.  This can save memory
7979e7bcd65Smrgresources both in the server and in applications
7989e7bcd65Smrgbut requires additional support code in the parent.
7999e7bcd65SmrgIn the following
8009e7bcd65Smrgdiscussion, <emphasis remap='I'>rectobj</emphasis> refers only to objects
8019e7bcd65Smrgwhose class is RectObj or a subclass of
8029e7bcd65SmrgRectObj,
8039e7bcd65Smrgbut not Core or a subclass of
8049e7bcd65SmrgCore.
8059e7bcd65Smrg</para>
8069e7bcd65Smrg
8079e7bcd65Smrg<para>
8089e7bcd65SmrgComposite
8099e7bcd65Smrgwidget classes that wish to accept rectobj children must set
8109e7bcd65Smrgthe <emphasis remap='I'>accepts_objects</emphasis> field in the
8119e7bcd65Smrg<function>CompositeClassExtension</function>
8129e7bcd65Smrgextension structure to
8139e7bcd65Smrg<function>True</function>.
8149e7bcd65Smrg<xref linkend='XtCreateWidget' xrefstyle='select: title'/>
8159e7bcd65Smrgor
8169e7bcd65Smrg<xref linkend='XtCreateManagedWidget' xrefstyle='select: title'/>
8179e7bcd65Smrgwill otherwise generate an error if called to create a nonwidget child.
8189e7bcd65SmrgIf the composite widget supports only children of class
8199e7bcd65SmrgRectObj
8209e7bcd65Smrgor a subclass (i.e., not of the general Object class), it
8219e7bcd65Smrgmust declare an insert_child procedure and check the subclass of each
8229e7bcd65Smrgnew child in that procedure.  None of the classes defined by the
8239e7bcd65SmrgIntrinsics accept rectobj children.
8249e7bcd65Smrg</para>
8259e7bcd65Smrg
8269e7bcd65Smrg<para>
8279e7bcd65SmrgIf gadgets are defined in an object set, the parent is responsible for
8289e7bcd65Smrgmuch more than the parent of a widget.  The parent must request and handle
8299e7bcd65Smrginput events that occur for the gadget and is responsible for making
8309e7bcd65Smrgsure that when it receives an exposure event the gadget children get
8319e7bcd65Smrgdrawn correctly.
8329e7bcd65SmrgRectobj children may
8339e7bcd65Smrghave expose procedures
8349e7bcd65Smrgspecified in their class records, but the parent is free to
8359e7bcd65Smrgignore them, instead drawing the contents of the child itself.  This
8369e7bcd65Smrgcan potentially save graphics context switching.  The precise contents
8379e7bcd65Smrgof the exposure event and region arguments to the RectObj expose
8389e7bcd65Smrgprocedure are not specified by the Intrinsics; a particular rectangle object is
8399e7bcd65Smrgfree to define the coordinate system origin (self-relative or
8409e7bcd65Smrgparent-relative) and whether or not the rectangle or region is assumed to
8419e7bcd65Smrghave been intersected with the visible region of the object.
8429e7bcd65Smrg</para>
8439e7bcd65Smrg
8449e7bcd65Smrg<para>
8459e7bcd65SmrgIn general, it is expected that a composite widget that accepts
8469e7bcd65Smrgnonwidget children will document those children it is able to handle,
8479e7bcd65Smrgsince a gadget cannot be viewed as a completely self-contained entity,
8489e7bcd65Smrgas can a widget.  Since a particular composite widget class is usually
8499e7bcd65Smrgdesigned to handle nonwidget children of only a limited set of classes, it should
8509e7bcd65Smrgcheck the classes of newly added children in its insert_child
8519e7bcd65Smrgprocedure to make sure that it can deal with them.
8529e7bcd65Smrg</para>
8539e7bcd65Smrg
8549e7bcd65Smrg<para>
8559e7bcd65SmrgThe Intrinsics will clear areas of a parent window obscured by
8569e7bcd65Smrgrectobj children, causing exposure events, under the following
8579e7bcd65Smrgcircumstances:
8589e7bcd65Smrg</para>
8599e7bcd65Smrg<itemizedlist spacing='compact'>
8609e7bcd65Smrg  <listitem>
8619e7bcd65Smrg    <para>
8629e7bcd65SmrgA rectobj child is managed or unmanaged.
8639e7bcd65Smrg    </para>
8649e7bcd65Smrg  </listitem>
8659e7bcd65Smrg  <listitem>
8669e7bcd65Smrg    <para>
8679e7bcd65SmrgIn a call to
8689e7bcd65Smrg<xref linkend='XtSetValues' xrefstyle='select: title'/>
8699e7bcd65Smrgon a rectobj child, one or more of the set_values procedures returns
8709e7bcd65Smrg<function>True</function>.
8719e7bcd65Smrg    </para>
8729e7bcd65Smrg  </listitem>
8739e7bcd65Smrg  <listitem>
8749e7bcd65Smrg    <para>
8759e7bcd65SmrgIn a call to
8769e7bcd65Smrg<xref linkend='XtConfigureWidget' xrefstyle='select: title'/>
8779e7bcd65Smrgon a rectobj child, areas will
8789e7bcd65Smrgbe cleared corresponding to both the old and the new child
8799e7bcd65Smrggeometries, including the border, if the geometry changes.
8809e7bcd65Smrg    </para>
8819e7bcd65Smrg  </listitem>
8829e7bcd65Smrg  <listitem>
8839e7bcd65Smrg    <para>
8849e7bcd65SmrgIn a call to
8859e7bcd65Smrg<xref linkend='XtMoveWidget' xrefstyle='select: title'/>
8869e7bcd65Smrgon a rectobj child, areas will be
8879e7bcd65Smrgcleared corresponding to both the old and the new child
8889e7bcd65Smrggeometries, including the border, if the geometry changes.
8899e7bcd65Smrg    </para>
8909e7bcd65Smrg  </listitem>
8919e7bcd65Smrg  <listitem>
8929e7bcd65Smrg    <para>
8939e7bcd65SmrgIn a call to
8949e7bcd65Smrg<xref linkend='XtResizeWidget' xrefstyle='select: title'/>
8959e7bcd65Smrgon a rectobj child, a single
8969e7bcd65Smrgrectangle will be cleared corresponding to the larger of the
8979e7bcd65Smrgold and the new child geometries if they are different.
8989e7bcd65Smrg    </para>
8999e7bcd65Smrg  </listitem>
9009e7bcd65Smrg  <listitem>
9019e7bcd65Smrg    <para>
9029e7bcd65SmrgIn a call to
9039e7bcd65Smrg<xref linkend='XtMakeGeometryRequest' xrefstyle='select: title'/>
9049e7bcd65Smrg(or
9059e7bcd65Smrg<xref linkend='XtMakeResizeRequest' xrefstyle='select: title'/>)
9069e7bcd65Smrgon a rectobj child with
9079e7bcd65Smrg<function>XtQueryOnly</function>
9089e7bcd65Smrgnot set, if the manager returns
9099e7bcd65Smrg<function>XtGeometryYes</function>,
9109e7bcd65Smrgtwo rectangles will be cleared corresponding to both the old and
9119e7bcd65Smrgthe new child geometries.
9129e7bcd65Smrg    </para>
9139e7bcd65Smrg  </listitem>
9149e7bcd65Smrg</itemizedlist>
9159e7bcd65Smrg<para>
9169e7bcd65SmrgStacking order is not supported for rectobj children.  Composite widgets with
9179e7bcd65Smrgrectobj children are free to define any semantics desired if the child
9189e7bcd65Smrggeometries overlap, including making this an error.
9199e7bcd65Smrg</para>
9209e7bcd65Smrg
9219e7bcd65Smrg<para>
9229e7bcd65SmrgWhen a rectobj is playing the role of a widget, developers must be
9239e7bcd65Smrgreminded to avoid making assumptions about the object passed in the
9249e7bcd65SmrgWidget argument to a callback procedure.
9259e7bcd65Smrg</para>
9269e7bcd65Smrg</sect2>
9279e7bcd65Smrg</sect1>
9289e7bcd65Smrg
9299e7bcd65Smrg<sect1 id="Undeclared_Class">
9309e7bcd65Smrg<title>Undeclared Class</title>
9319e7bcd65Smrg<para>
9329e7bcd65SmrgThe Intrinsics define an unnamed class between
9339e7bcd65SmrgRectObj
9349e7bcd65Smrgand
9359e7bcd65SmrgCore
9369e7bcd65Smrgfor possible future use by the X Consortium. The only assumptions that
9379e7bcd65Smrgmay be made about the unnamed class are
9389e7bcd65Smrg</para>
9399e7bcd65Smrg<itemizedlist spacing='compact'>
9409e7bcd65Smrg  <listitem>
9419e7bcd65Smrg    <para>
9429e7bcd65SmrgThe <emphasis remap='I'>core_class.superclass</emphasis> field of
9439e7bcd65Smrg<function>coreWidgetClassRec</function>
9449e7bcd65Smrgcontains a pointer to the unnamed class record.
9459e7bcd65Smrg    </para>
9469e7bcd65Smrg  </listitem>
9479e7bcd65Smrg  <listitem>
9489e7bcd65Smrg    <para>
9499e7bcd65SmrgA pointer to the unnamed class record when dereferenced as an
9509e7bcd65Smrg<function>ObjectClass</function>
9519e7bcd65Smrgwill contain a pointer to
9529e7bcd65Smrg<function>rectObjClassRec</function>
9539e7bcd65Smrgin its <emphasis remap='I'>object_class.superclass</emphasis> field.
9549e7bcd65Smrg    </para>
9559e7bcd65Smrg  </listitem>
9569e7bcd65Smrg</itemizedlist>
9579e7bcd65Smrg<para>
9589e7bcd65SmrgExcept for the above, the contents of the class record for this class
9599e7bcd65Smrgand the result of an attempt to subclass or to create a widget of this
9609e7bcd65Smrgunnamed class are undefined.
9619e7bcd65Smrg</para>
9629e7bcd65Smrg</sect1>
9639e7bcd65Smrg
9649e7bcd65Smrg<sect1 id="Widget_Arguments_to_Intrinsics_Routines">
9659e7bcd65Smrg<title>Widget Arguments to Intrinsics Routines</title>
9669e7bcd65Smrg<para>
9679e7bcd65SmrgThe WidgetClass arguments to the following procedures must be of class
9689e7bcd65SmrgShell
9699e7bcd65Smrgor a subclass:
9709e7bcd65Smrg</para>
9719e7bcd65Smrg<itemizedlist spacing='compact'>
9729e7bcd65Smrg  <listitem>
9739e7bcd65Smrg    <para>
9749e7bcd65Smrg<xref linkend='XtCreatePopupShell' xrefstyle='select: title'/>,
9759e7bcd65Smrg<xref linkend='XtVaCreatePopupShell' xrefstyle='select: title'/>,
9769e7bcd65Smrg<xref linkend='XtAppCreateShell' xrefstyle='select: title'/>,
9779e7bcd65Smrg<xref linkend='XtVaAppCreateShell' xrefstyle='select: title'/>,
9789e7bcd65Smrg<xref linkend='XtOpenApplication' xrefstyle='select: title'/>,
9799e7bcd65Smrg<xref linkend='XtVaOpenApplication' xrefstyle='select: title'/>
9809e7bcd65Smrg    </para>
9819e7bcd65Smrg  </listitem>
9829e7bcd65Smrg</itemizedlist>
9839e7bcd65Smrg<para>
9849e7bcd65SmrgThe Widget arguments to the following procedures must be of class
9859e7bcd65SmrgCore
9869e7bcd65Smrgor any subclass:
9879e7bcd65Smrg</para>
9889e7bcd65Smrg<itemizedlist spacing='compact'>
9899e7bcd65Smrg  <listitem>
9909e7bcd65Smrg    <para>
9919e7bcd65Smrg<xref linkend='XtCreatePopupShell' xrefstyle='select: title'/>,
9929e7bcd65Smrg<xref linkend='XtVaCreatePopupShell' xrefstyle='select: title'/>
9939e7bcd65Smrg    </para>
9949e7bcd65Smrg  </listitem>
9959e7bcd65Smrg  <listitem>
9969e7bcd65Smrg    <para>
9979e7bcd65Smrg<xref linkend='XtAddEventHandler' xrefstyle='select: title'/>,
9989e7bcd65Smrg<xref linkend='XtAddRawEventHandler' xrefstyle='select: title'/>,
9999e7bcd65Smrg<xref linkend='XtRemoveEventHandler' xrefstyle='select: title'/>,
10009e7bcd65Smrg<xref linkend='XtRemoveRawEventHandler' xrefstyle='select: title'/>,
10019e7bcd65Smrg<xref linkend='XtInsertEventHandler' xrefstyle='select: title'/>,
10029e7bcd65Smrg<xref linkend='XtInsertRawEventHandler' xrefstyle='select: title'/>
10039e7bcd65Smrg<xref linkend='XtInsertEventTypeHandler' xrefstyle='select: title'/>,
10049e7bcd65Smrg<xref linkend='XtRemoveEventTypeHandler' xrefstyle='select: title'/>,
10059e7bcd65Smrg    </para>
10069e7bcd65Smrg  </listitem>
10079e7bcd65Smrg  <listitem>
10089e7bcd65Smrg    <para>
10099e7bcd65Smrg<xref linkend='XtRegisterDrawable' xrefstyle='select: title'/>
10109e7bcd65Smrg<xref linkend='XtDispatchEventToWidget' xrefstyle='select: title'/>
10119e7bcd65Smrg    </para>
10129e7bcd65Smrg  </listitem>
10139e7bcd65Smrg  <listitem>
10149e7bcd65Smrg    <para>
10159e7bcd65Smrg<xref linkend='XtAddGrab' xrefstyle='select: title'/>,
10169e7bcd65Smrg<xref linkend='XtRemoveGrab' xrefstyle='select: title'/>,
10179e7bcd65Smrg<xref linkend='XtGrabKey' xrefstyle='select: title'/>,
10189e7bcd65Smrg<xref linkend='XtGrabKeyboard' xrefstyle='select: title'/>,
10199e7bcd65Smrg<xref linkend='XtUngrabKey' xrefstyle='select: title'/>,
10209e7bcd65Smrg<xref linkend='XtUngrabKeyboard' xrefstyle='select: title'/>,
10219e7bcd65Smrg<xref linkend='XtGrabButton' xrefstyle='select: title'/>,
10229e7bcd65Smrg<xref linkend='XtGrabPointer' xrefstyle='select: title'/>,
10239e7bcd65Smrg<xref linkend='XtUngrabButton' xrefstyle='select: title'/>,
10249e7bcd65Smrg<xref linkend='XtUngrabPointer' xrefstyle='select: title'/>
10259e7bcd65Smrg    </para>
10269e7bcd65Smrg  </listitem>
10279e7bcd65Smrg  <listitem>
10289e7bcd65Smrg    <para>
10299e7bcd65Smrg<xref linkend='XtBuildEventMask' xrefstyle='select: title'/>
10309e7bcd65Smrg    </para>
10319e7bcd65Smrg  </listitem>
10329e7bcd65Smrg  <listitem>
10339e7bcd65Smrg    <para>
10349e7bcd65Smrg<xref linkend='XtCreateWindow' xrefstyle='select: title'/>,
10359e7bcd65Smrg<function>XtDisplay</function>,
10369e7bcd65Smrg<xref linkend='XtScreen' xrefstyle='select: title'/>,
10379e7bcd65Smrg<xref linkend='XtWindow' xrefstyle='select: title'/>
10389e7bcd65Smrg    </para>
10399e7bcd65Smrg  </listitem>
10409e7bcd65Smrg  <listitem>
10419e7bcd65Smrg    <para>
10429e7bcd65Smrg<xref linkend='XtNameToWidget' xrefstyle='select: title'/>
10439e7bcd65Smrg    </para>
10449e7bcd65Smrg  </listitem>
10459e7bcd65Smrg  <listitem>
10469e7bcd65Smrg    <para>
10479e7bcd65Smrg<xref linkend='XtGetSelectionValue' xrefstyle='select: title'/>,
10489e7bcd65Smrg<xref linkend='XtGetSelectionValues' xrefstyle='select: title'/>,
10499e7bcd65Smrg<xref linkend='XtOwnSelection' xrefstyle='select: title'/>,
10509e7bcd65Smrg<xref linkend='XtDisownSelection' xrefstyle='select: title'/>,
10519e7bcd65Smrg<xref linkend='XtOwnSelectionIncremental' xrefstyle='select: title'/>,
10529e7bcd65Smrg<xref linkend='XtGetSelectionValueIncremental' xrefstyle='select: title'/>,
10539e7bcd65Smrg<xref linkend='XtGetSelectionValuesIncremental' xrefstyle='select: title'/>,
10549e7bcd65Smrg<xref linkend='XtGetSelectionRequest' xrefstyle='select: title'/>
10559e7bcd65Smrg    </para>
10569e7bcd65Smrg  </listitem>
10579e7bcd65Smrg  <listitem>
10589e7bcd65Smrg    <para>
10599e7bcd65Smrg<xref linkend='XtInstallAccelerators' xrefstyle='select: title'/>,
10609e7bcd65Smrg<xref linkend='XtInstallAllAccelerators' xrefstyle='select: title'/>
10619e7bcd65Smrg(both destination and source)
10629e7bcd65Smrg    </para>
10639e7bcd65Smrg  </listitem>
10649e7bcd65Smrg  <listitem>
10659e7bcd65Smrg    <para>
10669e7bcd65Smrg<xref linkend='XtAugmentTranslations' xrefstyle='select: title'/>,
10679e7bcd65Smrg<xref linkend='XtOverrideTranslations' xrefstyle='select: title'/>,
10689e7bcd65Smrg<xref linkend='XtUninstallTranslations' xrefstyle='select: title'/>,
10699e7bcd65Smrg<xref linkend='XtCallActionProc' xrefstyle='select: title'/>
10709e7bcd65Smrg    </para>
10719e7bcd65Smrg  </listitem>
10729e7bcd65Smrg  <listitem>
10739e7bcd65Smrg    <para>
10749e7bcd65Smrg<xref linkend='XtMapWidget' xrefstyle='select: title'/>,
10759e7bcd65Smrg<xref linkend='XtUnmapWidget' xrefstyle='select: title'/>
10769e7bcd65Smrg    </para>
10779e7bcd65Smrg  </listitem>
10789e7bcd65Smrg  <listitem>
10799e7bcd65Smrg    <para>
10809e7bcd65Smrg<xref linkend='XtRealizeWidget' xrefstyle='select: title'/>,
10819e7bcd65Smrg<xref linkend='XtUnrealizeWidget' xrefstyle='select: title'/>
10829e7bcd65Smrg    </para>
10839e7bcd65Smrg  </listitem>
10849e7bcd65Smrg  <listitem>
10859e7bcd65Smrg    <para>
10869e7bcd65Smrg<xref linkend='XtSetMappedWhenManaged' xrefstyle='select: title'/>
10879e7bcd65Smrg    </para>
10889e7bcd65Smrg  </listitem>
10899e7bcd65Smrg  <listitem>
10909e7bcd65Smrg    <para>
10919e7bcd65Smrg<xref linkend='XtCallAcceptFocus' xrefstyle='select: title'/>,
10929e7bcd65Smrg<xref linkend='XtSetKeyboardFocus' xrefstyle='select: title'/>
10939e7bcd65Smrg(subtree)
10949e7bcd65Smrg    </para>
10959e7bcd65Smrg  </listitem>
10969e7bcd65Smrg  <listitem>
10979e7bcd65Smrg    <para>
10989e7bcd65Smrg<xref linkend='XtResizeWindow' xrefstyle='select: title'/>
10999e7bcd65Smrg    </para>
11009e7bcd65Smrg  </listitem>
11019e7bcd65Smrg  <listitem>
11029e7bcd65Smrg    <para>
11039e7bcd65Smrg<xref linkend='XtSetWMColormapWindows' xrefstyle='select: title'/>
11049e7bcd65Smrg    </para>
11059e7bcd65Smrg  </listitem>
11069e7bcd65Smrg</itemizedlist>
11079e7bcd65Smrg<para>
11089e7bcd65SmrgThe Widget arguments to the following procedures must be of class
11099e7bcd65SmrgComposite
11109e7bcd65Smrgor any subclass:
11119e7bcd65Smrg</para>
11129e7bcd65Smrg<itemizedlist spacing='compact'>
11139e7bcd65Smrg  <listitem>
11149e7bcd65Smrg    <para>
11159e7bcd65Smrg<xref linkend='XtCreateManagedWidget' xrefstyle='select: title'/>,
11169e7bcd65Smrg<xref linkend='XtVaCreateManagedWidget' xrefstyle='select: title'/>
11179e7bcd65Smrg    </para>
11189e7bcd65Smrg  </listitem>
11199e7bcd65Smrg</itemizedlist>
11209e7bcd65Smrg<para>
11219e7bcd65SmrgThe Widget arguments to the following procedures must be of a subclass of
11229e7bcd65SmrgShell:
11239e7bcd65Smrg</para>
11249e7bcd65Smrg<itemizedlist spacing='compact'>
11259e7bcd65Smrg  <listitem>
11269e7bcd65Smrg    <para>
11279e7bcd65Smrg<xref linkend='XtPopdown' xrefstyle='select: title'/>,
11289e7bcd65Smrg<xref linkend='XtCallbackPopdown' xrefstyle='select: title'/>,
11299e7bcd65Smrg<xref linkend='XtPopup' xrefstyle='select: title'/>,
11309e7bcd65Smrg<xref linkend='XtCallbackNone' xrefstyle='select: title'/>,
11319e7bcd65Smrg<xref linkend='XtCallbackNonexclusive' xrefstyle='select: title'/>,
11329e7bcd65Smrg<xref linkend='XtCallbackExclusive' xrefstyle='select: title'/>,
11339e7bcd65Smrg<xref linkend='XtPopupSpringLoaded' xrefstyle='select: title'/>
11349e7bcd65Smrg    </para>
11359e7bcd65Smrg  </listitem>
11369e7bcd65Smrg</itemizedlist>
11379e7bcd65Smrg<para>
11389e7bcd65SmrgThe return value of the following procedure will be of class
11399e7bcd65SmrgCore
11409e7bcd65Smrgor a subclass:
11419e7bcd65Smrg</para>
11429e7bcd65Smrg<itemizedlist spacing='compact'>
11439e7bcd65Smrg  <listitem>
11449e7bcd65Smrg    <para>
11459e7bcd65Smrg<xref linkend='XtWindowToWidget' xrefstyle='select: title'/>
11469e7bcd65Smrg    </para>
11479e7bcd65Smrg  </listitem>
11489e7bcd65Smrg</itemizedlist>
11499e7bcd65Smrg<para>
11509e7bcd65SmrgThe return value of the following procedures will be of a subclass of
11519e7bcd65SmrgShell:
11529e7bcd65Smrg</para>
11539e7bcd65Smrg<itemizedlist spacing='compact'>
11549e7bcd65Smrg  <listitem>
11559e7bcd65Smrg    <para>
11569e7bcd65Smrg<xref linkend='XtAppCreateShell' xrefstyle='select: title'/>,
11579e7bcd65Smrg<xref linkend='XtVaAppCreateShell' xrefstyle='select: title'/>,
11589e7bcd65Smrg<xref linkend='XtAppInitialize' xrefstyle='select: title'/>,
11599e7bcd65Smrg<xref linkend='XtVaAppInitialize' xrefstyle='select: title'/>,
11609e7bcd65Smrg<xref linkend='XtCreatePopupShell' xrefstyle='select: title'/>,
11619e7bcd65Smrg<xref linkend='XtVaCreatePopupShell' xrefstyle='select: title'/>
11629e7bcd65Smrg    </para>
11639e7bcd65Smrg  </listitem>
11649e7bcd65Smrg</itemizedlist>
11659e7bcd65Smrg</sect1>
11669e7bcd65Smrg</chapter>
1167