root/trunk/oldXMenu/AddPane.c

Revision 4196, 2.4 kB (checked in by miyoshi, 2 years ago)

Sync up with Emacs CVS HEAD.

  • Property svn:eol-style set to native
Line 
1 /* Copyright    Massachusetts Institute of Technology    1985   */
2
3 #include "copyright.h"
4
5 /*
6  * XMenu:       MIT Project Athena, X Window system menu package
7  *
8  *      XMenuAddPane - Adds a pane to an XMenu object.
9  *
10  *      Author:         Tony Della Fera, DEC
11  *                      August, 1985
12  *
13  */
14
15 #include <config.h>
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     emacs_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 }
104
105 /* arch-tag: 62a26021-f29d-48ba-96ef-3b6c4ebd6547
106    (do not change this comment) */
Note: See TracBrowser for help on using the browser.