[comp.windows.x.motif] Grabbing focus on a newly managed widget

dvb@emisle.emisle (David Van Beveren) (03/25/91)

This seems so easy, but I just cannot make it work:

Goal: create a function that is passed a prompt string and a default response
      string. This function pop up an APPLICATION_MODAL dialog shell with a
      PROMPT MessageBox as its only child. The routine will return the string
      typed in, which defaults to the passed default response, or NULL if the
      cancel button is pressed.

Solution: Easy, at initialization create a dialog shell and a selection box of
      the appropriate type. This routine is called bldprompt(). neither widget
      is managed at creation time, but they are realized. the main routine is
      called get_input, and it first manages the widgets, calls
      XmProcessTraversal passing the DIALOG_TEXT child of the selection box and
      XmTRAVERSE_CURRENT. Then, go into a x-loop which will terminate when a
      control variable is changed. The control variable is changed by either
      the XmNokCallback or the XmNcancelCallback. Those callbacks extract the
      string from the DIALOG_TEXT child, and the main routine gets that string
      and returns it.

Bug:  The first time the widget is managed, the text child does not get focus.
      Instead, a little caret appears after the text (I use XmTextSetString and
      XmTextSetInsertionPosition (sic?) to set the default and position the
      cursor). This only happens the first time. After that, whenever the 
      get_input routine is called, everything works fine. I believe the problem
      is that some X-events need to be processed on the text widget after
      XtManageChild has been called and before XmProcessTraversal can be
      called. I do not know what these events might be. If  I knew, I might
      be able to insert an event handler after all others that calls
      XmProcessTraversal for the text widget. (I tried this for Exposure and
      got no difference)

If anyone has Ideas, or even better, code that does this, please let me know.
I will summarize and post of there is sufficient interest.



      
-- 
David Van Beveren                           INTERNET: emisle!dvb@ism.isc.com
EIS ltd. Professional Software Services     UUCP:   ..uunet!emisle!dvb
voice: (818) 587-1247