1/* Copyright Massachusetts Institute of Technology 1985 */ 2 3#include "copyright.h" 4 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 18int 19XMenuRecompute(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 * because 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} 105 106/* arch-tag: 1fe99b82-3873-4aab-b2b3-f277c93e00d9 107 (do not change this comment) */ 108