Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
XmResolvePartOffsets(3)	   Library Functions Manual    XmResolvePartOffsets(3)

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

SYNOPSIS
       #include	<Xm/Xm.h>
       void XmResolvePartOffsets(
       WidgetClass widget_class,
       XmOffsetPtr * offset);

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 XmRe-
       solvePartOffsets	function allocates the offset records needed by	an ap-
       plication to guarantee  upward-compatible  access  to  widget  instance
       records	by applications	and widgets.  These offset records are used by
       the widget to access all	of the widget's	variables.  A widget needs  to
       take the	steps described	in the following paragraphs.

       Instead	of  creating a resource	list, the widget creates an offset re-
       source list.  To	accomplish this, use the XmPartResource	structure  and
       the  XmPartOffset  macro.  The XmPartResource data structure looks just
       like a resource list, but instead of having one integer for its offset,
       it has two shorts.  This	structure is put into the class	record	as  if
       it  were	a normal resource list.	Instead	of using XtOffset for the off-
       set, 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 sep-
       arate global variable.

       In class	initialization,	the widget calls XmResolvePartOffsets, passing
       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 ini-
	     tialized) 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
	     values, determined	by examining the size fields of	all superclass
	     records

	    Uses the part offset array	to modify the offset  entries  in  the
	     resource list to be real offsets, in place

       The widget defines a constant that will be the index to its part	struc-
       ture  in	the offsets array.  The	value should be	1 greater than the in-
       dex 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  to-
       gether, you must	ensure that there is no	space after the	part argument.
       For  example, the following macros do not work because of the space af-
       ter 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

       widget_class
		 Specifies the widget class pointer for	the created widget

       offset	 Returns the offset record

RELATED	INFORMATION
       XmResolveAllPartOffsets(3).

						       XmResolvePartOffsets(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=XmResolvePartOffsets&sektion=3&manpath=FreeBSD+Ports+14.3.quarterly>

home | help