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