root/branches/2.1/oldXMenu/AddPane.c

Revision 3207, 2.4 kB (checked in by miyoshi, 5 years ago)

Sync up with Emacs-21.2.

  • Property svn:eol-style set to native
Line 
1 #include "copyright.h"
2
3 /* $Header: /cvsroot/emacs/emacs/oldXMenu/AddPane.c,v 1.1 1999/10/03 19:34:51 fx 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 <config.h>
17 #include "XMenuInt.h"
18
19 int
20 XMenuAddPane(display, menu, label, active)
21     Display *display;           
22     register XMenu *menu;       /* Menu object to be modified. */
23     register char *label;       /* Selection label. */
24     int active;                 /* Make selection active? */
25 {
26     register XMPane *pane;      /* Newly created pane. */
27     register XMSelect *select;  /* Initial selection for the new pane. */
28        
29     int label_length;           /* Label length in characters. */
30     int label_width;            /* Label width in pixels. */
31
32     /*
33      * Check for NULL pointers!
34      */
35     if (label == NULL) {
36         _XMErrorCode = XME_ARG_BOUNDS;
37         return(XM_FAILURE);
38     }
39
40     /*
41      * Calloc the XMPane structure and the initial XMSelect.
42      */
43     pane = (XMPane *)calloc(1, sizeof(XMPane));
44     if (pane == NULL) {
45         _XMErrorCode = XME_CALLOC;
46         return(XM_FAILURE);
47     }
48     select = (XMSelect *)calloc(1, sizeof(XMSelect));
49     if (select == NULL) {
50         _XMErrorCode = XME_CALLOC;
51         return(XM_FAILURE);
52     }
53    
54     /*
55      * Determine label size.
56      */
57     label_length = strlen(label);
58     label_width = XTextWidth(menu->p_fnt_info,
59                              label,
60                              label_length);
61    
62     /*
63      * Set up the initial selection.
64      * Values not explicitly set are zeroed by calloc.
65      */
66     select->next = select;
67     select->prev = select;
68     select->type = SL_HEADER;
69     select->serial = -1;
70     select->parent_p = pane;
71
72     /*
73      * Fill the XMPane structure.
74      * X and Y position are set to 0 since a recompute will follow.
75      */
76     pane->type = PANE;
77     pane->active = active;
78     pane->serial = -1;
79     pane->label = label;
80     pane->label_width = label_width;
81     pane->label_length = label_length;
82     pane->s_list = select;
83
84     /*
85      * Insert the pane at the end of the pane list.
86      */
87     emacs_insque(pane, menu->p_list->prev);
88
89     /*
90      * Update the pane count.
91      */
92     menu->p_count++;
93
94     /*
95      * Schedule a recompute.
96      */
97     menu->recompute = 1;
98
99     /*
100      * Return the pane number just added.
101      */
102     _XMErrorCode = XME_NO_ERROR;
103     return((menu->p_count - 1));
104 }
Note: See TracBrowser for help on using the browser.