next up previous contents index
Next: 4. Miscellaneous Functions Up: 4. The GeoUtils Functions Previous: 4. Applying the Changes   Contents   Index

3. The Method Functions

The method functions basically implement most of the behavior for certain Xt required methods; the GeoUtils provide default implementations for set_values(), query_geometry(), and geometry_manager().

_XmBulletinBoardSizeUpdate_XmHandleSizeUpdateThe set_values() case (really, the implementation of _XmBulletinBoardSizeUpdate() - see the section on BulletinBoard set_values()) is handled by _XmHandleSizeUpdate(). This function is much like the change_managed() method in BulletinBoard (see the relevant section for details).


void
_XmHandleSizeUpdate(Widget wid, unsigned char policy,
                    XmGeoCreateProc createMatrix);

The query_geometry() method is handled by the following function. Essentially, this function implements the geometry calculation without doing the layout common to the other methods.

_XmHandleQueryGeometry


XtGeometryResult
_XmHandleQueryGeometry(Widget wid,
                       XtWidgetGeometry *intended,
                       XtWidgetGeometry *desired, 
                       unsigned char policy,
                       XmGeoCreateProc createMatrix);

The next function handles the geometry_manager() method. It is truly a nasty function, and was very difficult to figure out. This is the only place in the entire GeoUtils functionality where the cache is used (and really, it's the only place where it needs to be used). There are some pretty good reasons for this - manager children tend to loop around XtMakeResizeRequest(), or XtMakeGeometryRequest(), until their parent says yes or no. By using a cache, you can eliminate at least one iteration of the negotiation (which is relatively expensive). I don't really think most readers of this document are interested in the gory details. If you are, reading through the code should give you the necessary information.

_XmHandleGeometryManager


XtGeometryResult
_XmHandleGeometryManager(Widget wid, Widget instigator,
                         XtWidgetGeometry *desired, 
                         XtWidgetGeometry *allowed,
                         unsigned char policy, 
                         XmGeoMatrix *cachePtr,
                         XmGeoCreateProc createMatrix);

These next two functions do most of the default behavior for the BulletinBoard, when the widget class does not use the GeoUtils (unless, of course, the subclass overrides them).

This first function is invoked when a parent queries a BulletinBoard widget for its prefered size.

_XmGMHandleQueryGeometry


XtGeometryResult
_XmGMHandleQueryGeometry(Widget w,
                         XtWidgetGeometry *proposed, XtWidgetGeometry *answer,
                         Dimension margin_width, Dimension margin_height,
                         unsigned char resize_policy)

The second function is invoked when a child queries a BulletinBoard parent for a resize.

_XmGMHandleGeometryManager


XtGeometryResult
_XmGMHandleGeometryManager(Widget w, Widget instigator, 
                           XtWidgetGeometry *desired,
                           XtWidgetGeometry *allowed,
                           Dimension margin_width, Dimension margin_height,
                           unsigned char resize_policy, Boolean allow_overlap)


next up previous contents index
Next: 4. Miscellaneous Functions Up: 4. The GeoUtils Functions Previous: 4. Applying the Changes   Contents   Index
Danny Backx
2000-12-13