|
|
1.1 ! root 1: #include <X/mit-copyright.h> ! 2: ! 3: /* $Header: XMenuDelPane.c,v 10.10 86/05/16 12:34:37 tony Rel $ */ ! 4: /* Copyright Massachusetts Institute of Technology 1985 */ ! 5: ! 6: /* ! 7: * XMenu: MIT Project Athena, X Window system menu package ! 8: * ! 9: * XMenuDeletePane - Deletes a pane from an XMenu object. ! 10: * ! 11: * Author: Tony Della Fera, DEC ! 12: * 20-Nov-85 ! 13: * ! 14: */ ! 15: ! 16: #include "XMenuInternal.h" ! 17: ! 18: int ! 19: XMenuDeletePane(menu, p_num) ! 20: register XMenu *menu; /* Menu object to be modified. */ ! 21: register int p_num; /* Pane number to be deleted. */ ! 22: { ! 23: register XMPane *p_ptr; /* Pointer to pane being deleted. */ ! 24: register XMSelect *s_ptr; /* Pointer to selections being deleted. */ ! 25: register XMSelect *s_next; /* Pointer to next selection to be deleted. */ ! 26: ! 27: /* ! 28: * Find the right pane. ! 29: */ ! 30: p_ptr = _XMGetPanePtr(menu, p_num); ! 31: if (p_ptr == NULL) return(XM_FAILURE); ! 32: ! 33: /* ! 34: * Remove the pane from the association table. ! 35: */ ! 36: XDeleteAssoc(menu->assoc_tab, p_ptr->window); ! 37: ! 38: /* ! 39: * Remove the pane from the pane list and update ! 40: * the pane count. ! 41: */ ! 42: remque(p_ptr); ! 43: menu->p_count--; ! 44: ! 45: /* ! 46: * Remove all the selections in the pane from the ! 47: * association table and free their XMSelect structures. ! 48: */ ! 49: for ( ! 50: s_ptr = p_ptr->s_list->next; ! 51: s_ptr != p_ptr->s_list; ! 52: s_ptr = s_next ! 53: ) { ! 54: XDeleteAssoc(menu->assoc_tab, s_ptr->window); ! 55: s_next = s_ptr->next; ! 56: free(s_ptr); ! 57: } ! 58: free(p_ptr->s_list); ! 59: ! 60: if (p_ptr->window) { ! 61: /* ! 62: * Destroy the selection transparencies. ! 63: */ ! 64: XDestroySubwindows(p_ptr->window); ! 65: ! 66: /* ! 67: * Destroy the pane window. ! 68: */ ! 69: XDestroyWindow(p_ptr->window); ! 70: } ! 71: ! 72: /* ! 73: * Free the pane's XMPane structure. ! 74: */ ! 75: free(p_ptr); ! 76: ! 77: /* ! 78: * Schedule a recompute. ! 79: */ ! 80: menu->recompute = 1; ! 81: ! 82: /* ! 83: * Return the pane number just deleted. ! 84: */ ! 85: _XMErrorCode = XME_NO_ERROR; ! 86: return(p_num); ! 87: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.