|
|
1.1 ! root 1: #include <X/mit-copyright.h> ! 2: ! 3: /* $Header: XMenuRecomp.c,v 10.7 86/02/01 16:15:31 tony Rel $ */ ! 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 "XMenuInternal.h" ! 17: ! 18: int ! 19: XMenuRecompute(menu) ! 20: register XMenu *menu; /* Menu object to be recomputed. */ ! 21: { ! 22: register XMPane *p_ptr; /* Pane pointer. */ ! 23: register XMSelect *s_ptr; /* Selection pointer. */ ! 24: ! 25: register int p_num; /* Pane serial number. */ ! 26: register int s_num; /* Selection serial number. */ ! 27: ! 28: /* ! 29: * If no recompute is necessary, return. ! 30: */ ! 31: if (!menu->recompute) { ! 32: _XMErrorCode = XME_NO_ERROR; ! 33: return(XM_SUCCESS); ! 34: } ! 35: ! 36: /* ! 37: * If there are no panes in the menu then return failure ! 38: * beacuse the menu is not initialized. ! 39: */ ! 40: if (menu->p_count == 0) { ! 41: _XMErrorCode = XME_NOT_INIT; ! 42: return(XM_FAILURE); ! 43: } ! 44: ! 45: /* ! 46: * Recompute menu wide global values: pane window size, ! 47: * selection size and maximum selection count. ! 48: */ ! 49: _XMRecomputeGlobals(menu); ! 50: ! 51: /* ! 52: * For each pane in the menu... ! 53: */ ! 54: p_num = 0; ! 55: for ( ! 56: p_ptr = menu->p_list->next; ! 57: p_ptr != menu->p_list; ! 58: p_ptr = p_ptr->next ! 59: ){ ! 60: /* ! 61: * Recompute pane dependencies. ! 62: */ ! 63: if (_XMRecomputePane(menu, p_ptr, p_num) == _FAILURE) { ! 64: return(XM_FAILURE); ! 65: } ! 66: p_num++; ! 67: /* ! 68: * For each selection in the pane... ! 69: */ ! 70: s_num = 0; ! 71: for ( ! 72: s_ptr = p_ptr->s_list->next; ! 73: s_ptr != p_ptr->s_list; ! 74: s_ptr = s_ptr->next ! 75: ) { ! 76: /* ! 77: * Recompute selection dependencies. ! 78: */ ! 79: if (_XMRecomputeSelection(menu, s_ptr, s_num) == _FAILURE) { ! 80: return(XM_FAILURE); ! 81: } ! 82: s_num++; ! 83: } ! 84: } ! 85: ! 86: /* ! 87: * Flush the window creation queue. ! 88: * This batches all window creates since lazy evaluation ! 89: * is more efficient than individual evaluation. ! 90: * This routine also does an XFlush(). ! 91: */ ! 92: if (_XMWinQueFlush(menu) == _FAILURE) return(XM_FAILURE); ! 93: ! 94: /* ! 95: * Make sure all selection windows are mapped. ! 96: */ ! 97: for ( ! 98: p_ptr = menu->p_list->next; ! 99: p_ptr != menu->p_list; ! 100: p_ptr = p_ptr->next ! 101: ){ ! 102: XMapSubwindows(p_ptr->window); ! 103: } ! 104: ! 105: /* ! 106: * Recompute menu size. ! 107: */ ! 108: if (menu->menu_style == CENTER) { ! 109: menu->width = menu->p_width + (menu->p_bdr_width << 1); ! 110: } ! 111: else { ! 112: menu->width = menu->p_width + (menu->p_bdr_width << 1) + ! 113: ((menu->p_count - 1) * menu->p_x_off); ! 114: } ! 115: menu->height = menu->p_height + (menu->p_bdr_width << 1) + ! 116: ((menu->p_count - 1) * menu->p_y_off); ! 117: ! 118: /* ! 119: * Reset the recompute flag. ! 120: */ ! 121: menu->recompute = 0; ! 122: ! 123: /* ! 124: * Return successfully. ! 125: */ ! 126: _XMErrorCode = XME_NO_ERROR; ! 127: return(XM_SUCCESS); ! 128: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.