aboutsummaryrefslogtreecommitdiff
path: root/libXaw/src/Porthole.c
diff options
context:
space:
mode:
Diffstat (limited to 'libXaw/src/Porthole.c')
-rw-r--r--libXaw/src/Porthole.c754
1 files changed, 376 insertions, 378 deletions
diff --git a/libXaw/src/Porthole.c b/libXaw/src/Porthole.c
index 3bf161592..082e98a12 100644
--- a/libXaw/src/Porthole.c
+++ b/libXaw/src/Porthole.c
@@ -1,378 +1,376 @@
-/*
- * $Xorg: Porthole.c,v 1.4 2001/02/09 02:03:45 xorgcvs Exp $
- *
-Copyright 1990, 1994, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
- *
- * Author: Jim Fulton, MIT X Consortium
- *
- * This widget is a trivial clipping widget. It is typically used with a
- * panner or scrollbar to navigate.
- */
-/* $XFree86: xc/lib/Xaw/Porthole.c,v 1.6 2001/01/17 19:42:29 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xmu/Misc.h>
-#include <X11/Xaw/PortholeP.h>
-#include <X11/Xaw/XawInit.h>
-#include "Private.h"
-
-/*
- * Class Methods
- */
-static void XawPortholeChangeManaged(Widget);
-static XtGeometryResult XawPortholeGeometryManager(Widget, XtWidgetGeometry*,
- XtWidgetGeometry*);
-static XtGeometryResult XawPortholeQueryGeometry(Widget, XtWidgetGeometry*,
- XtWidgetGeometry*);
-static void XawPortholeRealize(Widget, Mask*, XSetWindowAttributes*);
-static void XawPortholeResize(Widget);
-
-/*
- * Prototypes
- */
-static Widget find_child(PortholeWidget);
-static void layout_child(PortholeWidget, Widget, XtWidgetGeometry*,
- Position*, Position*, Dimension*, Dimension*);
-static void SendReport(PortholeWidget, unsigned int);
-
-/*
- * Initialization
- */
-#define offset(field) XtOffsetOf(PortholeRec, porthole.field)
-static XtResource resources[] = {
- {
- XtNreportCallback,
- XtCReportCallback,
- XtRCallback,
- sizeof(XtPointer),
- offset(report_callbacks),
- XtRCallback,
- NULL
- },
-};
-#undef offset
-
-#define Superclass (&compositeClassRec)
-PortholeClassRec portholeClassRec = {
- /* core */
- {
- (WidgetClass)Superclass, /* superclass */
- "Porthole", /* class_name */
- sizeof(PortholeRec), /* widget_size */
- XawInitializeWidgetSet, /* class_initialize */
- NULL, /* class_part_initialize */
- False, /* class_inited */
- NULL, /* initialize */
- NULL, /* initialize_hook */
- XawPortholeRealize, /* realize */
- NULL, /* actions */
- 0, /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- True, /* compress_motion */
- True, /* compress_exposure */
- True, /* compress_enterleave */
- False, /* visible_interest */
- NULL, /* destroy */
- XawPortholeResize, /* resize */
- NULL, /* expose */
- NULL, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- NULL, /* tm_table */
- XawPortholeQueryGeometry, /* query_geometry */
- XtInheritDisplayAccelerator, /* display_accelerator */
- NULL, /* extension */
- },
- /* composite */
- {
- XawPortholeGeometryManager, /* geometry_manager */
- XawPortholeChangeManaged, /* change_managed */
- XtInheritInsertChild, /* insert_child */
- XtInheritDeleteChild, /* delete_child */
- NULL, /* extension */
- },
- { /* porthole */
- NULL, /* extension */
- },
-};
-
-WidgetClass portholeWidgetClass = (WidgetClass)&portholeClassRec;
-
-/*
- * Implementation
- */
-static Widget
-find_child(PortholeWidget pw)
-{
- Widget *children;
- unsigned int i;
-
- /*
- * Find the managed child on which we should operate. Ignore multiple
- * managed children
- */
- for (i = 0, children = pw->composite.children;
- i < pw->composite.num_children; i++, children++)
- if (XtIsManaged(*children))
- return (*children);
-
- return (NULL);
-}
-
-static void
-SendReport(PortholeWidget pw, unsigned int changed)
-{
- Widget child = find_child(pw);
-
- if (pw->porthole.report_callbacks && child) {
- XawPannerReport prep;
-
- prep.changed = changed;
- prep.slider_x = -XtX(child); /* porthole is "inner" */
- prep.slider_y = -XtY(child); /* child is outer since it is larger */
- prep.slider_width = XtWidth(pw);
- prep.slider_height = XtHeight(pw);
- prep.canvas_width = XtWidth(child);
- prep.canvas_height = XtHeight(child);
- XtCallCallbackList((Widget)pw, pw->porthole.report_callbacks,
- (XtPointer)&prep);
- }
-}
-
-static void
-layout_child(PortholeWidget pw, Widget child, XtWidgetGeometry *geomp,
- Position *xp, Position *yp, Dimension *widthp, Dimension *heightp)
-{
- Position minx, miny;
-
- *xp = XtX(child); /* default to current values */
- *yp = XtY(child);
- *widthp = XtWidth(child);
- *heightp = XtHeight(child);
- if (geomp) { /* mix in any requested changes */
- if (geomp->request_mode & CWX)
- *xp = geomp->x;
- if (geomp->request_mode & CWY)
- *yp = geomp->y;
- if (geomp->request_mode & CWWidth)
- *widthp = geomp->width;
- if (geomp->request_mode & CWHeight)
- *heightp = geomp->height;
- }
-
- /*
- * Make sure that the child is at least as large as the porthole; there
- * is no maximum size
- */
- if (*widthp < XtWidth(pw)) *widthp = XtWidth(pw);
- if (*heightp < XtHeight(pw)) *heightp = XtHeight(pw);
-
- /*
- * Make sure that the child is still on the screen. Note that this must
- * be done *after* the size computation so that we know where to put it
- */
- minx = (Position)XtWidth(pw) - (Position)*widthp;
- miny = (Position)XtHeight(pw) - (Position)*heightp;
-
- if (*xp < minx)
- *xp = minx;
- if (*yp < miny)
- *yp = miny;
-
- if (*xp > 0)
- *xp = 0;
- if (*yp > 0)
- *yp = 0;
-}
-
-static void
-XawPortholeRealize(Widget gw, Mask *valueMask, XSetWindowAttributes *attr)
-{
- attr->bit_gravity = NorthWestGravity;
- *valueMask |= CWBitGravity;
-
- if (XtWidth(gw) < 1)
- XtWidth(gw) = 1;
- if (XtHeight(gw) < 1)
- XtHeight(gw) = 1;
- (*portholeWidgetClass->core_class.superclass->core_class.realize)
- (gw, valueMask, attr);
-}
-
-static void
-XawPortholeResize(Widget gw)
-{
- PortholeWidget pw = (PortholeWidget)gw;
- Widget child = find_child(pw);
-
- /*
- * If we have a child, we need to make sure that it is at least as big
- * as we are and in the right place
- */
- if (child) {
- Position x, y;
- Dimension width, height;
-
- layout_child(pw, child, NULL, &x, &y, &width, &height);
- XtConfigureWidget(child, x, y, width, height, 0);
- }
-
- SendReport(pw, XawPRCanvasWidth | XawPRCanvasHeight);
-}
-
-static XtGeometryResult
-XawPortholeQueryGeometry(Widget gw, XtWidgetGeometry *intended,
- XtWidgetGeometry *preferred)
-{
- PortholeWidget pw = (PortholeWidget)gw;
- Widget child = find_child(pw);
-
- if (child) {
-#define SIZEONLY (CWWidth | CWHeight)
- preferred->request_mode = SIZEONLY;
- preferred->width = XtWidth(child);
- preferred->height = XtHeight(child);
-
- if ((intended->request_mode & SIZEONLY) == SIZEONLY &&
- intended->width == preferred->width &&
- intended->height == preferred->height)
- return (XtGeometryYes);
- else if (preferred->width == XtWidth(pw) &&
- preferred->height == XtHeight(pw))
- return (XtGeometryNo);
-
- return (XtGeometryAlmost);
-#undef SIZEONLY
- }
-
- return (XtGeometryNo);
-}
-
-static XtGeometryResult
-XawPortholeGeometryManager(Widget w, XtWidgetGeometry *req,
- XtWidgetGeometry *reply)
-{
- PortholeWidget pw = (PortholeWidget) w->core.parent;
- Widget child = find_child(pw);
- Bool okay = True;
-
- if (child != w)
- return (XtGeometryNo);
-
- *reply = *req; /* assume we'll grant everything */
-
- if ((req->request_mode & CWBorderWidth) && req->border_width != 0) {
- reply->border_width = 0;
- okay = False;
- }
-
- layout_child(pw, child, req, &reply->x, &reply->y,
- &reply->width, &reply->height);
-
- if ((req->request_mode & CWX) && req->x != reply->x)
- okay = False;
- if ((req->request_mode & CWY) && req->x != reply->x)
- okay = False;
- if ((req->request_mode & CWWidth) && req->width != reply->width)
- okay = False;
- if ((req->request_mode & CWHeight) && req->height != reply->height)
- okay = False;
-
- /*
- * If we failed on anything, simply return without touching widget
- */
- if (!okay)
- return (XtGeometryAlmost);
-
- /*
- * If not just doing a query, update widget and send report. Note that
- * we will often set fields that weren't requested because we want to keep
- * the child visible
- */
- if (!(req->request_mode & XtCWQueryOnly)) {
- unsigned int changed = 0;
-
- if (XtX(child) != reply->x) {
- changed |= XawPRSliderX;
- XtX(child) = reply->x;
- }
- if (XtY(child) != reply->y) {
- changed |= XawPRSliderY;
- XtY(child) = reply->y;
- }
- if (XtWidth(child) != reply->width) {
- changed |= XawPRSliderWidth;
- XtWidth(child) = reply->width;
- }
- if (XtHeight(child) != reply->height) {
- changed |= XawPRSliderHeight;
- XtHeight(child) = reply->height;
- }
- if (changed)
- SendReport(pw, changed);
- }
-
- return (XtGeometryYes); /* success! */
-}
-
-static void
-XawPortholeChangeManaged(Widget gw)
-{
- PortholeWidget pw = (PortholeWidget)gw;
- Widget child = find_child (pw); /* ignore extra children */
-
- if (child) {
- if (!XtIsRealized (gw)) {
- XtWidgetGeometry geom, retgeom;
-
- geom.request_mode = 0;
- if (XtWidth(pw) == 0) {
- geom.width = XtWidth(child);
- geom.request_mode |= CWWidth;
- }
- if (XtHeight(pw) == 0) {
- geom.height = XtHeight(child);
- geom.request_mode |= CWHeight;
- }
- if (geom.request_mode &&
- XtMakeGeometryRequest (gw, &geom, &retgeom)
- == XtGeometryAlmost)
- (void)XtMakeGeometryRequest(gw, &retgeom, NULL);
- }
-
- XtResizeWidget(child, Max(XtWidth(child), XtWidth(pw)),
- Max(XtHeight(child), XtHeight(pw)), 0);
-
- SendReport(pw, XawPRAll);
- }
-}
+/*
+ *
+Copyright 1990, 1994, 1998 The Open Group
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from The Open Group.
+ *
+ * Author: Jim Fulton, MIT X Consortium
+ *
+ * This widget is a trivial clipping widget. It is typically used with a
+ * panner or scrollbar to navigate.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include <X11/Xmu/Misc.h>
+#include <X11/Xaw/PortholeP.h>
+#include <X11/Xaw/XawInit.h>
+#include "Private.h"
+
+/*
+ * Class Methods
+ */
+static void XawPortholeChangeManaged(Widget);
+static XtGeometryResult XawPortholeGeometryManager(Widget, XtWidgetGeometry*,
+ XtWidgetGeometry*);
+static XtGeometryResult XawPortholeQueryGeometry(Widget, XtWidgetGeometry*,
+ XtWidgetGeometry*);
+static void XawPortholeRealize(Widget, Mask*, XSetWindowAttributes*);
+static void XawPortholeResize(Widget);
+
+/*
+ * Prototypes
+ */
+static Widget find_child(PortholeWidget);
+static void layout_child(PortholeWidget, Widget, XtWidgetGeometry*,
+ Position*, Position*, Dimension*, Dimension*);
+static void SendReport(PortholeWidget, unsigned int);
+
+/*
+ * Initialization
+ */
+#define offset(field) XtOffsetOf(PortholeRec, porthole.field)
+static XtResource resources[] = {
+ {
+ XtNreportCallback,
+ XtCReportCallback,
+ XtRCallback,
+ sizeof(XtPointer),
+ offset(report_callbacks),
+ XtRCallback,
+ NULL
+ },
+};
+#undef offset
+
+#define Superclass (&compositeClassRec)
+PortholeClassRec portholeClassRec = {
+ /* core */
+ {
+ (WidgetClass)Superclass, /* superclass */
+ "Porthole", /* class_name */
+ sizeof(PortholeRec), /* widget_size */
+ XawInitializeWidgetSet, /* class_initialize */
+ NULL, /* class_part_initialize */
+ False, /* class_inited */
+ NULL, /* initialize */
+ NULL, /* initialize_hook */
+ XawPortholeRealize, /* realize */
+ NULL, /* actions */
+ 0, /* num_actions */
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ True, /* compress_motion */
+ True, /* compress_exposure */
+ True, /* compress_enterleave */
+ False, /* visible_interest */
+ NULL, /* destroy */
+ XawPortholeResize, /* resize */
+ NULL, /* expose */
+ NULL, /* set_values */
+ NULL, /* set_values_hook */
+ XtInheritSetValuesAlmost, /* set_values_almost */
+ NULL, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ NULL, /* tm_table */
+ XawPortholeQueryGeometry, /* query_geometry */
+ XtInheritDisplayAccelerator, /* display_accelerator */
+ NULL, /* extension */
+ },
+ /* composite */
+ {
+ XawPortholeGeometryManager, /* geometry_manager */
+ XawPortholeChangeManaged, /* change_managed */
+ XtInheritInsertChild, /* insert_child */
+ XtInheritDeleteChild, /* delete_child */
+ NULL, /* extension */
+ },
+ { /* porthole */
+ NULL, /* extension */
+ },
+};
+
+WidgetClass portholeWidgetClass = (WidgetClass)&portholeClassRec;
+
+/*
+ * Implementation
+ */
+static Widget
+find_child(PortholeWidget pw)
+{
+ Widget *children;
+ unsigned int i;
+
+ /*
+ * Find the managed child on which we should operate. Ignore multiple
+ * managed children
+ */
+ for (i = 0, children = pw->composite.children;
+ i < pw->composite.num_children; i++, children++)
+ if (XtIsManaged(*children))
+ return (*children);
+
+ return (NULL);
+}
+
+static void
+SendReport(PortholeWidget pw, unsigned int changed)
+{
+ Widget child = find_child(pw);
+
+ if (pw->porthole.report_callbacks && child) {
+ XawPannerReport prep;
+
+ prep.changed = changed;
+ prep.slider_x = -XtX(child); /* porthole is "inner" */
+ prep.slider_y = -XtY(child); /* child is outer since it is larger */
+ prep.slider_width = XtWidth(pw);
+ prep.slider_height = XtHeight(pw);
+ prep.canvas_width = XtWidth(child);
+ prep.canvas_height = XtHeight(child);
+ XtCallCallbackList((Widget)pw, pw->porthole.report_callbacks,
+ (XtPointer)&prep);
+ }
+}
+
+static void
+layout_child(PortholeWidget pw, Widget child, XtWidgetGeometry *geomp,
+ Position *xp, Position *yp, Dimension *widthp, Dimension *heightp)
+{
+ Position minx, miny;
+
+ *xp = XtX(child); /* default to current values */
+ *yp = XtY(child);
+ *widthp = XtWidth(child);
+ *heightp = XtHeight(child);
+ if (geomp) { /* mix in any requested changes */
+ if (geomp->request_mode & CWX)
+ *xp = geomp->x;
+ if (geomp->request_mode & CWY)
+ *yp = geomp->y;
+ if (geomp->request_mode & CWWidth)
+ *widthp = geomp->width;
+ if (geomp->request_mode & CWHeight)
+ *heightp = geomp->height;
+ }
+
+ /*
+ * Make sure that the child is at least as large as the porthole; there
+ * is no maximum size
+ */
+ if (*widthp < XtWidth(pw)) *widthp = XtWidth(pw);
+ if (*heightp < XtHeight(pw)) *heightp = XtHeight(pw);
+
+ /*
+ * Make sure that the child is still on the screen. Note that this must
+ * be done *after* the size computation so that we know where to put it
+ */
+ minx = (Position)XtWidth(pw) - (Position)*widthp;
+ miny = (Position)XtHeight(pw) - (Position)*heightp;
+
+ if (*xp < minx)
+ *xp = minx;
+ if (*yp < miny)
+ *yp = miny;
+
+ if (*xp > 0)
+ *xp = 0;
+ if (*yp > 0)
+ *yp = 0;
+}
+
+static void
+XawPortholeRealize(Widget gw, Mask *valueMask, XSetWindowAttributes *attr)
+{
+ attr->bit_gravity = NorthWestGravity;
+ *valueMask |= CWBitGravity;
+
+ if (XtWidth(gw) < 1)
+ XtWidth(gw) = 1;
+ if (XtHeight(gw) < 1)
+ XtHeight(gw) = 1;
+ (*portholeWidgetClass->core_class.superclass->core_class.realize)
+ (gw, valueMask, attr);
+}
+
+static void
+XawPortholeResize(Widget gw)
+{
+ PortholeWidget pw = (PortholeWidget)gw;
+ Widget child = find_child(pw);
+
+ /*
+ * If we have a child, we need to make sure that it is at least as big
+ * as we are and in the right place
+ */
+ if (child) {
+ Position x, y;
+ Dimension width, height;
+
+ layout_child(pw, child, NULL, &x, &y, &width, &height);
+ XtConfigureWidget(child, x, y, width, height, 0);
+ }
+
+ SendReport(pw, XawPRCanvasWidth | XawPRCanvasHeight);
+}
+
+static XtGeometryResult
+XawPortholeQueryGeometry(Widget gw, XtWidgetGeometry *intended,
+ XtWidgetGeometry *preferred)
+{
+ PortholeWidget pw = (PortholeWidget)gw;
+ Widget child = find_child(pw);
+
+ if (child) {
+#define SIZEONLY (CWWidth | CWHeight)
+ preferred->request_mode = SIZEONLY;
+ preferred->width = XtWidth(child);
+ preferred->height = XtHeight(child);
+
+ if ((intended->request_mode & SIZEONLY) == SIZEONLY &&
+ intended->width == preferred->width &&
+ intended->height == preferred->height)
+ return (XtGeometryYes);
+ else if (preferred->width == XtWidth(pw) &&
+ preferred->height == XtHeight(pw))
+ return (XtGeometryNo);
+
+ return (XtGeometryAlmost);
+#undef SIZEONLY
+ }
+
+ return (XtGeometryNo);
+}
+
+static XtGeometryResult
+XawPortholeGeometryManager(Widget w, XtWidgetGeometry *req,
+ XtWidgetGeometry *reply)
+{
+ PortholeWidget pw = (PortholeWidget) w->core.parent;
+ Widget child = find_child(pw);
+ Bool okay = True;
+
+ if (child != w)
+ return (XtGeometryNo);
+
+ *reply = *req; /* assume we'll grant everything */
+
+ if ((req->request_mode & CWBorderWidth) && req->border_width != 0) {
+ reply->border_width = 0;
+ okay = False;
+ }
+
+ layout_child(pw, child, req, &reply->x, &reply->y,
+ &reply->width, &reply->height);
+
+ if ((req->request_mode & CWX) && req->x != reply->x)
+ okay = False;
+ if ((req->request_mode & CWY) && req->x != reply->x)
+ okay = False;
+ if ((req->request_mode & CWWidth) && req->width != reply->width)
+ okay = False;
+ if ((req->request_mode & CWHeight) && req->height != reply->height)
+ okay = False;
+
+ /*
+ * If we failed on anything, simply return without touching widget
+ */
+ if (!okay)
+ return (XtGeometryAlmost);
+
+ /*
+ * If not just doing a query, update widget and send report. Note that
+ * we will often set fields that weren't requested because we want to keep
+ * the child visible
+ */
+ if (!(req->request_mode & XtCWQueryOnly)) {
+ unsigned int changed = 0;
+
+ if (XtX(child) != reply->x) {
+ changed |= XawPRSliderX;
+ XtX(child) = reply->x;
+ }
+ if (XtY(child) != reply->y) {
+ changed |= XawPRSliderY;
+ XtY(child) = reply->y;
+ }
+ if (XtWidth(child) != reply->width) {
+ changed |= XawPRSliderWidth;
+ XtWidth(child) = reply->width;
+ }
+ if (XtHeight(child) != reply->height) {
+ changed |= XawPRSliderHeight;
+ XtHeight(child) = reply->height;
+ }
+ if (changed)
+ SendReport(pw, changed);
+ }
+
+ return (XtGeometryYes); /* success! */
+}
+
+static void
+XawPortholeChangeManaged(Widget gw)
+{
+ PortholeWidget pw = (PortholeWidget)gw;
+ Widget child = find_child (pw); /* ignore extra children */
+
+ if (child) {
+ if (!XtIsRealized (gw)) {
+ XtWidgetGeometry geom, retgeom;
+
+ geom.request_mode = 0;
+ if (XtWidth(pw) == 0) {
+ geom.width = XtWidth(child);
+ geom.request_mode |= CWWidth;
+ }
+ if (XtHeight(pw) == 0) {
+ geom.height = XtHeight(child);
+ geom.request_mode |= CWHeight;
+ }
+ if (geom.request_mode &&
+ XtMakeGeometryRequest (gw, &geom, &retgeom)
+ == XtGeometryAlmost)
+ (void)XtMakeGeometryRequest(gw, &retgeom, NULL);
+ }
+
+ XtResizeWidget(child, Max(XtWidth(child), XtWidth(pw)),
+ Max(XtHeight(child), XtHeight(pw)), 0);
+
+ SendReport(pw, XawPRAll);
+ }
+}