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