]> code.delx.au - gnu-emacs/blob - oldXMenu/InsSel.c
Define fullscreen_hook.
[gnu-emacs] / oldXMenu / InsSel.c
1 #include "copyright.h"
2
3 /* Copyright Massachusetts Institute of Technology 1985 */
4 /* Copyright (C) 2002, 2003, 2004, 2005,
5 2006 Free Software Foundation, Inc. */
6
7 /*
8 * XMenu: MIT Project Athena, X Window system menu package
9 *
10 * XMenuInsertSelection - Inserts a selection into an XMenu object
11 *
12 * Author: Tony Della Fera, DEC
13 * 20-Nov-85
14 *
15 */
16
17 #include <config.h>
18 #include "XMenuInt.h"
19
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? */
28 {
29 register XMPane *p_ptr; /* XMPane pointer. */
30 register XMSelect *s_ptr; /* XMSelect pointer. */
31
32 XMSelect *select; /* Newly created selection. */
33
34 int label_length; /* Label length in characters. */
35 int label_width; /* Label width in pixels. */
36
37 /*
38 * Check for NULL pointers!
39 */
40 if (label == NULL) {
41 _XMErrorCode = XME_ARG_BOUNDS;
42 return(XM_FAILURE);
43 }
44
45 /*
46 * Find the right pane.
47 */
48 p_ptr = _XMGetPanePtr(menu, p_num);
49 if (p_ptr == NULL) return(XM_FAILURE);
50
51 /*
52 * Find the selection number one less than the one specified since that
53 * is the selection after which the insertion will occur.
54 */
55 s_ptr = _XMGetSelectionPtr(p_ptr, (s_num - 1));
56 if (s_ptr == NULL) return(XM_FAILURE);
57
58 /*
59 * Calloc the XMSelect structure.
60 */
61 select = (XMSelect *)calloc(1, sizeof(XMSelect));
62 if (select == NULL) {
63 _XMErrorCode = XME_CALLOC;
64 return(XM_FAILURE);
65 }
66
67 /*
68 * Determine label size.
69 */
70 label_length = strlen(label);
71 label_width = XTextWidth(menu->s_fnt_info, label, label_length);
72
73
74 /*
75 * Fill the XMSelect structure.
76 */
77 if (!strcmp (label, "--") || !strcmp (label, "---"))
78 {
79 select->type = SEPARATOR;
80 select->active = 0;
81 }
82 else
83 {
84 select->type = SELECTION;
85 select->active = active;
86 }
87
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;
95
96 /*
97 * Insert the selection after the selection with the selection
98 * number one less than the desired number for the new selection.
99 */
100 emacs_insque(select, s_ptr);
101
102 /*
103 * Update the selection count.
104 */
105 p_ptr->s_count++;
106
107 /*
108 * Schedule a recompute.
109 */
110 menu->recompute = 1;
111
112 /*
113 * Return the selection number just inserted.
114 */
115 _XMErrorCode = XME_NO_ERROR;
116 return(s_num);
117 }
118
119 /* arch-tag: 8398626f-81cb-4e13-8ebc-aac1b9237663
120 (do not change this comment) */