alan@metasoft.UUCP (Alan Epstein) (04/17/91)
I've got a text widget which I move around when an edit window is required. Each invocation may require a new font also. What I do is create a font list (XmFontListCreate), and run XtSetValues to set it. However, the widget normally tries to resize itself to the new font size, so I call XtSetValues again with the original width/height to bring it back to size. Then I reparent the text widget via its parent (XReparentWindow), to insure that the scrolled window and scrolled bars get moved, and finally I call XMapRaised and XFlush so I can see the thing. This all works as expected with one major drawback: each time the widget comes up, it generates multiple exposures, and flashes very noticeably in different sizes before it settles down. If I use only one XtSetValues call for the font list and W/H, the font list is ignored some of the time. Is this a known problem, and is there a way around this unpleasantry? I include code below for inquiring minds. Thanks in advance. ----------------------------- Alan Epstein Meta Software Corp UUCP: ...bbn!metasoft!alan 150 Cambridgepark Dr Internet/ARPA: alan%metasoft@bbn.com Cambridge, MA 02140 USA ----------------------------- /* ... init: */ n = 0; XtSetArg(args[n], XmNx, 0); n++; XtSetArg(args[n], XmNy, 0); n++; XtSetArg(args[n], XmNwidth, 100); n++; XtSetArg(args[n], XmNheight, 100); n++; XtSetArg(args[n], XmNborderWidth, 0); n++; XtSetArg(args[n], XmNscrollingPolicy, XmAPPLICATION_DEFINED); n++; XtSetArg(args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++; XtSetArg(args[n], XmNscrollHorizontal, False); n++; XtSetArg(args[n], XmNscrollVertical, True); n++; XtSetArg(args[n], XmNwordWrap, True); n++; XtSetArg(args[n], XmNforeground, Text_ForeGround); n++; XtSetArg(args[n], XmNbackground, Text_BackGround); n++; XtSetArg(args[n], XmNmarginHeight, 0); n++; XtSetArg(args[n], XmNmarginWidth, 0); n++; MotifText = (Widget)XmCreateScrolledText(PopupShell, "text", args, n); XtManageChild(MotifText); XtRealizeWidget(PopupShell); /* end of init ... */ ------------------------------------------------------------------------- /* updater ... */ tmpFontList = XmFontListCreate(&fontStruct, XmSTRING_DEFAULT_CHARSET); /* Set the dimensions and font of the Motif text widget */ if (Local_XFontList != tmpFontList) { n = 0; XtSetArg(args[n], XmNfontList, tmpFontList); n++; XtSetValues(MotifText,args,n); if (Local_XFontList) { XmFontListFree(Local_XFontList); } Local_XFontList = tmpFontList; } n = 0; XtSetArg(args[n], XmNwidth, W); n++; XtSetArg(args[n], XmNheight,H); n++; XtSetValues(MotifText,args,n); /* Make the text widget a child of the current page */ XReparentWindow(XDisplay, XtWindow(XtParent(MotifText)), XtWindow((Widget)win), X, Y); XMapRaised(XDisplay, XtWindow(XtParent(MotifText))); XFlush(XDisplay); /* end of updater ... */