/* $Id: test17.c,v 1.2 1994/07/20 23:07:55 rwscott Exp $ */ /* modal text does not expand modal correctly. From: Todd Denniston Subject: modal text does not expand modal correctly. Date: Wed, 12 Jul 2000 20:31:29 -0700 We have an application which behaves differently when built with Lesstif vs when built with Motif. There are three differences: 1. When the modal is displayed with Motif the buttons on the base application can not be pressed again, this is expected behavior, but with Lesstif they can be pressed over and over again. 2. When the modal is displayed with Motif the modal is resized to account for the size, number of lines, of the text shown. Lesstif does not resize at all. I believe this has been discussed here before but I do not know the outcome, were there any easy workarounds? 3. When the modal is displayed with Motif the text spans the modal to within ~5 pixels of each side of the modal, with Lesstif the text only spans about half of the modal left justified. We have found a workaround for #1 in our program, but we are still working on 2 and 3, as time is pressing for us pointers to where to look in the Lesstif code might yield Lesstif fixes, otherwise we'll probably hack something up in the code we know. Thanks for everything. setup: all programs display on the linux host with an FVWM2 window manager - linux Linux mars 2.2.14 #1-mars first 2.2.14 Fri Mar 31 13:13:01 EST 2000 i686 unknown Slackware 7.0 system - stock + lesstif lesstif-0.91.4 - built from source, installed to ./lib91.4/ attached program compile: gcc modal.c -I. -I./lib91.4/include/ -I/usr/X11R6/include/X11 \ -I/usr/include/pthread/mit/sys -ggdb -L./lib91.4/lib/ -L/usr/X11R6/lib \ -lXm -lXt -lX11 -lXext -o modal - solaris SunOS pegasus 5.6 Generic_105181-12 sun4m sparc SUNW,SPARCstation-5 Motif(tm?) - whatever version came with the solaris 2.6 install gcc --version = 2.8.1 attached program compile: #to get gcc and some needed libs export PATH=/usr/local/bin:$PATH;export LD_LIBRARY_PATH=/usr/openwin/lib/ gcc modal.c -I. -I/usr/remote/lib/lesstif/include/ \ -I/usr/X11R6/include/X11 -I/usr/include/pthread/mit/sys -ggdb \ -I/usr/openwin/share/include/X11 -I/usr/openwin/share/include/X11/ \ -L/usr/lib -L/usr/openwin/lib/ -L/usr/X11R6/lib -lXm -lXt -lX11 -lXext \ -lsocket -lnsl -lposix4 -- ______________________________________________________________________________ Todd Denniston, NSWC Crane E-Mail: mailto:Todd.Denniston@SSA.Crane.Navy.Mil */ /* minor changes from amai fix some compiler warnings. Especially the long string displayed had to be fixed. */ #include #include #include #include #include #include #include #include #include #include #include #include #define FractionBase 100 static void pushed(Widget dialog, XtPointer client_data, XtPointer cbs); void dlg_callback(Widget dialog, XtPointer client_dat, XmAnyCallbackStruct *cbs); static void myexit(Widget dialog, XtPointer client_data, XtPointer cbs); typedef struct { Widget DialogWidget; Widget ModalAlertButton; } DialogType; DialogType ModalAlertDialog; char *font4name = "*helvetica-medium-r-*-24*"; XFontStruct *font4 = NULL; XtAppContext app; Widget toplevel; Display *display; int main(argc, argv) char *argv[]; { Widget button, rowcolumn; toplevel = XtVaAppInitialize(&app, "Test", NULL, 0, &argc, argv, NULL, NULL); rowcolumn = XtCreateManagedWidget("rowcolumn", xmRowColumnWidgetClass, toplevel, NULL, 0); button = XtCreateManagedWidget("Create Modal", xmPushButtonWidgetClass, rowcolumn, NULL, 0); XtAddCallback(button, XmNactivateCallback, pushed, (XtPointer)NULL); button = XtCreateManagedWidget("EXIT", xmPushButtonWidgetClass, rowcolumn, NULL, 0); XtAddCallback(button, XmNactivateCallback, myexit, NULL); display = XtDisplay(toplevel); if((font4 = XLoadQueryFont(display,font4name)) == NULL) { printf("\ncouldn't get font4"); } XtRealizeWidget(toplevel); LessTifTestMainLoop(toplevel); /* XtAppMainLoop(app); */ exit(0); } static void pushed(Widget dialog, XtPointer client_data, XtPointer cbs) { Widget MessageArea; XFontStruct *FontStruct = font4; XmFontList fontlist = XmFontListCreate(FontStruct,"charset4"); int decorations = MWM_DECOR_TITLE | MWM_DECOR_BORDER; Screen *scrn = XtScreen(toplevel); Arg args[11]; int i=0; int center_offset = 15; const Dimension width = 640; int message_length; int message_width; char message[]="we really should see this whole message on the screen at one time, \ RaaLly we should."; /* set dialog's resources */ XtSetArg(args[i], XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL);i++; XtSetArg(args[i], XmNdeleteResponse,XmDESTROY);i++; XtSetArg(args[i], XmNtitle,"TEST");i++; XtSetArg(args[i], XmNfractionBase, FractionBase);i++; XtSetArg(args[i], XmNwidth, width);i++; XtSetArg(args[i], XmNhorizontalSpacing, 15);i++; XtSetArg(args[i], XmNverticalSpacing, 15);i++; XtSetArg(args[i], XmNmwmDecorations, decorations);i++; XtSetArg(args[i], XmNforeground, WhitePixelOfScreen(scrn));i++; XtSetArg(args[i], XmNbackground, BlackPixelOfScreen(scrn));i++; /*create form dialog */ ModalAlertDialog.DialogWidget = XmCreateFormDialog( toplevel, "ModalAlertDialog",args,i); /* * create alert message to display */ /* find offsets from sides to center the text */ message_length = strlen(message); message_width = XTextWidth(FontStruct,message,message_length); if (message_width < width ) { /* an extra 5 pixels (per side) are needed for x to be happy in * it's wrapping. */ center_offset = ((width - message_width ) / 2) - 5; } else { /* don't allow text to touch the side of the window.*/ center_offset = 1; } MessageArea = XtVaCreateManagedWidget("message_area", xmTextWidgetClass, ModalAlertDialog.DialogWidget, XmNrightAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, XmNleftOffset, center_offset, XmNrightOffset, center_offset, XmNeditable,False, XmNeditMode,XmMULTI_LINE_EDIT, XmNforeground, WhitePixelOfScreen(scrn), XmNbackground, BlackPixelOfScreen(scrn), XmNwordWrap,True, XmNresizeHeight,True, XmNcursorPositionVisible,False, XmNshadowThickness,0, XmNborderWidth,0, XmNhighlightThickness,0, XmNvalue, message, XmNfontList, fontlist, NULL); /*END DIALOG BODY*/ XtManageChild(ModalAlertDialog.DialogWidget); XtPopup(XtParent(ModalAlertDialog.DialogWidget),XtGrabNone); /* free X resource */ XmFontListFree(fontlist); } void dlg_callback(dialog, client_data, cbs) Widget dialog; XtPointer client_data; XmAnyCallbackStruct *cbs; { XtPopdown(XtParent(dialog)); } static void myexit(Widget dialog,XtPointer client_data, XtPointer cbs ) { exit(0); }