|
|
1.1 ! root 1: #include <X11/copyright.h> ! 2: ! 3: /* $Header: Recomp.c,v 1.4 87/08/04 10:30:03 toddb 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 "XMenuInternal.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.