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