XmResolvePartOffsets(3X)

XmResolvePartOffsets --A function that allows writing of upward-compatible applications and widgets

As shipped in IRIX 6.5. First release of IRIX 6.5.

NAME
     XmResolvePartOffsets  --A function that allows writing of upward-compatible
     applications and widgets

SYNOPSIS
     #include <Xm/XmP.h>

     void XmResolvePartOffsets (widget_class, offset)
          WidgetClasswidget_class;
          XmOffsetPtr* offset;


VERSION
     This page documents version 1.2 of the Motif library.

DESCRIPTION
     The use of offset records requires one extra  global  variable  per  widget
     class.   The variable consists of a pointer to an array of offsets into the
     widget record for each part of the widget structure.  The XmResolvePartOff-
     sets function allocates the offset records  needed  by  an  application  to
     guarantee  upward-compatible  access to widget instance records by applica-
     tions and widgets.  These offset records are used by the widget  to  access
     all of the widget's variables.  A widget needs to take the following steps:


       *  Instead  of creating a resource list, the widget creates an offset re-
          source list.  To help you  accomplish  this,  use  the  XmPartResource
          structure  and the XmPartOffset macro.  The XmPartResource data struc-
          ture looks just like a resource list, but instead of having one  inte-
          ger  for  its  offset,  it has two shorts.  This is put into the class
          record as if it were a normal resource list.  Instead of using  XtOff-
          set for the offset, the widget uses XmPartOffset.

          XmPartResource resources[] = {
            { BarNxyz, BarCXyz, XmRBoolean,
              sizeof(Boolean), XmPartOffset(Bar,xyz),
              XmRImmediate, (XtPointer)False }
          };


       *  Instead  of  putting  the  widget size in the class record, the widget
          puts the widget part size in the same field.

       *  Instead of putting XtVersion in the  class  record,  the  widget  puts
          XtVersionDontCheck in the class record.

       *  The  widget  defines  a variable, of type XmOffsetPtr, to point to the
          offset record.  This can be part of the widget's  class  record  or  a
          separate global variable.

       *  In  class initialization, the widget calls XmResolvePartOffsets, pass-
          ing it a pointer to contain the address of the offset record  and  the
          class record.  This does several things:

          Adds  the  superclass (which, by definition, has already been initial-
          ized) size field to the part size field

          Allocates an array based upon the number of superclasses

          Fills in the offsets of all the widget parts with the appropriate val-
          ues, determined by examining the size fields of all superclass records

          Uses the part offset array to modify the offset  entries  in  the  re-
          source list to be real offsets, in place

       *  The  widget  defines  a  constant  which will be the index to its part
          structure in the offsets array.  The value should be  1  greater  than
          the  index  of  the widget's superclass.  Constants defined for all Xm
          widgets can be found in XmP.h.

          #define BarIndex (XmBulletinBIndex + 1)


       *  Instead of accessing  fields  directly,  the  widget  must  always  go
          through  the  offset  table.  The XmField macro helps you access these
          fields.  Because  the  XmPartOffset  and  XmField  macros  concatenate
          things together, you must ensure that there is no space after the part
          argument.   For  example,  the following macros do not work because of
          the space after the part (Label) argument:

          XmField(w, offset, Label , text, char *)
          XmPartOffset(Label , text)

          Therefore, you must not have any spaces after the part  (Label)  argu-
          ment, as illustrated here:

          XmField(w, offset, Label, text, char *)

          You  can  define macros for each field to make this easier.  Assume an
          integer field xyz:

          #define BarXyz(w) (*(int *)(((char *) w) + \
            offset[BarIndex] + XtOffset(BarPart,xyz)))


     The parameters for XmResolvePartOffsets are defined below:


     widget_class
               Specifies the widget class pointer for the created widget.

     offset    Returns the offset record.


RELATED INFORMATION
     XmResolveAllPartOffsets(3X).

                                                        XmResolvePartOffsets(3X)