#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 <stdio.h>
#include <X11/IntrinsicP.h>
#include <X11/StringDefs.h>
#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);
}