[comp.windows.x] simple widget question

hagens@CS.WISC.EDU (12/13/88)

I want to duplicate something that Xmh does:

create a Viewport widget, create a Box widget inside the Viewport, and
then create Command widgets inside the Box widget. When I run the sample
program below, I get a box with 3 buttons in it (if 3 is passed as an
argument). When I click on a button, my callback is invoked, but
I do not get a scroll bar formed by the viewport. If I manually
resize the whole thing, then I do get a scroll bar. However, if I then
add more buttons, the scroll bar does not change accordingly and I
can not access the new command buttons.

Any help would be appreciated. Please excuse the sloppyness of the example.

Environment: X11R2 on IBM PC/RT, AOS Release 2, AED, APC card


ps. my example is based upon xboxes.c in the examples directory

================ cut here to see sloppy example =============================
#ifndef lint
static char rcsid[] = "$Header: xboxes.c,v 1.12 88/02/14 15:08:38 rws Exp $";
#endif	lint

#include <stdio.h>
#include <X11/Intrinsic.h>
#include <X11/Atoms.h>
#include <X11/Label.h>
#include <X11/Command.h>
#include <X11/Box.h>
#include <X11/Viewport.h>
#include <X11/Cardinals.h>

static Widget toplevel;

Widget	viewp;
Widget	viewp_inner;

void poof(widget,closure,callData)
    Widget widget;
    caddr_t closure;
    caddr_t callData;
{
	Widget w;
 (void) fprintf(stderr,"poof callback\n");
	w = XtCreateManagedWidget("NEW", commandWidgetClass, viewp_inner,
		NULL, (Cardinal)0);
	XtRealizeWidget(w);
}

void main(argc, argv)
    unsigned int argc;
    char **argv;
{
    static Arg viewArgs[] = { 
 		{XtNheight,		400},
 		{XtNwidth,		80},
		{XtNallowVert,	True},
	};
    static Arg boxArgs[] = { 
 		{XtNheight,		400},
 		{XtNwidth,		80},
	};
	static XtCallbackRec callbacks[] = {
		{poof, NULL},
		{NULL, NULL},
	};
    static Arg butArgs[] = { 
		{XtNcallback,	(XtArgVal)callbacks},
	};
	int i;
	Widget xyzzy;


    toplevel = XtInitialize( NULL, "Xb", NULL, 0,
			     &argc, argv);

	viewp = XtCreateManagedWidget(NULL, viewportWidgetClass, toplevel,
		viewArgs, XtNumber(viewArgs));

	viewp_inner = XtCreateManagedWidget(NULL, boxWidgetClass, viewp,
		NULL, (Cardinal)0);

	for (i=0; i<atoi(argv[1]); i++) {
		char buf[10];
		sprintf(buf, "button %d", i);
		xyzzy = XtCreateManagedWidget(buf, commandWidgetClass, viewp_inner,
			butArgs, XtNumber(butArgs));
	}

    XtRealizeWidget(toplevel);

    XtMainLoop();
}

swick@ATHENA.MIT.EDU (Ralph R. Swick) (12/14/88)

     Date:  Mon, 12 Dec 88 16:12:27 -0600
     From:  hagens@cs.wisc.edu

     ... When I click on a button, my callback is invoked, but
     I do not get a scroll bar formed by the viewport.

I cannot reproduce this under X11R3.

     ... if I then
     add more buttons, the scroll bar does not change accordingly and I
     can not access the new command buttons.

This bug still exists.