[comp.windows.x] Problems subclassing Athena widgets

walters@lid.mitre.org (Chris Walters) (03/13/90)

Summary:
       Warning: Representation size 4 must match superclass's
       to override fooBar

Hello,

I am trying to create a subclass of the Athena command widget.
I would like to add some additional resources to the command widget
as a learning exercise (I am brand new at this).

I have looked at the examples provided by Ralph Swick in the R4
Xaw documentation, and have looked at the toggle widget itself to
see how it inherits from the core, simple, label, and command widgets.

I thought I understood how it worked; I guess not!

If I create a new widget called barfo that has a new resource
called fooBar (where XtNfooBar = "fooBar", XtCfooBar = "FooBar",and reptype is an integer), with the following in BarfoP.h:

	typedef struct {
	/* resources */
		int w_foo_bar;
	/* private state */
	} BarfoPart;

	typedef struct _BarfoRec {
		CorePart    core;
		SimplePart  simple;
		LabelPart   label;
		CommandPart command;
		BarfoPart   barfo;
	} BarfoRec;

and

	typedef struct {  int foo; } BarfoClassPart;

	typedef struct _BarfoClassRec {
		CoreClassPart       core_class;
		SimpleClassPart     simple_class;
		LabelClassPart      label_class;
		CommandClassPart    command_class;
		BarfoClassPart     barfo_class;
	} BarfoClassRec;

	extern BarfoClassRec barfoClassRec;

Then, in Barfo.c, I have the following:

	#define offset(field) XtOffset(BarfoWidget, field)

	static XtResource resources[] = {
		{ XtNfooBar, XtCfooBar, XtRInt, sizeof(int),
		offset(xopcmd.w_foo_bar), XtRInt, (int) 100 },
	};
	#undef offset

I then looked at the Toggle sources to see how the widget class
record structure would look for something subclassing from
other widgets.

When I try to use the widget, I get:

       Warning: Representation size 4 must match superclass's
       to override fooBar

I looked through the source and found that this is coming from
the resource manager (BadSize).

Any help or pointers to the FM would be appreciated.  Apologies
in advance if this is really a dumb question.

In case it matters, my environment is SunOS 4.0.3 on 3/260, X11R4
with patches.

Thanks,
  - Chris Walters
    The MITRE Corporation
    McLean, VA 22102 (703) 883-6159

    email: walters@euler.mitre.org
              or if that fails
           walters@community-chest.mitre.org
              or if that fails
           walters@mwunix.mitre.org

palmer@MWUNIX.MITRE.ORG (03/13/90)

>  Subject: Problems subclassing Athena widgets
>  Message-Id: <102193@linus.UUCP>
>  Sender: xpert-request@expo.lcs.mit.edu
>  To: xpert@expo.lcs.mit.edu
>  
>  Summary:
>         Warning: Representation size 4 must match superclass's
>         to override fooBar
>  

>  Then, in Barfo.c, I have the following:
>  
>  	#define offset(field) XtOffset(BarfoWidget, field)
>  
>  	static XtResource resources[] = {
>  		{ XtNfooBar, XtCfooBar, XtRInt, sizeof(int),
>  		offset(xopcmd.w_foo_bar), XtRInt, (int) 100 },
>  	};
>  	#undef offset
>  

Chris,

   The problem is in the default_addr field. Try :

>   offset(xopcmd.w_foo_bar), XtRInt, (XtPointer) 100 },
                                      ^^^^^^^^^^^ ^^^

------------------------------------------------------
Forrest Palmer (x5668)
Systems Programmer/Administrator
MITRE Corp. - Washington Center

palmer@mwunix.mitre.org
------------------------------------------------------