summaryrefslogtreecommitdiff
path: root/src/Sme.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/Sme.c')
-rw-r--r--src/Sme.c246
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);
+}