diff -r 15434e185476 -r d7a0cca9c876 open-src/lib/libXaw4/sun-src/Xaw3_1Sme.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/open-src/lib/libXaw4/sun-src/Xaw3_1Sme.c Wed Jul 15 16:27:02 2009 -0700 @@ -0,0 +1,238 @@ +#if ( !defined(lint) && !defined(SABER) ) +static char Xrcsid[] = "$XConsortium: Sme.c,v 1.6 89/12/11 15:20:07 kit Exp $"; +#endif + +/* + * Copyright 1989 Massachusetts Institute of Technology + * + * 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, and that the name of M.I.T. not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. M.I.T. makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + * + * M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL M.I.T. + * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * Sme.c - Source code for the generic menu entry + * + * Date: September 26, 1989 + * + * By: Chris D. Peterson + * MIT X Consortium + * kit@expo.lcs.mit.edu + */ + +#include +#include +#include + +#include <./Xaw3_1XawInit.h> +#include <./Xaw3_1SmeP.h> +#include <./Xaw3_1Cardinals.h> + +#define offset(field) XtOffset(SmeObject, sme.field) +static XtResource resources[] = { + {XtNcallback, XtCCallback, XtRCallback, sizeof(caddr_t), + offset(callbacks), XtRCallback, (caddr_t)NULL}, +}; +#undef offset + +/* + * Semi Public function definitions. + */ + +static void Unhighlight(), Highlight(), Notify(), ClassPartInitialize(); +static void Initialize(); +static XtGeometryResult QueryGeometry(); + +#define SUPERCLASS (&rectObjClassRec) + +SmeClassRec smeClassRec = { + { + /* superclass */ (WidgetClass) SUPERCLASS, + /* class_name */ "Sme", + /* size */ sizeof(SmeRec), + /* class_initialize */ XawInitializeWidgetSet, + /* class_part_initialize*/ ClassPartInitialize, + /* Class init'ed */ FALSE, + /* initialize */ Initialize, + /* initialize_hook */ NULL, + /* realize */ NULL, + /* actions */ NULL, + /* num_actions */ ZERO, + /* resources */ resources, + /* resource_count */ XtNumber(resources), + /* xrm_class */ NULLQUARK, + /* compress_motion */ FALSE, + /* compress_exposure */ FALSE, + /* compress_enterleave*/ FALSE, + /* visible_interest */ FALSE, + /* destroy */ NULL, + /* resize */ NULL, + /* expose */ NULL, + /* set_values */ NULL, + /* set_values_hook */ NULL, + /* set_values_almost */ XtInheritSetValuesAlmost, + /* get_values_hook */ NULL, + /* accept_focus */ NULL, + /* intrinsics version */ XtVersion, + /* callback offsets */ NULL, + /* tm_table */ NULL, + /* query_geometry */ QueryGeometry, + /* display_accelerator*/ NULL, + /* extension */ NULL + },{ + /* Simple Menu Entry Fields */ + + /* highlight */ Highlight, + /* unhighlight */ Unhighlight, + /* notify */ Notify, + /* extension */ NULL + } +}; + +WidgetClass smeObjectClass = (WidgetClass) &smeClassRec; + +/************************************************************ + * + * Semi-Public Functions. + * + ************************************************************/ + +/* Function Name: ClassPartInitialize + * Description: handles inheritance of class functions. + * Arguments: class - the widget classs of this widget. + * Returns: none. + */ + +static void +ClassPartInitialize(class) +WidgetClass class; +{ + SmeObjectClass m_ent, superC; + + m_ent = (SmeObjectClass) class; + superC = (SmeObjectClass) m_ent->rect_class.superclass; + +/* + * We don't need to check for null super since we'll get to TextSink + * eventually. + */ + + if (m_ent->sme_class.highlight == XtInheritHighlight) + m_ent->sme_class.highlight = superC->sme_class.highlight; + + if (m_ent->sme_class.unhighlight == XtInheritUnhighlight) + m_ent->sme_class.unhighlight = superC->sme_class.unhighlight; + + if (m_ent->sme_class.notify == XtInheritNotify) + m_ent->sme_class.notify = superC->sme_class.notify; +} + +/* Function Name: Initialize + * Description: Initializes the simple menu widget + * Arguments: request - the widget requested by the argument list. + * new - the new widget with both resource and non + * resource values. + * Returns: none. + * + * MENU ENTRIES CANNOT HAVE BORDERS. + */ + +/* ARGSUSED */ +static void +Initialize(request, new) +Widget request, new; +{ + SmeObject entry = (SmeObject) new; + + entry->rectangle.border_width = 0; +} + +/* Function Name: Highlight + * Description: The default highlight proceedure for menu entries. + * Arguments: w - the menu entry. + * Returns: none. + */ + +/* ARGSUSED */ +static void +Highlight(w) +Widget w; +{ +/* This space intentionally left blank. */ +} + +/* Function Name: Unhighlight + * Description: The default unhighlight proceedure for menu entries. + * Arguments: w - the menu entry. + * Returns: none. + */ + +/* ARGSUSED */ +static void +Unhighlight(w) +Widget w; +{ +/* This space intentionally left blank. */ +} + +/* Function Name: Notify + * Description: calls the callback proceedures for this entry. + * Arguments: w - the menu entry. + * Returns: none. + */ + +static void +Notify(w) +Widget w; +{ + XtCallCallbacks(w, XtNcallback, NULL); +} + +/* Function Name: QueryGeometry. + * Description: Returns the preferred geometry for this widget. + * Arguments: w - the menu entry object. + * itended, return - the intended and return geometry info. + * Returns: A Geometry Result. + * + * See the Intrinsics manual for details on what this function is for. + * + * I just return the height and a width of 1. + */ + +static XtGeometryResult +QueryGeometry(w, intended, return_val) +Widget w; +XtWidgetGeometry *intended, *return_val; +{ + SmeObject entry = (SmeObject) w; + Dimension width; + XtGeometryResult ret_val = XtGeometryYes; + XtGeometryMask mode = intended->request_mode; + + width = 1; /* we can be really small. */ + + if ( ((mode & CWWidth) && (intended->width != width)) || + !(mode & CWWidth) ) { + return_val->request_mode |= CWWidth; + return_val->width = width; + mode = return_val->request_mode; + + if ( (mode & CWWidth) && (width == entry->rectangle.width) ) + return(XtGeometryNo); + return(XtGeometryAlmost); + } + return(ret_val); +}