annotate oldXMenu/AddPane.c @ 34097:0225d8e15f2c

(coordinates_in_window): Handle computations for positions on the vertical bar and fringes differently for window-system frames. Consider some pixels near the vertical bar as on the bar if the frame doesn't have vertical scroll bars. Associate positions between mode or header lines with the right window, the left one.
author Gerd Moellmann <gerd@gnu.org>
date Fri, 01 Dec 2000 20:44:31 +0000
parents bbce331da1be
children 23a1cea22d13
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25858
Dave Love <fx@gnu.org>
parents:
diff changeset
1 #include "copyright.h"
Dave Love <fx@gnu.org>
parents:
diff changeset
2
Dave Love <fx@gnu.org>
parents:
diff changeset
3 /* $Header: /u/src/emacs/19.0/oldXMenu/RCS/AddPane.c,v 1.1 1992/04/11 22:10:17 jimb Exp $ */
Dave Love <fx@gnu.org>
parents:
diff changeset
4 /* Copyright Massachusetts Institute of Technology 1985 */
Dave Love <fx@gnu.org>
parents:
diff changeset
5
Dave Love <fx@gnu.org>
parents:
diff changeset
6 /*
Dave Love <fx@gnu.org>
parents:
diff changeset
7 * XMenu: MIT Project Athena, X Window system menu package
Dave Love <fx@gnu.org>
parents:
diff changeset
8 *
Dave Love <fx@gnu.org>
parents:
diff changeset
9 * XMenuAddPane - Adds a pane to an XMenu object.
Dave Love <fx@gnu.org>
parents:
diff changeset
10 *
Dave Love <fx@gnu.org>
parents:
diff changeset
11 * Author: Tony Della Fera, DEC
Dave Love <fx@gnu.org>
parents:
diff changeset
12 * August, 1985
Dave Love <fx@gnu.org>
parents:
diff changeset
13 *
Dave Love <fx@gnu.org>
parents:
diff changeset
14 */
Dave Love <fx@gnu.org>
parents:
diff changeset
15
Dave Love <fx@gnu.org>
parents:
diff changeset
16 #include <config.h>
Dave Love <fx@gnu.org>
parents:
diff changeset
17 #include "XMenuInt.h"
Dave Love <fx@gnu.org>
parents:
diff changeset
18
Dave Love <fx@gnu.org>
parents:
diff changeset
19 int
Dave Love <fx@gnu.org>
parents:
diff changeset
20 XMenuAddPane(display, menu, label, active)
Dave Love <fx@gnu.org>
parents:
diff changeset
21 Display *display;
Dave Love <fx@gnu.org>
parents:
diff changeset
22 register XMenu *menu; /* Menu object to be modified. */
Dave Love <fx@gnu.org>
parents:
diff changeset
23 register char *label; /* Selection label. */
Dave Love <fx@gnu.org>
parents:
diff changeset
24 int active; /* Make selection active? */
Dave Love <fx@gnu.org>
parents:
diff changeset
25 {
Dave Love <fx@gnu.org>
parents:
diff changeset
26 register XMPane *pane; /* Newly created pane. */
Dave Love <fx@gnu.org>
parents:
diff changeset
27 register XMSelect *select; /* Initial selection for the new pane. */
Dave Love <fx@gnu.org>
parents:
diff changeset
28
Dave Love <fx@gnu.org>
parents:
diff changeset
29 int label_length; /* Label length in characters. */
Dave Love <fx@gnu.org>
parents:
diff changeset
30 int label_width; /* Label width in pixels. */
Dave Love <fx@gnu.org>
parents:
diff changeset
31
Dave Love <fx@gnu.org>
parents:
diff changeset
32 /*
Dave Love <fx@gnu.org>
parents:
diff changeset
33 * Check for NULL pointers!
Dave Love <fx@gnu.org>
parents:
diff changeset
34 */
Dave Love <fx@gnu.org>
parents:
diff changeset
35 if (label == NULL) {
Dave Love <fx@gnu.org>
parents:
diff changeset
36 _XMErrorCode = XME_ARG_BOUNDS;
Dave Love <fx@gnu.org>
parents:
diff changeset
37 return(XM_FAILURE);
Dave Love <fx@gnu.org>
parents:
diff changeset
38 }
Dave Love <fx@gnu.org>
parents:
diff changeset
39
Dave Love <fx@gnu.org>
parents:
diff changeset
40 /*
Dave Love <fx@gnu.org>
parents:
diff changeset
41 * Calloc the XMPane structure and the initial XMSelect.
Dave Love <fx@gnu.org>
parents:
diff changeset
42 */
Dave Love <fx@gnu.org>
parents:
diff changeset
43 pane = (XMPane *)calloc(1, sizeof(XMPane));
Dave Love <fx@gnu.org>
parents:
diff changeset
44 if (pane == NULL) {
Dave Love <fx@gnu.org>
parents:
diff changeset
45 _XMErrorCode = XME_CALLOC;
Dave Love <fx@gnu.org>
parents:
diff changeset
46 return(XM_FAILURE);
Dave Love <fx@gnu.org>
parents:
diff changeset
47 }
Dave Love <fx@gnu.org>
parents:
diff changeset
48 select = (XMSelect *)calloc(1, sizeof(XMSelect));
Dave Love <fx@gnu.org>
parents:
diff changeset
49 if (select == NULL) {
Dave Love <fx@gnu.org>
parents:
diff changeset
50 _XMErrorCode = XME_CALLOC;
Dave Love <fx@gnu.org>
parents:
diff changeset
51 return(XM_FAILURE);
Dave Love <fx@gnu.org>
parents:
diff changeset
52 }
Dave Love <fx@gnu.org>
parents:
diff changeset
53
Dave Love <fx@gnu.org>
parents:
diff changeset
54 /*
Dave Love <fx@gnu.org>
parents:
diff changeset
55 * Determine label size.
Dave Love <fx@gnu.org>
parents:
diff changeset
56 */
Dave Love <fx@gnu.org>
parents:
diff changeset
57 label_length = strlen(label);
Dave Love <fx@gnu.org>
parents:
diff changeset
58 label_width = XTextWidth(menu->p_fnt_info,
Dave Love <fx@gnu.org>
parents:
diff changeset
59 label,
Dave Love <fx@gnu.org>
parents:
diff changeset
60 label_length);
Dave Love <fx@gnu.org>
parents:
diff changeset
61
Dave Love <fx@gnu.org>
parents:
diff changeset
62 /*
Dave Love <fx@gnu.org>
parents:
diff changeset
63 * Set up the initial selection.
Dave Love <fx@gnu.org>
parents:
diff changeset
64 * Values not explicitly set are zeroed by calloc.
Dave Love <fx@gnu.org>
parents:
diff changeset
65 */
Dave Love <fx@gnu.org>
parents:
diff changeset
66 select->next = select;
Dave Love <fx@gnu.org>
parents:
diff changeset
67 select->prev = select;
Dave Love <fx@gnu.org>
parents:
diff changeset
68 select->type = SL_HEADER;
Dave Love <fx@gnu.org>
parents:
diff changeset
69 select->serial = -1;
Dave Love <fx@gnu.org>
parents:
diff changeset
70 select->parent_p = pane;
Dave Love <fx@gnu.org>
parents:
diff changeset
71
Dave Love <fx@gnu.org>
parents:
diff changeset
72 /*
Dave Love <fx@gnu.org>
parents:
diff changeset
73 * Fill the XMPane structure.
Dave Love <fx@gnu.org>
parents:
diff changeset
74 * X and Y position are set to 0 since a recompute will follow.
Dave Love <fx@gnu.org>
parents:
diff changeset
75 */
Dave Love <fx@gnu.org>
parents:
diff changeset
76 pane->type = PANE;
Dave Love <fx@gnu.org>
parents:
diff changeset
77 pane->active = active;
Dave Love <fx@gnu.org>
parents:
diff changeset
78 pane->serial = -1;
Dave Love <fx@gnu.org>
parents:
diff changeset
79 pane->label = label;
Dave Love <fx@gnu.org>
parents:
diff changeset
80 pane->label_width = label_width;
Dave Love <fx@gnu.org>
parents:
diff changeset
81 pane->label_length = label_length;
Dave Love <fx@gnu.org>
parents:
diff changeset
82 pane->s_list = select;
Dave Love <fx@gnu.org>
parents:
diff changeset
83
Dave Love <fx@gnu.org>
parents:
diff changeset
84 /*
Dave Love <fx@gnu.org>
parents:
diff changeset
85 * Insert the pane at the end of the pane list.
Dave Love <fx@gnu.org>
parents:
diff changeset
86 */
Dave Love <fx@gnu.org>
parents:
diff changeset
87 emacs_insque(pane, menu->p_list->prev);
Dave Love <fx@gnu.org>
parents:
diff changeset
88
Dave Love <fx@gnu.org>
parents:
diff changeset
89 /*
Dave Love <fx@gnu.org>
parents:
diff changeset
90 * Update the pane count.
Dave Love <fx@gnu.org>
parents:
diff changeset
91 */
Dave Love <fx@gnu.org>
parents:
diff changeset
92 menu->p_count++;
Dave Love <fx@gnu.org>
parents:
diff changeset
93
Dave Love <fx@gnu.org>
parents:
diff changeset
94 /*
Dave Love <fx@gnu.org>
parents:
diff changeset
95 * Schedule a recompute.
Dave Love <fx@gnu.org>
parents:
diff changeset
96 */
Dave Love <fx@gnu.org>
parents:
diff changeset
97 menu->recompute = 1;
Dave Love <fx@gnu.org>
parents:
diff changeset
98
Dave Love <fx@gnu.org>
parents:
diff changeset
99 /*
Dave Love <fx@gnu.org>
parents:
diff changeset
100 * Return the pane number just added.
Dave Love <fx@gnu.org>
parents:
diff changeset
101 */
Dave Love <fx@gnu.org>
parents:
diff changeset
102 _XMErrorCode = XME_NO_ERROR;
Dave Love <fx@gnu.org>
parents:
diff changeset
103 return((menu->p_count - 1));
Dave Love <fx@gnu.org>
parents:
diff changeset
104 }