diff options
| author | Dave Love <fx@gnu.org> | 1999-10-03 19:36:13 +0000 | 
|---|---|---|
| committer | Dave Love <fx@gnu.org> | 1999-10-03 19:36:13 +0000 | 
| commit | e745ede7473e87b93d71858bc1c8447a1307de28 (patch) | |
| tree | 59353dca94fcb3a9ce2fd9f79614a3119da7f863 /oldXMenu/InsPane.c | |
| parent | 0c898dd963a3277b5ec8d59f0a350e3fb50e50c3 (diff) | |
| download | emacs-e745ede7473e87b93d71858bc1c8447a1307de28.tar.gz | |
#
Diffstat (limited to 'oldXMenu/InsPane.c')
| -rw-r--r-- | oldXMenu/InsPane.c | 112 | 
1 files changed, 112 insertions, 0 deletions
diff --git a/oldXMenu/InsPane.c b/oldXMenu/InsPane.c new file mode 100644 index 00000000000..7a0d6e3ec63 --- /dev/null +++ b/oldXMenu/InsPane.c @@ -0,0 +1,112 @@ +#include "copyright.h" + +/* $Header: /u/src/emacs/19.0/oldXMenu/RCS/InsPane.c,v 1.1 1992/04/11 22:10:19 jimb Exp $ */ +/* Copyright    Massachusetts Institute of Technology    1985	*/ + +/* + * XMenu:	MIT Project Athena, X Window system menu package + * + * 	XMenuInsertPane - Inserts a pane into an XMenu object in + *			  a particular position. + * + *	Author:		Tony Della Fera, DEC + *			20-Nov-85 + * + */ + +#include <config.h> +#include "XMenuInt.h" + +int +XMenuInsertPane(menu, p_num, label, active) +    register XMenu *menu;	/* Menu object to be modified. */ +    register int p_num;		/* Pane number of new pane. */ +    char *label;		/* Selection label. */ +    int active;			/* Make selection active? */ +{ +    register XMPane *p_ptr;	/* XMPane pointer. */ +    register XMPane *pane;	/* Newly created pane. */ +    register XMSelect *select;	/* Initial selection for the new pane. */ +         +    int label_length;		/* Label length in characters. */ +    int label_width;		/* Label width in pixels. */ + +    /* +     * Check for NULL pointers! +     */ +    if (label == NULL) { +	_XMErrorCode = XME_ARG_BOUNDS; +	return(XM_FAILURE); +    } + +    /* +     * Find the pane number one less than the one specified since that +     * is the pane after which the insertion will occur. +     */ +    p_ptr = _XMGetPanePtr(menu, (p_num - 1)); +    if (p_ptr == NULL) return(XM_FAILURE); + +    /* +     * Calloc the XMPane structure and the initial XMSelect. +     */ +    pane = (XMPane *)calloc(1, sizeof(XMPane)); +    if (pane == NULL) { +	_XMErrorCode = XME_CALLOC; +	return(XM_FAILURE); +    } +    select = (XMSelect *)calloc(1, sizeof(XMSelect)); +    if (select == NULL) { +	_XMErrorCode = XME_CALLOC; +	return(XM_FAILURE); +    } + +    /* +     * Determine label size. +     */ +    label_length = strlen(label); +    label_width = XTextWidth(menu->p_fnt_info, label, label_length); + +    /* +     * Set up the initial selection. +     * Values not explicitly set are zeroed by calloc. +     */ +    select->next = select; +    select->prev = select; +    select->type = SL_HEADER; +    select->serial = -1; +    select->parent_p = pane; + +    /* +     * Fill the XMPane structure. +     */ +    pane->type = PANE; +    pane->active = active; +    pane->serial = -1; +    pane->label = label; +    pane->label_width = label_width; +    pane->label_length = label_length; +    pane->s_list = select; + +    /* +     * Insert the pane after the pane with the pane +     * number one less than the desired number for the +     * new pane. +     */ +    emacs_insque(pane, p_ptr); + +    /* +     * Update the pane count.  +     */ +    menu->p_count++; + +    /* +     * Schedule a recompute. +     */ +    menu->recompute = 1; + +    /* +     * Return the number of the pane just added. +     */ +    _XMErrorCode = XME_NO_ERROR; +    return(p_num); +}  | 
