|
|
1.1 root 1: #include <X11/copyright.h>
2:
3: /* $Header: Recomp.c,v 1.5 87/12/20 12:05:46 rws Exp $ */
4: /* Copyright Massachusetts Institute of Technology 1985 */
5:
6: /*
7: * XMenu: MIT Project Athena, X Window system menu package
8: *
9: * XMenuRecompute - Recompute XMenu object dependencies.
10: *
11: * Author: Tony Della Fera, DEC
12: * September, 1985
13: *
14: */
15:
16: #include "XMenuInt.h"
17:
18: int
19: XMenuRecompute(display, menu)
20: Display *display;
21: register XMenu *menu; /* Menu object to be recomputed. */
22: {
23: register XMPane *p_ptr; /* Pane pointer. */
24: register XMSelect *s_ptr; /* Selection pointer. */
25:
26: register int p_num; /* Pane serial number. */
27: register int s_num; /* Selection serial number. */
28:
29: /*
30: * If there are no panes in the menu then return failure
31: * beacuse the menu is not initialized.
32: */
33: if (menu->p_count == 0) {
34: _XMErrorCode = XME_NOT_INIT;
35: return(XM_FAILURE);
36: }
37:
38: /*
39: * Recompute menu wide global values: pane window size,
40: * selection size and maximum selection count.
41: */
42: _XMRecomputeGlobals(display, menu);
43:
44: /*
45: * For each pane in the menu...
46: */
47:
48: p_num = 0;
49: for (
50: p_ptr = menu->p_list->next;
51: p_ptr != menu->p_list;
52: p_ptr = p_ptr->next
53: ){
54: /*
55: * Recompute pane dependencies.
56: */
57: if (_XMRecomputePane(display, menu, p_ptr, p_num) == _FAILURE) {
58: return(XM_FAILURE);
59: }
60: p_num++;
61:
62: /*
63: * For each selection in the pane...
64: */
65: s_num = 0;
66: for (
67: s_ptr = p_ptr->s_list->next;
68: s_ptr != p_ptr->s_list;
69: s_ptr = s_ptr->next
70: ) {
71: /*
72: * Recompute selection dependencies.
73: */
74: if (_XMRecomputeSelection(display, menu, s_ptr, s_num) == _FAILURE) {
75: return(XM_FAILURE);
76: }
77: s_num++;
78: }
79: }
80:
81: /*
82: * Recompute menu size.
83: */
84: if (menu->menu_style == CENTER) {
85: menu->width = menu->p_width + (menu->p_bdr_width << 1);
86: }
87: else {
88: menu->width = menu->p_width + (menu->p_bdr_width << 1) +
89: ((menu->p_count - 1) * menu->p_x_off);
90: }
91: menu->height = menu->p_height + (menu->p_bdr_width << 1) +
92: ((menu->p_count - 1) * menu->p_y_off);
93:
94: /*
95: * Reset the recompute flag.
96: */
97: menu->recompute = 0;
98:
99: /*
100: * Return successfully.
101: */
102: _XMErrorCode = XME_NO_ERROR;
103: return(XM_SUCCESS);
104: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.