|
|
1.1 ! root 1: #include <X11/copyright.h> ! 2: ! 3: /* $Header: AddPane.c,v 1.3 87/12/20 12:03:52 rws 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 "XMenuInt.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.