XtMakeGeometryRequest()XtMakeGeometryRequest()NameXtMakeGeometryRequest - request parent to change child's geometry.
Synopsis
XtGeometryResult XtMakeGeometryRequest(w, request, compromise_return)
Widget w;
XtWidgetGeometry *request;
XtWidgetGeometry *compromise_return;
Inputs
w Specifies the child widget that is making the request. Must
be of class RectObj or any subclass thereof.
request Specifies the desired widget geometry (size, position, border
width, and stacking order).
Outputs
compromise_return
Returns a compromise geometry when the function returns XtGe‐
ometryAlmost. May be NULL if the requesting widget is not
interested in handling XtGeometryAlmost.
Returns
A response to the request: XtGeometryYes, XtGeometryNo or XtGeometryAl‐
most.
DescriptionXtMakeGeometryRequest() requests the parent of w to change w's geometry
to that specified in request. The request_mode field of request speci‐
fies which elements of its geometry the object is asking to have
changed, and the remaining fields of this structure specify the values
for each of those elements. If a bit is not set in request_mode, then
XtMakeGeometryRequest() may change that element of the geometry in its
effort to satisfy the requested changes.
There are three possible return values from this function, with the
following meanings:
XtGeometryYes
The request was granted and has been performed (unless request_mode
contained the XtCWQueryOnly bit). The object's internal core geome‐
try fields have been updated and, if it is realized, the window has
been correctly configured for the new geometry. The contents of com‐
promise_return are undefined. w's resize() method may or may not
have been called. XtMakeGeometryRequest() does not call that method,
but some parent widgets will call it in the process of satisfying the
geometry request. The object should assume that it has not been
called and perform any necessary resize calculations.
XtGeometryNo
The request was denied. The contents of compromise_return are unde‐
fined.
XtGeometryAlmost
The request could not be satisfied exactly, but the object's parent
has proposed a compromise geometry in compromise_return. If these
compromise values are immediately used in another call to XtMakeGeom‐
etryRequest() the request is guaranteed to succeed.
See the "Background" section below for a detailed listing of the steps
followed by XtMakeGeometryRequest().
UsageXtMakeGeometryRequest() should only be used in widget code by widgets
which would like to change their own size. This is the only way that a
widget is allowed to change its own size.
Applications that want to set a widget size should use XtSetValues() on
the various geometry resources of a widget.
A widget that wants to change the geometry of one of its children
should use XtConfigureWidget(), XtMoveWidget() or XtResizeWidget().
BackgroundXtMakeGeometryRequest() performs the following tasks:
· If the widget is unmanaged or the widget's parent is not realized,
it makes the changes to the widget's preferred geometry and returns
XtGeometryYes.
· If the parent is not a subclass of compositeWidgetClass or the par‐
ent's geometry_manager() method (the function pointed to by the
geometry_manager() field in the widget class record) is NULL, it
issues an error.
· If the widget's being_destroyed field is True, it returns XtGeome‐
tryNo.
· If the widget x, y, width, height, and border_width fields are
already equal to the requested values, it returns XtGeometryYes;
otherwise, it calls the parent's geometry_manager() method with the
given parameters.
· If the parent's geometry manager returns XtGeometryYes, if XtCW‐
QueryOnly is not set in request_mode (see Structures below for
details), and if the widget is realized, then XtMakeGeometryRe‐
quest() calls the Xlib XConfigureWindow() function to adjust the
widget's window (setting its size, location, and stacking order as
appropriate).
· If the geometry manager returns XtGeometryDone, the change has been
approved and actually has been done. In this case, XtMakeGeome‐
tryRequest() does no configuring and returns XtGeometryYes.
XtMakeGeometryRequest() never returns XtGeometryDone.
· Otherwise, XtMakeGeometryRequest() returns the resulting value from
the parent's geometry manager.
Children of non-Composite widgets are always unmanaged; thus, XtMakeGe‐
ometryRequest() always returns XtGeometryYes when called by a child of
a non-Composite widget.
Structures
The return codes from geometry managers are:
typedef enum _XtGeometryResult {
XtGeometryYes, /* Request accepted */
XtGeometryNo, /* Request denied */
XtGeometryAlmost,/* Request denied but willing to take reply */
XtGeometryDone /* never returned by XtMakeGeometryRequest() */
} XtGeometryResult;
The XtWidgetGeometry structure is similar to but not identical to the
corresponding Xlib structure:
typedef unsigned long XtGeometryMask;
typedef struct {
XtGeometryMask request_mode;
Position x, y;
Dimension width, height;
Dimension border_width;
Widget sibling;
int stack_mode;
} XtWidgetGeometry;
XtMakeGeometryRequest(), like the Xlib XConfigureWindow() function,
uses request_mode to determine which fields in the XtWidgetGeometry
structure you want to specify. The request_mode definitions are from
<X11/X.h>:
#define CWX(1<<0)
#define CWY(1<<1)
#define CWWidth(1<<2)
#define CWHeight(1<<3)
#define CWBorderWidth(1<<4)
#define CWSibling(1<<5)
#define CWStackMode(1<<6)
The Xt Intrinsics also support the following value:
#define XtCWQueryOnly (1<<7)
XtCWQueryOnly indicates that the corresponding geometry request is only
a query as to what would happen if this geometry request were made and
that no widgets should actually be changed.
The stack_mode definitions are from <X11/X.h>:
#define Above0
#define Below1
#define TopIf2
#define BottomIf3
#define Opposite4
The Intrinsics also support the following value:
#define XtSMDontChange5
XtSMDontChange indicates that the widget wants its current stacking
order preserved. For precise definitions of Above, Below, TopIf, Bot‐
tomIf, and Opposite, see the reference page for XConfigureWindow() in
Volume Two, Xlib Reference Manual.
See AlsoXtConfigureWidget(1), XtMakeResizeRequest(1), XtMoveWidget(1), XtRe‐
sizeWidget(1),
geometry_manager(4).
Xt - Geometry Management XtMakeGeometryRequest()