source: trunk/third/emacs/oldXMenu/AddSel.c @ 8996

Revision 8996, 2.4 KB checked in by ghudson, 28 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r8995, which included commits to RCS files with non-trunk default branches.
Line 
1#include "copyright.h"
2
3/* $Header: /afs/dev.mit.edu/source/repository/third/emacs/oldXMenu/AddSel.c,v 1.1.1.1 1996-09-26 00:59:42 ghudson Exp $ */
4/* Copyright    Massachusetts Institute of Technology    1985   */
5
6/*
7 * XMenu:       MIT Project Athena, X Window system menu package
8 *
9 *      XMenuAddSelection - Adds a selection to an XMenu object.
10 *
11 *      Author:         Tony Della Fera, DEC
12 *                      August, 1985
13 *
14 */
15
16#include <config.h>
17#include "XMenuInt.h"
18
19int
20XMenuAddSelection(display, menu, p_num, data, label, active)
21    Display *display;
22    register XMenu *menu;       /* Menu object to be modified. */
23    register int p_num;         /* Pane number to be modified. */
24    char *data;                 /* Data value. */
25    char *label;                /* Selection label. */
26    int active;                 /* Make selection active? */
27{
28    register XMPane *pane;      /* Pane containing the new selection. */
29    register XMSelect *select;  /* Newly created selection. */
30
31
32    int label_length;           /* Label lenght in characters. */
33    int label_width;            /* Label width in pixels. */
34   
35    /*
36     * Check for NULL pointers!
37     */
38    if (label == NULL) {
39        _XMErrorCode = XME_ARG_BOUNDS;
40        return(XM_FAILURE);
41    }
42    /*
43     * Find the right pane.
44     */
45    pane = _XMGetPanePtr(menu, p_num);
46    if (pane == NULL) return(XM_FAILURE);
47
48    /*
49     * Calloc the XMSelect structure.
50     */
51    select = (XMSelect *)calloc(1, sizeof(XMSelect));
52    if (select == NULL) {
53        _XMErrorCode = XME_CALLOC;
54        return(XM_FAILURE);
55    }
56    /*
57     * Determine label size.
58     */
59    label_length = strlen(label);
60    label_width = XTextWidth(menu->s_fnt_info, label, label_length);
61   
62    /*
63     * Fill the XMSelect structure.
64     */
65    if (!strcmp (label, "--") || !strcmp (label, "---"))
66      {
67        select->type = SEPARATOR;
68        select->active = 0;
69      }
70    else
71      {
72        select->type = SELECTION;
73        select->active = active;
74      }
75
76    select->serial = -1;
77    select->label = label;
78    select->label_width = label_width;
79    select->label_length = label_length;
80    select->data = data;
81    select->parent_p = pane;
82   
83    /*
84     * Insert the selection at the end of the selection list.
85     */
86    emacs_insque(select, pane->s_list->prev);
87
88    /*
89     * Update the selection count.
90     */
91    pane->s_count++;
92
93    /*
94     * Schedule a recompute.
95     */
96    menu->recompute = 1;
97
98    /*
99     * Return the selection number just added.
100     */
101    _XMErrorCode = XME_NO_ERROR;
102    return((pane->s_count - 1));
103}
Note: See TracBrowser for help on using the repository browser.