diff options
Diffstat (limited to 'src/Sme.c')
-rw-r--r-- | src/Sme.c | 246 |
1 files changed, 246 insertions, 0 deletions
diff --git a/src/Sme.c b/src/Sme.c new file mode 100644 index 0000000..f3b34dd --- /dev/null +++ b/src/Sme.c @@ -0,0 +1,246 @@ +/* $XConsortium: Sme.c,v 1.12 94/04/17 20:12:48 kaleb Exp $ */ + +/* +Copyright (c) 1989, 1994 X Consortium + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +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 +X CONSORTIUM 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 X Consortium 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 X Consortium. + */ + +/* + * 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 "Xaw3dP.h" +#include <stdio.h> +#include <X11/IntrinsicP.h> +#include <X11/StringDefs.h> +#include <X11/Xaw3d/XawInit.h> +#include <X11/Xaw3d/SmeP.h> +#include <X11/Xaw3d/Cardinals.h> + +#define offset(field) XtOffsetOf(SmeRec, sme.field) +static XtResource resources[] = { + {XtNcallback, XtCCallback, XtRCallback, sizeof(XtPointer), + offset(callbacks), XtRCallback, (XtPointer)NULL}, +#ifdef XAW_INTERNATIONALIZATION + {XtNinternational, XtCInternational, XtRBoolean, sizeof(Boolean), + offset(international), XtRImmediate, (XtPointer) FALSE}, +#endif +}; +#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, args, num_args) +Widget request, new; +ArgList args; +Cardinal *num_args; +{ + 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, (XtPointer)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); +} |