Annotation of researchv9/X11/src/X.V11R1/lib/oldXMenu/AddPane.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.