Fix compilation.
[emacs.git] / oldXMenu / InsSel.c
blob30e0756d8e42ad17b30531af2c5ea0f1aa99b9c6
1 #include "copyright.h"
3 /* Copyright Massachusetts Institute of Technology 1985 */
4 /* Copyright (C) 2002, 2003, 2004, 2005,
5 2006 Free Software Foundation, Inc. */
7 /*
8 * XMenu: MIT Project Athena, X Window system menu package
10 * XMenuInsertSelection - Inserts a selection into an XMenu object
12 * Author: Tony Della Fera, DEC
13 * 20-Nov-85
17 #include <config.h>
18 #include "XMenuInt.h"
20 int
21 XMenuInsertSelection(menu, p_num, s_num, data, label, active)
22 register XMenu *menu; /* Menu object to be modified. */
23 register int p_num; /* Pane number to be modified. */
24 register int s_num; /* Selection number of new selection. */
25 char *data; /* Data value. */
26 char *label; /* Selection label. */
27 int active; /* Make selection active? */
29 register XMPane *p_ptr; /* XMPane pointer. */
30 register XMSelect *s_ptr; /* XMSelect pointer. */
32 XMSelect *select; /* Newly created selection. */
34 int label_length; /* Label length in characters. */
35 int label_width; /* Label width in pixels. */
38 * Check for NULL pointers!
40 if (label == NULL) {
41 _XMErrorCode = XME_ARG_BOUNDS;
42 return(XM_FAILURE);
46 * Find the right pane.
48 p_ptr = _XMGetPanePtr(menu, p_num);
49 if (p_ptr == NULL) return(XM_FAILURE);
52 * Find the selection number one less than the one specified since that
53 * is the selection after which the insertion will occur.
55 s_ptr = _XMGetSelectionPtr(p_ptr, (s_num - 1));
56 if (s_ptr == NULL) return(XM_FAILURE);
59 * Calloc the XMSelect structure.
61 select = (XMSelect *)calloc(1, sizeof(XMSelect));
62 if (select == NULL) {
63 _XMErrorCode = XME_CALLOC;
64 return(XM_FAILURE);
68 * Determine label size.
70 label_length = strlen(label);
71 label_width = XTextWidth(menu->s_fnt_info, label, label_length);
75 * Fill the XMSelect structure.
77 if (!strcmp (label, "--") || !strcmp (label, "---"))
79 select->type = SEPARATOR;
80 select->active = 0;
82 else
84 select->type = SELECTION;
85 select->active = active;
88 select->active = active;
89 select->serial = -1;
90 select->label = label;
91 select->label_width = label_width;
92 select->label_length = label_length;
93 select->data = data;
94 select->parent_p = p_ptr;
97 * Insert the selection after the selection with the selection
98 * number one less than the desired number for the new selection.
100 emacs_insque(select, s_ptr);
103 * Update the selection count.
105 p_ptr->s_count++;
108 * Schedule a recompute.
110 menu->recompute = 1;
113 * Return the selection number just inserted.
115 _XMErrorCode = XME_NO_ERROR;
116 return(s_num);
119 /* arch-tag: 8398626f-81cb-4e13-8ebc-aac1b9237663
120 (do not change this comment) */