root/trunk/oldXMenu/AddSel.c

Revision 4196, 2.4 kB (checked in by miyoshi, 2 years ago)

Sync up with Emacs CVS HEAD.

  • Property svn:eol-style set to native
Line 
1 /* Copyright    Massachusetts Institute of Technology    1985   */
2
3 #include "copyright.h"
4
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
19 int
20 XMenuAddSelection(display, menu, p_num, data, label, active, help)
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     char *help;                 /* Help string */
28 {
29     register XMPane *pane;      /* Pane containing the new selection. */
30     register XMSelect *select;  /* Newly created selection. */
31
32
33     int label_length;           /* Label lenght in characters. */
34     int label_width;            /* Label width in pixels. */
35
36     /*
37      * Check for NULL pointers!
38      */
39     if (label == NULL) {
40         _XMErrorCode = XME_ARG_BOUNDS;
41         return(XM_FAILURE);
42     }
43     /*
44      * Find the right pane.
45      */
46     pane = _XMGetPanePtr(menu, p_num);
47     if (pane == NULL) return(XM_FAILURE);
48
49     /*
50      * Calloc the XMSelect structure.
51      */
52     select = (XMSelect *)calloc(1, sizeof(XMSelect));
53     if (select == NULL) {
54         _XMErrorCode = XME_CALLOC;
55         return(XM_FAILURE);
56     }
57     /*
58      * Determine label size.
59      */
60     label_length = strlen(label);
61     label_width = XTextWidth(menu->s_fnt_info, label, label_length);
62
63     /*
64      * Fill the XMSelect structure.
65      */
66     if (!strcmp (label, "--") || !strcmp (label, "---"))
67       {
68         select->type = SEPARATOR;
69         select->active = 0;
70       }
71     else
72       {
73         select->type = SELECTION;
74         select->active = active;
75       }
76
77     select->serial = -1;
78     select->label = label;
79     select->label_width = label_width;
80     select->label_length = label_length;
81     select->data = data;
82     select->parent_p = pane;
83     select->help_string = help;
84
85     /*
86      * Insert the selection at the end of the selection list.
87      */
88     emacs_insque(select, pane->s_list->prev);
89
90     /*
91      * Update the selection count.
92      */
93     pane->s_count++;
94
95     /*
96      * Schedule a recompute.
97      */
98     menu->recompute = 1;
99
100     /*
101      * Return the selection number just added.
102      */
103     _XMErrorCode = XME_NO_ERROR;
104     return((pane->s_count - 1));
105 }
106
107 /* arch-tag: 0161f024-c739-440d-9498-050280c6c355
108    (do not change this comment) */
Note: See TracBrowser for help on using the browser.