chuck@Morgan.COM (Chuck Ocheret) (10/30/90)
I am doing something weird in a widget which I wrote which works in
Motif 1.0 and am looking for suggestions to solve my problem properly
with 1.1.
The widget in question is a subclass of Manager and contains the
following default children as depicted below. The DrawingArea
represents something like a spreadsheet in that rows and columns of
data are displayed.
+--------------------------------------------------------+
| Label 1 |
+--------------------------------------------------------+
| Label 2 |
+----------+----------+----------+----------+----------+-+
| Button 1 | Button 2 | Button 3 | Button 4 | Button 5 | |
+----------+----------+----------+----------+----------+-+
| row1col1 row1col2 ................... row1col5 |^|
| row2col1 |-|
| . | |
| . . |s|
| . DrawingArea . |c|
| . . |r|
| . . |o|
| . +----------+ . |l|
| . | Text | . |l|
| . +----------+ . |b|
| . . |a|
| . . |r|
| . . | |
| |-|
| rowNcol1 rowNcol2 ................... rowNcol5 |v|
+------------------------------------------------------+-+
|<| scrollbar |>| |
+------------------------------------------------------+-+
In order to allow data entry I create a Text widget (I will probably
use a TextField in 1.1) as a child of the DrawingArea (every other
widget depicted is a child of my new widget). The Text widget is
created and managed with mappedWhenManaged set to FALSE. I add a
keyboard translation to the DrawingArea such that the Text widget is
configured over the appropriate cell and then mapped when the user
starts to type in data.
At this point, I want the Text widget to take over and provide all of
its useful capabilities. This requires that the Text widget get focus
when it is mapped. With Motif 1.0 I was able to kludge this with
XtSetKeyboardFocus (I have been told that this was always a bad idea
with Motif). Now I am trying to use XmProcessTraversal but am having
no luck getting focus on the Text widget. XmProcessTraversal always
returns FALSE. Upon examination with dbx I see that in
_XmMgrTraversal() both _XmGetTabGroup and _XmFindTabGroup return NULL
pointers because the focusData in the applicationShell doesn't
indicate a current tab group.
It would also be nice if the user could tab to the buttons, the
scrollbars, and the drawing area.
I need suggestions as to how to do this kind of thing properly. I
would also really appreciate it if someone out there who really
understands the Motif traversal mechanism could post to this group a
summary about how it works, especially from the perspective of widget
writers. I've written a bunch of Motif-subclassed widgets so far
and almost always run into problems with traversal.
~chuck
--
+--------------------+ Chuck Ocheret, Sr. Staff Engineer +---------------+
|chuck@APT.Morgan.COM| Morgan Stanley & Co., Inc. |(212) 703-4474 |
| Duty now ... |19th Floor, 1251 Avenue of the Americas|for the future.|
+--------------------+ New York, N.Y. 10020 USA +---------------+