annotate oldXMenu/InsPane.c @ 29473:80835e075d87

(display_line): Set row's and iterator's starts_in_middle_of_char_p and ends_in_middle_of_char_p flags. Set cursor even if row ends in the middle of a character. (dump_glyph_row): Print values of new flags. (redisplay_window) <cursor movement in unchanged window>: When point has been moved forward, and PT is at the end of the cursor row, don't place the cursor in the next row if the cursor row ends in the middle of a character or at ZV.
author Gerd Moellmann <gerd@gnu.org>
date Tue, 06 Jun 2000 20:02:39 +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/InsPane.c,v 1.1 1992/04/11 22:10:19 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 * XMenuInsertPane - Inserts a pane into an XMenu object in
Dave Love <fx@gnu.org>
parents:
diff changeset
10 * a particular position.
Dave Love <fx@gnu.org>
parents:
diff changeset
11 *
Dave Love <fx@gnu.org>
parents:
diff changeset
12 * Author: Tony Della Fera, DEC
Dave Love <fx@gnu.org>
parents:
diff changeset
13 * 20-Nov-85
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
Dave Love <fx@gnu.org>
parents:
diff changeset
17 #include <config.h>
Dave Love <fx@gnu.org>
parents:
diff changeset
18 #include "XMenuInt.h"
Dave Love <fx@gnu.org>
parents:
diff changeset
19
Dave Love <fx@gnu.org>
parents:
diff changeset
20 int
Dave Love <fx@gnu.org>
parents:
diff changeset
21 XMenuInsertPane(menu, p_num, label, active)
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 int p_num; /* Pane number of new pane. */
Dave Love <fx@gnu.org>
parents:
diff changeset
24 char *label; /* Selection label. */
Dave Love <fx@gnu.org>
parents:
diff changeset
25 int active; /* Make selection active? */
Dave Love <fx@gnu.org>
parents:
diff changeset
26 {
Dave Love <fx@gnu.org>
parents:
diff changeset
27 register XMPane *p_ptr; /* XMPane pointer. */
Dave Love <fx@gnu.org>
parents:
diff changeset
28 register XMPane *pane; /* Newly created pane. */
Dave Love <fx@gnu.org>
parents:
diff changeset
29 register XMSelect *select; /* Initial selection for the new pane. */
Dave Love <fx@gnu.org>
parents:
diff changeset
30
Dave Love <fx@gnu.org>
parents:
diff changeset
31 int label_length; /* Label length in characters. */
Dave Love <fx@gnu.org>
parents:
diff changeset
32 int label_width; /* Label width in pixels. */
Dave Love <fx@gnu.org>
parents:
diff changeset
33
Dave Love <fx@gnu.org>
parents:
diff changeset
34 /*
Dave Love <fx@gnu.org>
parents:
diff changeset
35 * Check for NULL pointers!
Dave Love <fx@gnu.org>
parents:
diff changeset
36 */
Dave Love <fx@gnu.org>
parents:
diff changeset
37 if (label == NULL) {
Dave Love <fx@gnu.org>
parents:
diff changeset
38 _XMErrorCode = XME_ARG_BOUNDS;
Dave Love <fx@gnu.org>
parents:
diff changeset
39 return(XM_FAILURE);
Dave Love <fx@gnu.org>
parents:
diff changeset
40 }
Dave Love <fx@gnu.org>
parents:
diff changeset
41
Dave Love <fx@gnu.org>
parents:
diff changeset
42 /*
Dave Love <fx@gnu.org>
parents:
diff changeset
43 * Find the pane number one less than the one specified since that
Dave Love <fx@gnu.org>
parents:
diff changeset
44 * is the pane after which the insertion will occur.
Dave Love <fx@gnu.org>
parents:
diff changeset
45 */
Dave Love <fx@gnu.org>
parents:
diff changeset
46 p_ptr = _XMGetPanePtr(menu, (p_num - 1));
Dave Love <fx@gnu.org>
parents:
diff changeset
47 if (p_ptr == NULL) return(XM_FAILURE);
Dave Love <fx@gnu.org>
parents:
diff changeset
48
Dave Love <fx@gnu.org>
parents:
diff changeset
49 /*
Dave Love <fx@gnu.org>
parents:
diff changeset
50 * Calloc the XMPane structure and the initial XMSelect.
Dave Love <fx@gnu.org>
parents:
diff changeset
51 */
Dave Love <fx@gnu.org>
parents:
diff changeset
52 pane = (XMPane *)calloc(1, sizeof(XMPane));
Dave Love <fx@gnu.org>
parents:
diff changeset
53 if (pane == NULL) {
Dave Love <fx@gnu.org>
parents:
diff changeset
54 _XMErrorCode = XME_CALLOC;
Dave Love <fx@gnu.org>
parents:
diff changeset
55 return(XM_FAILURE);
Dave Love <fx@gnu.org>
parents:
diff changeset
56 }
Dave Love <fx@gnu.org>
parents:
diff changeset
57 select = (XMSelect *)calloc(1, sizeof(XMSelect));
Dave Love <fx@gnu.org>
parents:
diff changeset
58 if (select == NULL) {
Dave Love <fx@gnu.org>
parents:
diff changeset
59 _XMErrorCode = XME_CALLOC;
Dave Love <fx@gnu.org>
parents:
diff changeset
60 return(XM_FAILURE);
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 /*
Dave Love <fx@gnu.org>
parents:
diff changeset
64 * Determine label size.
Dave Love <fx@gnu.org>
parents:
diff changeset
65 */
Dave Love <fx@gnu.org>
parents:
diff changeset
66 label_length = strlen(label);
Dave Love <fx@gnu.org>
parents:
diff changeset
67 label_width = XTextWidth(menu->p_fnt_info, label, label_length);
Dave Love <fx@gnu.org>
parents:
diff changeset
68
Dave Love <fx@gnu.org>
parents:
diff changeset
69 /*
Dave Love <fx@gnu.org>
parents:
diff changeset
70 * Set up the initial selection.
Dave Love <fx@gnu.org>
parents:
diff changeset
71 * Values not explicitly set are zeroed by calloc.
Dave Love <fx@gnu.org>
parents:
diff changeset
72 */
Dave Love <fx@gnu.org>
parents:
diff changeset
73 select->next = select;
Dave Love <fx@gnu.org>
parents:
diff changeset
74 select->prev = select;
Dave Love <fx@gnu.org>
parents:
diff changeset
75 select->type = SL_HEADER;
Dave Love <fx@gnu.org>
parents:
diff changeset
76 select->serial = -1;
Dave Love <fx@gnu.org>
parents:
diff changeset
77 select->parent_p = pane;
Dave Love <fx@gnu.org>
parents:
diff changeset
78
Dave Love <fx@gnu.org>
parents:
diff changeset
79 /*
Dave Love <fx@gnu.org>
parents:
diff changeset
80 * Fill the XMPane structure.
Dave Love <fx@gnu.org>
parents:
diff changeset
81 */
Dave Love <fx@gnu.org>
parents:
diff changeset
82 pane->type = PANE;
Dave Love <fx@gnu.org>
parents:
diff changeset
83 pane->active = active;
Dave Love <fx@gnu.org>
parents:
diff changeset
84 pane->serial = -1;
Dave Love <fx@gnu.org>
parents:
diff changeset
85 pane->label = label;
Dave Love <fx@gnu.org>
parents:
diff changeset
86 pane->label_width = label_width;
Dave Love <fx@gnu.org>
parents:
diff changeset
87 pane->label_length = label_length;
Dave Love <fx@gnu.org>
parents:
diff changeset
88 pane->s_list = select;
Dave Love <fx@gnu.org>
parents:
diff changeset
89
Dave Love <fx@gnu.org>
parents:
diff changeset
90 /*
Dave Love <fx@gnu.org>
parents:
diff changeset
91 * Insert the pane after the pane with the pane
Dave Love <fx@gnu.org>
parents:
diff changeset
92 * number one less than the desired number for the
Dave Love <fx@gnu.org>
parents:
diff changeset
93 * new pane.
Dave Love <fx@gnu.org>
parents:
diff changeset
94 */
Dave Love <fx@gnu.org>
parents:
diff changeset
95 emacs_insque(pane, p_ptr);
Dave Love <fx@gnu.org>
parents:
diff changeset
96
Dave Love <fx@gnu.org>
parents:
diff changeset
97 /*
Dave Love <fx@gnu.org>
parents:
diff changeset
98 * Update the pane count.
Dave Love <fx@gnu.org>
parents:
diff changeset
99 */
Dave Love <fx@gnu.org>
parents:
diff changeset
100 menu->p_count++;
Dave Love <fx@gnu.org>
parents:
diff changeset
101
Dave Love <fx@gnu.org>
parents:
diff changeset
102 /*
Dave Love <fx@gnu.org>
parents:
diff changeset
103 * Schedule a recompute.
Dave Love <fx@gnu.org>
parents:
diff changeset
104 */
Dave Love <fx@gnu.org>
parents:
diff changeset
105 menu->recompute = 1;
Dave Love <fx@gnu.org>
parents:
diff changeset
106
Dave Love <fx@gnu.org>
parents:
diff changeset
107 /*
Dave Love <fx@gnu.org>
parents:
diff changeset
108 * Return the number of the pane just added.
Dave Love <fx@gnu.org>
parents:
diff changeset
109 */
Dave Love <fx@gnu.org>
parents:
diff changeset
110 _XMErrorCode = XME_NO_ERROR;
Dave Love <fx@gnu.org>
parents:
diff changeset
111 return(p_num);
Dave Love <fx@gnu.org>
parents:
diff changeset
112 }