749N/A/* $XConsortium: Sme.c,v 1.12 94/04/17 20:12:48 kaleb Exp $ */
749N/A
749N/A/*
749N/ACopyright (c) 1989, 1994 X Consortium
749N/A
749N/APermission is hereby granted, free of charge, to any person obtaining a copy
749N/Aof this software and associated documentation files (the "Software"), to deal
749N/Ain the Software without restriction, including without limitation the rights
749N/Ato use, copy, modify, merge, publish, distribute, sublicense, and/or sell
749N/Acopies of the Software, and to permit persons to whom the Software is
749N/Afurnished to do so, subject to the following conditions:
749N/A
749N/AThe above copyright notice and this permission notice shall be included in
749N/Aall copies or substantial portions of the Software.
749N/A
749N/ATHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
749N/AIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
749N/AFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
749N/AX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
749N/AAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
749N/ACONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
749N/A
749N/AExcept as contained in this notice, the name of the X Consortium shall not be
749N/Aused in advertising or otherwise to promote the sale, use or other dealings
749N/Ain this Software without prior written authorization from the X Consortium.
749N/A */
749N/A
749N/A/*
749N/A * Sme.c - Source code for the generic menu entry
749N/A *
749N/A * Date: September 26, 1989
749N/A *
749N/A * By: Chris D. Peterson
749N/A * MIT X Consortium
749N/A * kit@expo.lcs.mit.edu
749N/A */
749N/A
749N/A#include <stdio.h>
749N/A#include <X11/IntrinsicP.h>
749N/A#include <X11/StringDefs.h>
749N/A
749N/A#include <X11/Xaw/XawInit.h>
749N/A#include <X11/Xaw/SmeP.h>
749N/A#include <X11/Xaw/Cardinals.h>
749N/A
749N/A#define offset(field) XtOffsetOf(SmeRec, sme.field)
749N/Astatic XtResource resources[] = {
749N/A {XtNcallback, XtCCallback, XtRCallback, sizeof(XtPointer),
749N/A offset(callbacks), XtRCallback, (XtPointer)NULL},
749N/A {XtNinternational, XtCInternational, XtRBoolean, sizeof(Boolean),
749N/A offset(international), XtRImmediate, (XtPointer) FALSE},
749N/A};
749N/A#undef offset
749N/A
749N/A/*
749N/A * Semi Public function definitions.
749N/A */
749N/A
749N/Astatic void Unhighlight(), Highlight(), Notify(), ClassPartInitialize();
749N/Astatic void Initialize();
749N/Astatic XtGeometryResult QueryGeometry();
749N/A
749N/A#define SUPERCLASS (&rectObjClassRec)
749N/A
749N/ASmeClassRec smeClassRec = {
749N/A {
749N/A /* superclass */ (WidgetClass) SUPERCLASS,
749N/A /* class_name */ "Sme",
749N/A /* size */ sizeof(SmeRec),
749N/A /* class_initialize */ XawInitializeWidgetSet,
749N/A /* class_part_initialize*/ ClassPartInitialize,
749N/A /* Class init'ed */ FALSE,
749N/A /* initialize */ Initialize,
749N/A /* initialize_hook */ NULL,
749N/A /* realize */ NULL,
749N/A /* actions */ NULL,
749N/A /* num_actions */ ZERO,
749N/A /* resources */ resources,
749N/A /* resource_count */ XtNumber(resources),
749N/A /* xrm_class */ NULLQUARK,
749N/A /* compress_motion */ FALSE,
749N/A /* compress_exposure */ FALSE,
749N/A /* compress_enterleave*/ FALSE,
749N/A /* visible_interest */ FALSE,
749N/A /* destroy */ NULL,
749N/A /* resize */ NULL,
749N/A /* expose */ NULL,
749N/A /* set_values */ NULL,
749N/A /* set_values_hook */ NULL,
749N/A /* set_values_almost */ XtInheritSetValuesAlmost,
749N/A /* get_values_hook */ NULL,
749N/A /* accept_focus */ NULL,
749N/A /* intrinsics version */ XtVersion,
749N/A /* callback offsets */ NULL,
749N/A /* tm_table */ NULL,
749N/A /* query_geometry */ QueryGeometry,
749N/A /* display_accelerator*/ NULL,
749N/A /* extension */ NULL
749N/A },{
749N/A /* Simple Menu Entry Fields */
749N/A
749N/A /* highlight */ Highlight,
749N/A /* unhighlight */ Unhighlight,
749N/A /* notify */ Notify,
749N/A /* extension */ NULL
749N/A }
749N/A};
749N/A
749N/AWidgetClass smeObjectClass = (WidgetClass) &smeClassRec;
749N/A
749N/A/************************************************************
749N/A *
749N/A * Semi-Public Functions.
749N/A *
749N/A ************************************************************/
749N/A
749N/A/* Function Name: ClassPartInitialize
749N/A * Description: handles inheritance of class functions.
749N/A * Arguments: class - the widget classs of this widget.
749N/A * Returns: none.
749N/A */
749N/A
749N/Astatic void
749N/AClassPartInitialize(class)
749N/AWidgetClass class;
749N/A{
749N/A SmeObjectClass m_ent, superC;
749N/A
749N/A m_ent = (SmeObjectClass) class;
749N/A superC = (SmeObjectClass) m_ent->rect_class.superclass;
749N/A
749N/A/*
749N/A * We don't need to check for null super since we'll get to TextSink
749N/A * eventually.
749N/A */
749N/A
749N/A if (m_ent->sme_class.highlight == XtInheritHighlight)
749N/A m_ent->sme_class.highlight = superC->sme_class.highlight;
749N/A
749N/A if (m_ent->sme_class.unhighlight == XtInheritUnhighlight)
749N/A m_ent->sme_class.unhighlight = superC->sme_class.unhighlight;
749N/A
749N/A if (m_ent->sme_class.notify == XtInheritNotify)
749N/A m_ent->sme_class.notify = superC->sme_class.notify;
749N/A}
749N/A
749N/A/* Function Name: Initialize
749N/A * Description: Initializes the simple menu widget
749N/A * Arguments: request - the widget requested by the argument list.
749N/A * new - the new widget with both resource and non
749N/A * resource values.
749N/A * Returns: none.
749N/A *
749N/A * MENU ENTRIES CANNOT HAVE BORDERS.
749N/A */
749N/A
749N/A/* ARGSUSED */
749N/Astatic void
749N/AInitialize(request, new, args, num_args)
749N/AWidget request, new;
749N/AArgList args;
749N/ACardinal *num_args;
749N/A{
749N/A SmeObject entry = (SmeObject) new;
749N/A
749N/A entry->rectangle.border_width = 0;
749N/A}
749N/A
749N/A/* Function Name: Highlight
749N/A * Description: The default highlight proceedure for menu entries.
749N/A * Arguments: w - the menu entry.
749N/A * Returns: none.
749N/A */
749N/A
749N/A/* ARGSUSED */
749N/Astatic void
749N/AHighlight(w)
749N/AWidget w;
749N/A{
749N/A/* This space intentionally left blank. */
749N/A}
749N/A
749N/A/* Function Name: Unhighlight
749N/A * Description: The default unhighlight proceedure for menu entries.
749N/A * Arguments: w - the menu entry.
749N/A * Returns: none.
749N/A */
749N/A
749N/A/* ARGSUSED */
749N/Astatic void
749N/AUnhighlight(w)
749N/AWidget w;
749N/A{
749N/A/* This space intentionally left blank. */
749N/A}
749N/A
749N/A/* Function Name: Notify
749N/A * Description: calls the callback proceedures for this entry.
749N/A * Arguments: w - the menu entry.
749N/A * Returns: none.
749N/A */
749N/A
749N/Astatic void
749N/ANotify(w)
749N/AWidget w;
749N/A{
749N/A XtCallCallbacks(w, XtNcallback, (XtPointer)NULL);
749N/A}
749N/A
749N/A/* Function Name: QueryGeometry.
749N/A * Description: Returns the preferred geometry for this widget.
749N/A * Arguments: w - the menu entry object.
749N/A * itended, return - the intended and return geometry info.
749N/A * Returns: A Geometry Result.
749N/A *
749N/A * See the Intrinsics manual for details on what this function is for.
749N/A *
749N/A * I just return the height and a width of 1.
749N/A */
749N/A
749N/Astatic XtGeometryResult
749N/AQueryGeometry(w, intended, return_val)
749N/AWidget w;
749N/AXtWidgetGeometry *intended, *return_val;
749N/A{
749N/A SmeObject entry = (SmeObject) w;
749N/A Dimension width;
749N/A XtGeometryResult ret_val = XtGeometryYes;
749N/A XtGeometryMask mode = intended->request_mode;
749N/A
749N/A width = 1; /* we can be really small. */
749N/A
749N/A if ( ((mode & CWWidth) && (intended->width != width)) ||
749N/A !(mode & CWWidth) ) {
749N/A return_val->request_mode |= CWWidth;
749N/A return_val->width = width;
749N/A mode = return_val->request_mode;
749N/A
749N/A if ( (mode & CWWidth) && (width == entry->rectangle.width) )
749N/A return(XtGeometryNo);
749N/A return(XtGeometryAlmost);
749N/A }
749N/A return(ret_val);
749N/A}