XmGeoMatrixRecXmGEO_ROW_MAJORXmGEO_COLUMN_MAJORXmGeoArrangeProcXmGeoExceptProcXmGeoExtDestructorProcXmGeoSegmentFixUpProcThe layout of the GeoMatrix structure is as follows:
typedef struct _XmGeoMatrixRec { Widget composite; Widget instigator; XtWidgetGeometry instig_request; XtWidgetGeometry parent_request; XtWidgetGeometry *in_layout; XmKidGeometry boxes; /* there is a NULL pointer at the end of each row */ XmGeoMajorLayout layouts; Dimension margin_w; Dimension margin_h; Boolean stretch_boxes; Boolean uniform_border; Dimension border; Dimension max_major; Dimension boxed_minor; Dimension fill_minor; Dimension width; Dimension height; XmGeoExceptProc set_except; XmGeoExceptProc almost_except; XmGeoExceptProc no_geo_request; XtPointer extension; XmGeoExtDestructorProc ext_destructor; XmGeoArrangeProc arrange_boxes; unsigned char major_order; } XmGeoMatrixRec; typedef struct _XmGeoMatrixRec *XmGeoMatrix; typedef void (*XmGeoArrangeProc)(XmGeoMatrix matrix, Position x, Position y, Dimension *width_inout, Dimension *height_inout); typedef Boolean (*XmGeoExceptProc)(XmGeoMatrix matrix); typedef void (*XmGeoExtDestructorProc)(XtPointer extension); typedef void (*XmGeoSegmentFixUpProc)(XmGeoMatrix matrix, int command, XmGeoMajorLayout row_layout, XmKidGeometry kid_info); enum { XmGEO_ROW_MAJOR, XmGEO_COLUMN_MAJOR };
The GeoMatrix is the mother of all GeoUtils structures. In it, we have control information for how the layout is to be performed, info on each child, margin information, etc. Also, when you look at the GeoUtils, keep in mind that the developers intended for it to work both in row major and column major layout (i.e., up and down rows, and side to side columns). The comments in XmP.h indicate that they didn't get any further than row major layout, though. Column major layout hasn't even been implemented in M*TIF 2.0 - the comments are still there.
Let's look at each member: