stung@iuvax.cs.indiana.edu (Sho-Huan Simon Tung) (08/15/89)
/* The following is a program which should allow widgets to be created
and destroyed dynamically. However, if the user try to create
new widgets after destroying old ones the program crash with
a segmentation fault in `VPaned`Resize(). I don't know how to fix
the problem. Are there anyone who might know the solution?
Any help will be greatly appreciated.
Sho-Huan Simon Tung stung@iuvax.cs.indiana.edu
Department of computer Science
Indiana University
*/
#include <stdio.h>
#include <X11/Intrinsic.h>
#include <X11/Box.h>
#include <X11/Command.h>
#include <X11/Form.h>
#include <X11/VPaned.h>
#include <X11/Viewport.h>
#include <X11/StringDefs.h>
#include <X11/Shell.h>
int x, y;
XtCallbackProc DoClose(w, client_data, call_data)
Widget w;
caddr_t client_data ;
caddr_t call_data ;
{
XtDestroyWidget(client_data);
}
XtCallbackProc DoNewWC(w, client_data, call_data)
Widget w;
caddr_t client_data ;
caddr_t call_data ;
{
Widget new_widget, box0,box1,label;
int n;
Arg args[5];
n =0;
x = x + 93; y = y + 45;
XtSetArg(args[n], XtNhorizDistance, (XtArgVal)x); n++;
XtSetArg(args[n], XtNvertDistance, (XtArgVal)y); n++;
XtSetArg(args[n], XtNwidth, (XtArgVal)90); n++;
XtSetArg(args[n], XtNheight, (XtArgVal)43); n++;
box0 = XtCreateManagedWidget("box", vPanedWidgetClass,client_data,args,n);
label = XtCreateManagedWidget("A widget", labelWidgetClass,box0,NULL,0);
box1 = XtCreateManagedWidget("box", boxWidgetClass,box0,NULL,0);
new_widget = XtCreateManagedWidget("Close",
commandWidgetClass, box1,NULL,0);
XtAddCallback(new_widget, XtNcallback, DoClose, box0);
XtRealizeWidget(client_data);
}
void main(argc, argv)
unsigned int argc;
char **argv;
{
Arg args[9] ;
int n ;
Widget toplevel, outer_vpaned_widget, outer_command_line, outer_form,
outer_viewport, new_button;
x = y = 0;
toplevel = XtInitialize ("test1", "Test1", NULL, 0, &argc, argv);
outer_vpaned_widget = XtCreateManagedWidget( "outer_vpaned",
vPanedWidgetClass,
toplevel, NULL, 0);
outer_command_line = XtCreateManagedWidget("outer_command_line",
boxWidgetClass,
outer_vpaned_widget, NULL, 0);
n=0;
XtSetArg(args[n], XtNallowHoriz, (XtArgVal)True); n++;
XtSetArg(args[n], XtNallowVert, (XtArgVal)True); n++;
XtSetArg(args[n], XtNforceBars, (XtArgVal)True); n++;
outer_viewport = XtCreateManagedWidget("outer_viewport",
viewportWidgetClass,
outer_vpaned_widget, args, n);
n=0;
XtSetArg(args[n],XtNwidth,(XtArgVal)100); n++;
XtSetArg(args[n],XtNheight, (XtArgVal)100); n++;
outer_form = XtCreateManagedWidget("outer_form",
formWidgetClass, outer_viewport,args,n);
new_button = XtCreateManagedWidget("New", commandWidgetClass,
outer_command_line, NULL, 0);
XtAddCallback(new_button, XtNcallback, DoNewWC, outer_form);
XtRealizeWidget(toplevel);
XtMainLoop() ;
}