|
|
1.1 root 1: #include <X11/copyright.h>
2:
3: /* $Header: InsPane.c,v 1.2 87/09/10 20:31:19 chris Exp $ */
4: /* Copyright Massachusetts Institute of Technology 1985 */
5:
6: /*
7: * XMenu: MIT Project Athena, X Window system menu package
8: *
9: * XMenuInsertPane - Inserts a pane into an XMenu object in
10: * a particular position.
11: *
12: * Author: Tony Della Fera, DEC
13: * 20-Nov-85
14: *
15: */
16:
17: #include "XMenuInternal.h"
18:
19: int
20: XMenuInsertPane(menu, p_num, label, active)
21: register XMenu *menu; /* Menu object to be modified. */
22: register int p_num; /* Pane number of new pane. */
23: char *label; /* Selection label. */
24: int active; /* Make selection active? */
25: {
26: register XMPane *p_ptr; /* XMPane pointer. */
27: register XMPane *pane; /* Newly created pane. */
28: register XMSelect *select; /* Initial selection for the new pane. */
29:
30: int label_length; /* Label lenght in characters. */
31: int label_width; /* Label width in pixels. */
32:
33: /*
34: * Check for NULL pointers!
35: */
36: if (label == NULL) {
37: _XMErrorCode = XME_ARG_BOUNDS;
38: return(XM_FAILURE);
39: }
40:
41: /*
42: * Find the pane number one less than the one specified since that
43: * is the pane after which the insertion will occur.
44: */
45: p_ptr = _XMGetPanePtr(menu, (p_num - 1));
46: if (p_ptr == NULL) return(XM_FAILURE);
47:
48: /*
49: * Calloc the XMPane structure and the initial XMSelect.
50: */
51: pane = (XMPane *)calloc(1, sizeof(XMPane));
52: if (pane == NULL) {
53: _XMErrorCode = XME_CALLOC;
54: return(XM_FAILURE);
55: }
56: select = (XMSelect *)calloc(1, sizeof(XMSelect));
57: if (select == NULL) {
58: _XMErrorCode = XME_CALLOC;
59: return(XM_FAILURE);
60: }
61:
62: /*
63: * Determine label size.
64: */
65: label_length = strlen(label);
66: label_width = XTextWidth(menu->p_fnt_info, label, label_length);
67:
68: /*
69: * Set up the initial selection.
70: * Values not explicitly set are zeroed by calloc.
71: */
72: select->next = select;
73: select->prev = select;
74: select->type = SL_HEADER;
75: select->serial = -1;
76: select->parent_p = pane;
77:
78: /*
79: * Fill the XMPane structure.
80: */
81: pane->type = PANE;
82: pane->active = active;
83: pane->serial = -1;
84: pane->label = label;
85: pane->label_width = label_width;
86: pane->label_length = label_length;
87: pane->s_list = select;
88:
89: /*
90: * Insert the pane after the pane with the pane
91: * number one less than the desired number for the
92: * new pane.
93: */
94: insque(pane, p_ptr);
95:
96: /*
97: * Update the pane count.
98: */
99: menu->p_count++;
100:
101: /*
102: * Schedule a recompute.
103: */
104: menu->recompute = 1;
105:
106: /*
107: * Return the number of the pane just added.
108: */
109: _XMErrorCode = XME_NO_ERROR;
110: return(p_num);
111: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.