Initial git import
[sxemacs] / src / ui / winslots.h
1 /* Definitions of marked slots in windows and window configs
2    Copyright (C) 1985, 1986, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
3    Copyright (C) 1994, 1995 Board of Trustees, University of Illinois.
4    Copyright (C) 1995, 1996 Ben Wing.
5    Copyright (C) 1996 Chuck Thompson.
6
7 This file is part of SXEmacs
8
9 SXEmacs is free software: you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation, either version 3 of the License, or
12 (at your option) any later version.
13
14 SXEmacs is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program.  If not, see <http://www.gnu.org/licenses/>. */
21
22
23 /* Split out of window.h and window.c
24    by Kirill Katsnelson <kkm@kis.ru>, May 1998 */
25
26 #ifdef WINDOW_SLOT_DECLARATION
27 #define WINDOW_SLOT_ARRAY(slot, size, compare) WINDOW_SLOT (slot[size], compare)
28 #else
29 #define WINDOW_SLOT_ARRAY(slot, size, compare) do {     \
30   int wsaidx;                                           \
31   for (wsaidx = 0; wsaidx < size; wsaidx++)             \
32     {                                                   \
33       WINDOW_SLOT (slot[wsaidx], compare);              \
34     }                                                   \
35 } while (0);
36 #endif
37
38 #define EQUAL_WRAPPED(x,y) internal_equal ((x), (y), 0)
39
40   /*** Non-specifier vars of window and window config ***/
41
42   /* Non-nil means window is marked as dedicated.  */
43 WINDOW_SLOT(dedicated, EQ);
44
45   /*** specifier values cached in the struct window ***/
46
47   /* Display-table to use for displaying chars in this window. */
48 WINDOW_SLOT(display_table, EQUAL_WRAPPED);
49   /* Thickness of modeline shadow, in pixels.  If negative, draw
50      as recessed. */
51 WINDOW_SLOT(modeline_shadow_thickness, EQ);
52   /* Non-nil means to display a modeline for the buffer. */
53 WINDOW_SLOT(has_modeline_p, EQ);
54   /* Thickness of vertical divider shadow, in pixels.  If negative, draw as
55      recessed. */
56 WINDOW_SLOT(vertical_divider_shadow_thickness, EQ);
57   /* Divider surface width (not counting 3-d borders) */
58 WINDOW_SLOT(vertical_divider_line_width, EQ);
59   /* Spacing between outer edge of divider border and window edge */
60 WINDOW_SLOT(vertical_divider_spacing, EQ);
61   /* Whether vertical dividers are always displayed */
62 WINDOW_SLOT(vertical_divider_always_visible_p, EQ);
63
64 #ifdef HAVE_SCROLLBARS
65   /* Width of vertical scrollbars. */
66 WINDOW_SLOT(scrollbar_width, EQ);
67   /* Height of horizontal scrollbars. */
68 WINDOW_SLOT(scrollbar_height, EQ);
69   /* Whether the scrollbars are visible */
70 WINDOW_SLOT(horizontal_scrollbar_visible_p, EQ);
71 WINDOW_SLOT(vertical_scrollbar_visible_p, EQ);
72   /* Scrollbar positions */
73 WINDOW_SLOT(scrollbar_on_left_p, EQ);
74 WINDOW_SLOT(scrollbar_on_top_p, EQ);
75   /* Pointer to use for vertical and horizontal scrollbars. */
76 WINDOW_SLOT(scrollbar_pointer, EQ);
77 #endif                          /* HAVE_SCROLLBARS */
78 #ifdef HAVE_TOOLBARS
79   /* Toolbar specification for each of the four positions.
80      This is not a size hog because the value here is not copied,
81      and will be shared with the specs in the specifier. */
82 WINDOW_SLOT_ARRAY(toolbar, 4, EQUAL_WRAPPED);
83   /* Toolbar size for each of the four positions. */
84 WINDOW_SLOT_ARRAY(toolbar_size, 4, EQUAL_WRAPPED);
85   /* Toolbar border width for each of the four positions. */
86 WINDOW_SLOT_ARRAY(toolbar_border_width, 4, EQUAL_WRAPPED);
87   /* Toolbar visibility status for each of the four positions. */
88 WINDOW_SLOT_ARRAY(toolbar_visible_p, 4, EQUAL_WRAPPED);
89   /* Caption status of toolbar. */
90 WINDOW_SLOT(toolbar_buttons_captioned_p, EQ);
91   /* The following five don't really need to be cached except
92      that we need to know when they've changed. */
93 WINDOW_SLOT(default_toolbar, EQUAL_WRAPPED);
94 WINDOW_SLOT(default_toolbar_width, EQ);
95 WINDOW_SLOT(default_toolbar_height, EQ);
96 WINDOW_SLOT(default_toolbar_visible_p, EQ);
97 WINDOW_SLOT(default_toolbar_border_width, EQ);
98 #endif                          /* HAVE_TOOLBARS */
99
100   /* Gutter specification for each of the four positions.
101      This is not a size hog because the value here is not copied,
102      and will be shared with the specs in the specifier. */
103 WINDOW_SLOT_ARRAY(gutter, 4, EQUAL_WRAPPED);
104   /* Real (pre-calculated) gutter specification for each of the four positions.
105      This is not a specifier, it is calculated by the specifier change
106      functions. */
107 WINDOW_SLOT_ARRAY(real_gutter, 4, EQUAL_WRAPPED);
108   /* Gutter size for each of the four positions. */
109 WINDOW_SLOT_ARRAY(gutter_size, 4, EQUAL_WRAPPED);
110   /* Real (pre-calculated) gutter size for each of the four positions.
111      This is not a specifier, it is calculated by the specifier change
112      functions. */
113 WINDOW_SLOT_ARRAY(real_gutter_size, 4, EQUAL_WRAPPED);
114   /* Gutter border width for each of the four positions. */
115 WINDOW_SLOT_ARRAY(gutter_border_width, 4, EQUAL_WRAPPED);
116   /* Gutter visibility status for each of the four positions. */
117 WINDOW_SLOT_ARRAY(gutter_visible_p, 4, EQUAL_WRAPPED);
118   /* The following five don't really need to be cached except
119      that we need to know when they've changed. */
120 WINDOW_SLOT(default_gutter, EQUAL_WRAPPED);
121 WINDOW_SLOT(default_gutter_width, EQ);
122 WINDOW_SLOT(default_gutter_height, EQ);
123 WINDOW_SLOT(default_gutter_visible_p, EQ);
124 WINDOW_SLOT(default_gutter_border_width, EQ);
125 /* margins */
126 WINDOW_SLOT(left_margin_width, EQ);
127 WINDOW_SLOT(right_margin_width, EQ);
128 WINDOW_SLOT(minimum_line_ascent, EQ);
129 WINDOW_SLOT(minimum_line_descent, EQ);
130 WINDOW_SLOT(use_left_overflow, EQ);
131 WINDOW_SLOT(use_right_overflow, EQ);
132 #ifdef HAVE_MENUBARS
133   /* Visibility of menubar. */
134 WINDOW_SLOT(menubar_visible_p, EQ);
135 #endif                          /* HAVE_MENUBARS */
136 WINDOW_SLOT(text_cursor_visible_p, EQ);
137
138   /* Hara-kiri */
139 #undef EQUAL_WRAPPED
140 #undef WINDOW_SLOT_DECLARATION
141 #undef WINDOW_SLOT
142 #undef WINDOW_SLOT_ARRAY