geometry_managermethodThis is the trickiest one. The preferred-size-routine should take two parameters, instigator and instig_request, and use the values specified in instig_request when treating the instigator.
There are two additional rules that you should keep in mind: geometry_manager() doesn't get called if the parent isn't realized; it also doesn't get called if the child isn't managed (in both cases, the request is automatically granted). The method should then call _XmMakeGeometryRequest(). Doing this guarantees that either XtGeometryYes or XtGeometryNo is returned - you'll never see XtGeometryAlmost unless a composite has a bug.
Finally the layout function should be called. The layout function should take two additional parameters, the instigator and the instig_request. What to do next depends on the value that's going to be returned by the geometry_manager() method:
In the layout function, if the child being manipulated is not the instigator, then the child should be configured (normally using _XmConfigureObject()), if the return is XtGeometryYes.