Mercurial > hg > xemacs-beta
annotate src/frame-impl.h @ 5090:0ca81354c4c7
Further frame-geometry cleanups
-------------------- ChangeLog entries follow: --------------------
man/ChangeLog addition:
2010-03-03 Ben Wing <ben@xemacs.org>
* internals/internals.texi (Intro to Window and Frame Geometry):
* internals/internals.texi (The Paned Area):
* internals/internals.texi (The Displayable Area):
Update to make note of e.g. the fact that the bottom gutter is
actually above the minibuffer.
src/ChangeLog addition:
2010-03-03 Ben Wing <ben@xemacs.org>
* emacs.c:
* emacs.c (assert_equal_failed):
* lisp.h:
* lisp.h (assert_equal):
New fun assert_equal, asserting that two values == each other, and
printing out both values upon failure.
* frame-gtk.c (gtk_initialize_frame_size):
* frame-impl.h:
* frame-impl.h (FRAME_TOP_INTERNAL_BORDER_START):
* frame-impl.h (FRAME_BOTTOM_INTERNAL_BORDER_START):
* frame-impl.h (FRAME_LEFT_INTERNAL_BORDER_START):
* frame-impl.h (FRAME_PANED_TOP_EDGE):
* frame-impl.h (FRAME_NONPANED_SIZE):
* frame-x.c (x_initialize_frame_size):
* frame.c:
* gutter.c (get_gutter_coords):
* gutter.c (calculate_gutter_size):
* gutter.h:
* gutter.h (WINDOW_REAL_TOP_GUTTER_BOUNDS):
* gutter.h (FRAME_TOP_GUTTER_BOUNDS):
* input-method-xlib.c:
* input-method-xlib.c (XIM_SetGeometry):
* redisplay-output.c (clear_left_border):
* redisplay-output.c (clear_right_border):
* redisplay-output.c (redisplay_output_pixmap):
* redisplay-output.c (redisplay_clear_region):
* redisplay-output.c (redisplay_clear_top_of_window):
* redisplay-output.c (redisplay_clear_to_window_end):
* redisplay-xlike-inc.c (XLIKE_clear_frame):
* redisplay.c:
* redisplay.c (UPDATE_CACHE_RETURN):
* redisplay.c (pixel_to_glyph_translation):
* toolbar.c (update_frame_toolbars_geometry):
* window.c (Fwindow_pixel_edges):
Get rid of some redundant macros. Consistently use the
FRAME_TOP_*_START, FRAME_RIGHT_*_END, etc. format. Rename
FRAME_*_BORDER_* to FRAME_*_INTERNAL_BORDER_*. Comment out
FRAME_BOTTOM_* for gutters and the paned area due to the
uncertainty over where the paned area actually begins. (Eventually
we should probably move the gutters outside the minibuffer so that
the paned area is contiguous.) Use FRAME_PANED_* more often in the
code to make things clearer.
Update the diagram to show that the bottom gutter is inside the
minibuffer (!) and that there are "junk boxes" when you have left
and/or right gutters (dead boxes that are mistakenly left uncleared,
unlike the corresponding scrollbar dead boxes). Update the text
appropriately to cover the bottom gutter position, etc.
Rewrite gutter-geometry code to use the FRAME_*_GUTTER_* in place of
equivalent expressions referencing other frame elements, to make the
code more portable in case we move around the gutter location.
Cleanup FRAME_*_GUTTER_BOUNDS() in gutter.h.
Add some #### GEOM! comments where I think code is incorrect --
typically, it wasn't fixed up properly when the gutter was added.
Some cosmetic changes.
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Wed, 03 Mar 2010 05:07:47 -0600 |
parents | a04cf0fea770 |
children | 7be849cb8828 |
rev | line source |
---|---|
872 | 1 /* Define frame-object for XEmacs. |
2 Copyright (C) 1988, 1992, 1993, 1994 Free Software Foundation, Inc. | |
5045 | 3 Copyright (C) 1995, 2010 Ben Wing. |
872 | 4 |
5 This file is part of XEmacs. | |
6 | |
7 XEmacs is free software; you can redistribute it and/or modify it | |
8 under the terms of the GNU General Public License as published by the | |
9 Free Software Foundation; either version 2, or (at your option) any | |
10 later version. | |
11 | |
12 XEmacs is distributed in the hope that it will be useful, but WITHOUT | |
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
18 along with XEmacs; see the file COPYING. If not, write to | |
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
20 Boston, MA 02111-1307, USA. */ | |
21 | |
22 /* Synched up with: FSF 19.30. */ | |
23 | |
24 #ifndef INCLUDED_frame_impl_h_ | |
25 #define INCLUDED_frame_impl_h_ | |
26 | |
27 #include "console-impl.h" /* for error_check_frame_type */ | |
28 #include "frame.h" | |
29 | |
30 #define FRAME_TYPE_NAME(f) ((f)->framemeths->name) | |
31 #define FRAME_TYPE(f) ((f)->framemeths->symbol) | |
32 | |
33 /******** Accessing / calling a frame method *********/ | |
34 | |
35 #define HAS_FRAMEMETH_P(f, m) HAS_CONTYPE_METH_P ((f)->framemeths, m) | |
36 #define FRAMEMETH(f, m, args) CONTYPE_METH ((f)->framemeths, m, args) | |
37 #define MAYBE_FRAMEMETH(f, m, args) \ | |
38 MAYBE_CONTYPE_METH ((f)->framemeths, m, args) | |
39 #define FRAMEMETH_OR_GIVEN(f, m, args, given) \ | |
40 CONTYPE_METH_OR_GIVEN((f)->framemeths, m, args, given) | |
41 | |
42 struct frame | |
43 { | |
3017 | 44 struct LCRECORD_HEADER header; |
872 | 45 |
46 /* Methods for this frame's console. This can also be retrieved | |
47 through frame->device->console, but it's faster this way. */ | |
48 struct console_methods *framemeths; | |
49 | |
1204 | 50 /* Duplicates framemeths->symbol. See comment in struct console. */ |
51 enum console_variant frametype; | |
52 | |
872 | 53 /* Size of text only area of this frame, excluding scrollbars, |
54 toolbars and end of line glyphs. The size can be in characters | |
55 or pixels, depending on units in which window system resizes | |
56 its windows */ | |
57 int height, width; | |
58 | |
59 /* New height and width for pending size change, in the same units | |
60 as above. 0 if no change pending. */ | |
61 int new_height, new_width; | |
62 | |
63 /* Size of text-only are of the frame, in default font characters. | |
64 This may be inaccurate due to rounding error */ | |
65 int char_height, char_width; | |
66 | |
67 /* Size of the whole frame, including scrollbars, toolbars and end | |
68 of line glyphs, in pixels */ | |
69 int pixheight, pixwidth; | |
70 | |
71 #ifdef HAVE_TTY | |
72 /* The count of frame number. This applies to TTY frames only. */ | |
73 int order_count; | |
74 #endif | |
75 | |
76 /* Current page number for a printer frame. */ | |
77 int page_number; | |
78 | |
79 /* Width of the internal border. This is a line of background color | |
80 just inside the window's border. It is normally only non-zero on | |
81 X frames, but we put it here to avoid introducing window system | |
82 dependencies. */ | |
83 int internal_border_width; | |
84 | |
85 int modiff; | |
86 | |
87 struct expose_ignore *subwindow_exposures; | |
88 struct expose_ignore *subwindow_exposures_tail; | |
89 | |
90 #ifdef HAVE_SCROLLBARS | |
91 /* frame-local scrollbar information. See scrollbar.c. */ | |
92 int scrollbar_y_offset; | |
93 | |
94 /* cache of created scrollbars */ | |
95 struct scrollbar_instance *sb_vcache; | |
96 struct scrollbar_instance *sb_hcache; | |
97 #endif | |
98 | |
99 #ifdef HAVE_TOOLBARS | |
100 /* Size of toolbars as seen by redisplay. This is used to determine | |
101 whether to re-layout windows by a call to change_frame_size early | |
102 in redisplay_frame. */ | |
5077
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
103 int current_toolbar_size[NUM_EDGES]; |
872 | 104 #endif |
105 | |
106 /* Size of gutters as seen by redisplay. This is used to determine | |
107 whether to re-layout windows by a call to change_frame_size early | |
108 in redisplay_frame. */ | |
5077
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
109 int current_gutter_bounds[NUM_EDGES]; |
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
110 |
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
111 /* Toolbar visibility */ |
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
112 int toolbar_was_visible[NUM_EDGES]; |
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
113 |
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
114 /* gutter visibility */ |
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
115 int gutter_was_visible[NUM_EDGES]; |
872 | 116 |
117 /* Dynamic arrays of display lines for gutters */ | |
5077
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
118 display_line_dynarr *current_display_lines[NUM_EDGES]; |
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
119 display_line_dynarr *desired_display_lines[NUM_EDGES]; |
872 | 120 |
1204 | 121 /* A structure of auxiliary data specific to the device type. For |
122 example, struct x_frame is for X window frames; defined in | |
123 console-x-impl.h. */ | |
872 | 124 void *frame_data; |
125 | |
126 #define FRAME_SLOT_DECLARATION | |
1204 | 127 #define MARKED_SLOT(x) Lisp_Object x; |
872 | 128 #include "frameslots.h" |
129 | |
130 /* Nonzero if frame is currently displayed. | |
131 Mutually exclusive with iconified | |
132 JV: This now a tristate flag: | |
133 Value : Emacs meaning :f-v-p : X meaning | |
134 0 : not displayed : nil : unmapped | |
135 >0 : user can access it,needs repainting : t : mapped and visible | |
136 <0 : user can access it,needs no repainting : hidden :mapped and invisible | |
137 where f-v-p is the return value of frame-visible-p */ | |
138 int visible; | |
139 | |
140 /* one-bit flags: */ | |
141 | |
142 /* Is focusing onto this frame disabled? (Modal dialog boxes) */ | |
143 unsigned int disabled :1; | |
144 | |
145 /* Are we finished initializing? */ | |
146 unsigned int init_finished :1; | |
147 | |
148 /* Is frame marked for deletion? This is used in XSetErrorHandler(). */ | |
149 unsigned int being_deleted :1; | |
150 | |
151 /* Nonzero if last attempt at redisplay on this frame was preempted. */ | |
152 unsigned int display_preempted :1; | |
153 | |
154 /* Nonzero if window is currently iconified. | |
155 This and visible are mutually exclusive. */ | |
156 unsigned int iconified :1; | |
157 | |
158 /* Nonzero if this frame should be cleared and then redrawn. | |
159 Setting this will also effectively set frame_changed. */ | |
160 unsigned int clear :1; | |
161 | |
162 /* True if frame actually has a minibuffer window on it. | |
163 0 if using a minibuffer window that isn't on this frame. */ | |
164 unsigned int has_minibuffer :1; | |
165 | |
166 /* True if frame's root window can't be split. */ | |
167 unsigned int no_split :1; | |
168 | |
169 /* redisplay flags */ | |
170 unsigned int buffers_changed :1; | |
171 unsigned int clip_changed :1; | |
172 unsigned int extents_changed :1; | |
173 unsigned int faces_changed :1; | |
174 unsigned int frame_changed :1; | |
905 | 175 unsigned int frame_layout_changed :1; /* The layout of frame |
176 elements has changed. */ | |
872 | 177 unsigned int subwindows_changed :1; |
178 unsigned int subwindows_state_changed :1; | |
179 unsigned int glyphs_changed :1; | |
180 unsigned int icon_changed :1; | |
181 unsigned int menubar_changed :1; | |
182 unsigned int modeline_changed :1; | |
183 unsigned int point_changed :1; | |
184 unsigned int size_changed :1; | |
185 unsigned int toolbar_changed :1; | |
186 unsigned int gutter_changed :1; | |
187 unsigned int windows_changed :1; | |
188 unsigned int windows_structure_changed :1; | |
189 unsigned int window_face_cache_reset :1; /* used by expose handler */ | |
190 unsigned int echo_area_garbaged :1; /* used by Fredisplay_echo_area */ | |
191 unsigned int size_slipped :1; | |
192 | |
193 unsigned int size_change_pending :1; | |
194 unsigned int mirror_dirty :1; | |
195 | |
196 /* flag indicating if any window on this frame is displaying a subwindow */ | |
197 unsigned int subwindows_being_displayed :1; | |
198 }; | |
199 | |
200 /* Redefine basic properties more efficiently */ | |
201 | |
202 #undef FRAME_LIVE_P | |
203 #define FRAME_LIVE_P(f) (!EQ (FRAME_TYPE (f), Qdead)) | |
204 #undef FRAME_DEVICE | |
205 #define FRAME_DEVICE(f) ((f)->device) | |
206 | |
207 #define FRAME_TYPE_P(f, type) EQ (FRAME_TYPE (f), Q##type) | |
208 | |
209 #ifdef ERROR_CHECK_TYPES | |
210 DECLARE_INLINE_HEADER ( | |
211 struct frame * | |
212 error_check_frame_type (struct frame * f, Lisp_Object sym) | |
213 ) | |
214 { | |
215 assert (EQ (FRAME_TYPE (f), sym)); | |
216 return f; | |
217 } | |
218 # define FRAME_TYPE_DATA(f, type) \ | |
219 ((struct type##_frame *) error_check_frame_type (f, Q##type)->frame_data) | |
220 #else | |
221 # define FRAME_TYPE_DATA(f, type) \ | |
222 ((struct type##_frame *) (f)->frame_data) | |
223 #endif | |
224 | |
225 #define CHECK_FRAME_TYPE(x, type) \ | |
226 do { \ | |
227 CHECK_FRAME (x); \ | |
228 if (!FRAME_TYPE_P (XFRAME (x), type)) \ | |
229 dead_wrong_type_argument \ | |
230 (type##_console_methods->predicate_symbol, x); \ | |
231 } while (0) | |
232 #define CONCHECK_FRAME_TYPE(x, type) \ | |
233 do { \ | |
234 CONCHECK_FRAME (x); \ | |
235 if (!FRAME_TYPE_P (XFRAME (x), type)) \ | |
236 x = wrong_type_argument \ | |
237 (type##_console_methods->predicate_symbol, x); \ | |
238 } while (0) | |
239 | |
240 #define FRAME_DISPLAY_P(frm) \ | |
241 (DEVICE_DISPLAY_P (XDEVICE (FRAME_DEVICE (frm)))) | |
242 | |
243 #define CHECK_DISPLAY_FRAME(frm) \ | |
244 do { \ | |
245 CHECK_FRAME (frm); \ | |
246 CHECK_LIVE_FRAME (frm); \ | |
247 CHECK_DISPLAY_DEVICE (FRAME_DEVICE (XFRAME (frm))); \ | |
248 } while (0) | |
249 | |
250 #define CONCHECK_DISPLAY_FRAME(frm) \ | |
251 do { \ | |
252 CONCHECK_FRAME (frm); \ | |
253 CONCHECK_LIVE_FRAME (frm); \ | |
254 CONCHECK_DISPLAY_DEVICE (FRAME_DEVICE (XFRAME (frm))); \ | |
255 } while (0) | |
256 | |
257 #define FRAME_PRINTER_P(frm) \ | |
258 (DEVICE_PRINTER_P (XDEVICE (FRAME_DEVICE (frm)))) | |
259 | |
260 #define CHECK_PRINTER_FRAME(frm) \ | |
261 do { \ | |
262 CHECK_FRAME (frm); \ | |
263 CHECK_LIVE_FRAME (frm); \ | |
264 CHECK_PRINTER_DEVICE (FRAME_DEVICE (XFRAME (frm))); \ | |
265 } while (0) | |
266 | |
267 #define CONCHECK_PRINTER_FRAME(frm) \ | |
268 do { \ | |
269 CONCHECK_FRAME (frm); \ | |
270 CONCHECK_LIVE_FRAME (frm); \ | |
271 CONCHECK_PRINTER_DEVICE (FRAME_DEVICE (XFRAME (frm))); \ | |
272 } while (0) | |
273 | |
274 /* #### These should be in the frame-*.h files but there are | |
275 too many places where the abstraction is broken. Need to | |
276 fix. */ | |
277 | |
278 #define FRAME_X_P(frm) CONSOLE_TYPESYM_X_P (FRAME_TYPE (frm)) | |
279 #define CHECK_X_FRAME(z) CHECK_FRAME_TYPE (z, x) | |
280 #define CONCHECK_X_FRAME(z) CONCHECK_FRAME_TYPE (z, x) | |
281 | |
282 #define FRAME_GTK_P(frm) CONSOLE_TYPESYM_GTK_P (FRAME_TYPE (frm)) | |
283 #define CHECK_GTK_FRAME(z) CHECK_FRAME_TYPE (z, gtk) | |
284 #define CONCHECK_GTK_FRAME(z) CONCHECK_FRAME_TYPE (z, gtk) | |
285 | |
286 #define FRAME_TTY_P(frm) CONSOLE_TYPESYM_TTY_P (FRAME_TYPE (frm)) | |
287 #define CHECK_TTY_FRAME(z) CHECK_FRAME_TYPE (z, tty) | |
288 #define CONCHECK_TTY_FRAME(z) CONCHECK_FRAME_TYPE (z, tty) | |
289 | |
290 #define FRAME_STREAM_P(frm) CONSOLE_TYPESYM_STREAM_P (FRAME_TYPE (frm)) | |
291 #define CHECK_STREAM_FRAME(z) CHECK_FRAME_TYPE (z, stream) | |
292 #define CONCHECK_STREAM_FRAME(z) CONCHECK_FRAME_TYPE (z, stream) | |
293 | |
294 #define FRAME_WIN_P(frm) CONSOLE_TYPESYM_WIN_P (FRAME_TYPE (frm)) | |
295 | |
296 extern int frame_changed; | |
297 | |
298 #define MARK_FRAME_FACES_CHANGED(f) do { \ | |
299 struct frame *mffc_f = (f); \ | |
300 mffc_f->faces_changed = 1; \ | |
301 mffc_f->modiff++; \ | |
302 if (!NILP (mffc_f->device)) \ | |
303 { \ | |
304 struct device *mffc_d = XDEVICE (mffc_f->device); \ | |
305 MARK_DEVICE_FACES_CHANGED (mffc_d); \ | |
306 } \ | |
307 else \ | |
308 faces_changed = 1; \ | |
309 } while (0) | |
310 | |
311 #define MARK_FRAME_GLYPHS_CHANGED(f) do { \ | |
312 struct frame *mfgc_f = (f); \ | |
313 mfgc_f->glyphs_changed = 1; \ | |
314 mfgc_f->modiff++; \ | |
315 if (!NILP (mfgc_f->device)) \ | |
316 { \ | |
317 struct device *mfgc_d = XDEVICE (mfgc_f->device); \ | |
318 MARK_DEVICE_GLYPHS_CHANGED (mfgc_d); \ | |
319 } \ | |
320 else \ | |
321 glyphs_changed = 1; \ | |
322 } while (0) | |
323 | |
324 #define MARK_FRAME_SUBWINDOWS_CHANGED(f) do { \ | |
325 struct frame *mfgc_f = (f); \ | |
326 mfgc_f->subwindows_changed = 1; \ | |
327 mfgc_f->modiff++; \ | |
328 if (!NILP (mfgc_f->device)) \ | |
329 { \ | |
330 struct device *mfgc_d = XDEVICE (mfgc_f->device); \ | |
331 MARK_DEVICE_SUBWINDOWS_CHANGED (mfgc_d); \ | |
332 } \ | |
333 else \ | |
334 subwindows_changed = 1; \ | |
335 } while (0) | |
336 | |
337 #define MARK_FRAME_SUBWINDOWS_STATE_CHANGED(f) do { \ | |
338 struct frame *mfgc_f = (f); \ | |
339 mfgc_f->subwindows_state_changed = 1; \ | |
340 mfgc_f->modiff++; \ | |
341 if (!NILP (mfgc_f->device)) \ | |
342 { \ | |
343 struct device *mfgc_d = XDEVICE (mfgc_f->device); \ | |
344 MARK_DEVICE_SUBWINDOWS_STATE_CHANGED (mfgc_d); \ | |
345 } \ | |
346 else \ | |
347 subwindows_state_changed = 1; \ | |
348 } while (0) | |
349 | |
350 #define MARK_FRAME_TOOLBARS_CHANGED(f) do { \ | |
351 struct frame *mftc_f = (f); \ | |
352 mftc_f->toolbar_changed = 1; \ | |
353 mftc_f->modiff++; \ | |
354 if (!NILP (mftc_f->device)) \ | |
355 { \ | |
356 struct device *mftc_d = XDEVICE (mftc_f->device); \ | |
357 MARK_DEVICE_TOOLBARS_CHANGED (mftc_d); \ | |
358 } \ | |
359 else \ | |
360 toolbar_changed = 1; \ | |
361 } while (0) | |
362 | |
363 #define MARK_FRAME_GUTTERS_CHANGED(f) do { \ | |
364 struct frame *mftc_f = (f); \ | |
365 mftc_f->gutter_changed = 1; \ | |
366 mftc_f->modiff++; \ | |
367 if (!NILP (mftc_f->device)) \ | |
368 { \ | |
369 struct device *mftc_d = XDEVICE (mftc_f->device); \ | |
370 MARK_DEVICE_GUTTERS_CHANGED (mftc_d); \ | |
371 } \ | |
372 else \ | |
373 gutter_changed = 1; \ | |
374 } while (0) | |
375 | |
376 #define MARK_FRAME_SIZE_CHANGED(f) do { \ | |
377 struct frame *mfsc_f = (f); \ | |
378 mfsc_f->size_changed = 1; \ | |
379 mfsc_f->size_change_pending = 1; \ | |
380 mfsc_f->modiff++; \ | |
381 if (!NILP (mfsc_f->device)) \ | |
382 { \ | |
383 struct device *mfsc_d = XDEVICE (mfsc_f->device); \ | |
384 MARK_DEVICE_SIZE_CHANGED (mfsc_d); \ | |
385 } \ | |
386 else \ | |
387 size_changed = 1; \ | |
388 } while (0) | |
389 | |
390 #define MARK_FRAME_CHANGED(f) do { \ | |
391 struct frame *mfc_f = (f); \ | |
392 mfc_f->frame_changed = 1; \ | |
393 mfc_f->modiff++; \ | |
394 if (!NILP (mfc_f->device)) \ | |
395 { \ | |
396 struct device *mfc_d = XDEVICE (mfc_f->device); \ | |
397 MARK_DEVICE_FRAME_CHANGED (mfc_d); \ | |
398 } \ | |
399 else \ | |
400 frame_changed = 1; \ | |
401 } while (0) | |
402 | |
905 | 403 #define MARK_FRAME_LAYOUT_CHANGED(f) do { \ |
404 struct frame *mfc_f = (f); \ | |
405 mfc_f->frame_layout_changed = 1; \ | |
406 mfc_f->modiff++; \ | |
407 if (!NILP (mfc_f->device)) \ | |
408 { \ | |
409 struct device *mfc_d = XDEVICE (mfc_f->device); \ | |
410 MARK_DEVICE_FRAME_LAYOUT_CHANGED (mfc_d); \ | |
411 } \ | |
412 else \ | |
413 frame_layout_changed = 1; \ | |
414 } while (0) | |
415 | |
872 | 416 #define MARK_FRAME_WINDOWS_CHANGED(f) do { \ |
417 struct frame *mfwc_f = (f); \ | |
418 mfwc_f->windows_changed = 1; \ | |
419 mfwc_f->modiff++; \ | |
420 if (!NILP (mfwc_f->device)) \ | |
421 { \ | |
422 struct device *mfwc_d = XDEVICE (mfwc_f->device); \ | |
423 MARK_DEVICE_WINDOWS_CHANGED (mfwc_d); \ | |
424 } \ | |
425 else \ | |
426 windows_changed = 1; \ | |
427 } while (0) | |
428 | |
429 #define MARK_FRAME_WINDOWS_STRUCTURE_CHANGED(f) do { \ | |
430 struct frame *fwsc_f = (f); \ | |
431 fwsc_f->windows_structure_changed = 1; \ | |
432 fwsc_f->modiff++; \ | |
433 if (!NILP (fwsc_f->device)) \ | |
434 { \ | |
435 struct device *fwsc_d = XDEVICE (fwsc_f->device); \ | |
436 MARK_DEVICE_WINDOWS_STRUCTURE_CHANGED (fwsc_d); \ | |
437 } \ | |
438 else \ | |
439 windows_structure_changed = 1; \ | |
440 invalidate_vertical_divider_cache_in_frame (fwsc_f); \ | |
441 } while (0) | |
442 | |
443 #define MARK_FRAME_SIZE_SLIPPED(f) do { \ | |
444 struct frame *fwsc_f = (f); \ | |
445 fwsc_f->size_slipped = 1; \ | |
446 fwsc_f->modiff++; \ | |
447 if (!NILP (fwsc_f->device)) \ | |
448 { \ | |
449 struct device *fwsc_d = XDEVICE (fwsc_f->device); \ | |
450 MARK_DEVICE_FRAME_CHANGED (fwsc_d); \ | |
451 } \ | |
452 else \ | |
453 frame_changed = 1; \ | |
454 } while (0) | |
455 | |
456 #define CLEAR_FRAME_SIZE_SLIPPED(f) do { \ | |
457 struct frame *fwsc_f = (f); \ | |
458 fwsc_f->size_slipped = 0; \ | |
459 } while (0) | |
460 | |
461 #define SET_FRAME_CLEAR(f) MARK_FRAME_CHANGED (f); (f)->clear = 1 | |
462 | |
463 #define FRAME_MINIBUF_ONLY_P(f) \ | |
464 EQ (FRAME_ROOT_WINDOW (f), FRAME_MINIBUF_WINDOW (f)) | |
465 #define FRAME_HAS_MINIBUF_P(f) ((f)->has_minibuffer) | |
466 #define FRAME_HEIGHT(f) ((f)->height) | |
467 #define FRAME_WIDTH(f) ((f)->width) | |
468 #define FRAME_CHARHEIGHT(f) ((f)->char_height) | |
469 #define FRAME_CHARWIDTH(f) ((f)->char_width) | |
470 #define FRAME_PIXHEIGHT(f) ((f)->pixheight) | |
471 #define FRAME_PIXWIDTH(f) ((f)->pixwidth) | |
472 #define FRAME_PAGENUMBER(f) ((f)->page_number + 0) | |
473 #define FRAME_SET_PAGENUMBER(f,x) (f)->page_number = (x); | |
474 #ifdef HAVE_SCROLLBARS | |
475 #define FRAME_SCROLLBAR_WIDTH(f) \ | |
476 (NILP ((f)->vertical_scrollbar_visible_p) ? \ | |
477 0 : XINT ((f)->scrollbar_width)) | |
478 #define FRAME_SCROLLBAR_HEIGHT(f) \ | |
479 (NILP ((f)->horizontal_scrollbar_visible_p) ? \ | |
480 0 : XINT ((f)->scrollbar_height)) | |
481 #else | |
482 #define FRAME_SCROLLBAR_WIDTH(f) 0 | |
483 #define FRAME_SCROLLBAR_HEIGHT(f) 0 | |
484 #endif | |
485 | |
486 #define FRAME_NEW_HEIGHT(f) ((f)->new_height) | |
487 #define FRAME_NEW_WIDTH(f) ((f)->new_width) | |
488 #define FRAME_CURSOR_X(f) ((f)->cursor_x) | |
489 #define FRAME_CURSOR_Y(f) ((f)->cursor_y) | |
490 #define FRAME_VISIBLE_P(f) ((f)->visible) | |
491 #define FRAME_REPAINT_P(f) ((f)->visible>0) | |
492 #define FRAME_NO_SPLIT_P(f) ((f)->no_split) | |
493 #define FRAME_ICONIFIED_P(f) ((f)->iconified) | |
494 #define FRAME_FOCUS_FRAME(f) ((f)->focus_frame) | |
495 #define FRAME_MINIBUF_WINDOW(f) ((f)->minibuffer_window) | |
496 #define FRAME_ROOT_WINDOW(f) ((f)->root_window) | |
497 /* Catch people attempting to set this. */ | |
498 #define FRAME_SELECTED_WINDOW(f) NON_LVALUE ((f)->selected_window) | |
499 #define FRAME_SELECTED_XWINDOW(f) XWINDOW (FRAME_SELECTED_WINDOW (f)) | |
500 #define FRAME_LAST_NONMINIBUF_WINDOW(f) \ | |
501 NON_LVALUE ((f)->last_nonminibuf_window) | |
502 #define FRAME_SB_VCACHE(f) ((f)->sb_vcache) | |
503 #define FRAME_SB_HCACHE(f) ((f)->sb_hcache) | |
504 #define FRAME_SUBWINDOW_CACHE(f) ((f)->subwindow_instance_cache) | |
505 | |
506 #if 0 /* FSFmacs */ | |
507 | |
508 #define FRAME_VISIBLE_P(f) ((f)->visible != 0) | |
509 #define FRAME_SET_VISIBLE(f,p) \ | |
510 ((f)->async_visible = (p), FRAME_SAMPLE_VISIBILITY (f)) | |
511 | |
512 /* Emacs's redisplay code could become confused if a frame's | |
513 visibility changes at arbitrary times. For example, if a frame is | |
514 visible while the desired glyphs are being built, but becomes | |
515 invisible before they are updated, then some rows of the | |
516 desired_glyphs will be left marked as enabled after redisplay is | |
517 complete, which should never happen. The next time the frame | |
518 becomes visible, redisplay will probably barf. | |
519 | |
520 Currently, there are no similar situations involving iconified, but | |
521 the principle is the same. | |
522 | |
523 So instead of having asynchronous input handlers directly set and | |
524 clear the frame's visibility and iconification flags, they just set | |
525 the async_visible and async_iconified flags; the redisplay code | |
526 calls the FRAME_SAMPLE_VISIBILITY macro before doing any redisplay, | |
527 which sets visible and iconified from their asynchronous | |
528 counterparts. | |
529 | |
530 Synchronous code must use the FRAME_SET_VISIBLE macro. | |
531 | |
532 Also, if a frame used to be invisible, but has just become visible, | |
533 it must be marked as garbaged, since redisplay hasn't been keeping | |
534 up its contents. */ | |
535 #define FRAME_SAMPLE_VISIBILITY(f) \ | |
536 (((f)->async_visible && ! (f)->visible) ? SET_FRAME_GARBAGED (f) : 0, \ | |
537 (f)->visible = (f)->async_visible, \ | |
538 (f)->iconified = (f)->async_iconified) | |
539 | |
540 #endif /* FSFmacs */ | |
541 | |
5045 | 542 #define FRAME_INTERNAL_BORDER_WIDTH(f) ((f)->internal_border_width) |
543 #define FRAME_INTERNAL_BORDER_HEIGHT(f) ((f)->internal_border_width) | |
544 #define FRAME_INTERNAL_BORDER_SIZE(f, pos) ((f)->internal_border_width) | |
545 | |
546 /************************************************************************/ | |
547 /* toolbars */ | |
548 /************************************************************************/ | |
549 | |
550 /*---------------- Theoretical and real toolbar values ----------------*/ | |
551 | |
872 | 552 |
553 /* This returns the frame-local value; that tells you what you should | |
554 use when computing the frame size. It is *not* the actual toolbar | |
555 size because that depends on the selected window. Use the macros | |
556 below for that. | |
557 */ | |
558 | |
559 #ifdef HAVE_TOOLBARS | |
560 #define FRAME_RAW_THEORETICAL_TOOLBAR_VISIBLE(f, pos) \ | |
561 (!NILP((f)->toolbar_buttons[pos]) && !NILP ((f)->toolbar_visible_p[pos])) | |
562 #define FRAME_RAW_THEORETICAL_TOOLBAR_SIZE(f, pos) \ | |
563 (!NILP ((f)->toolbar_buttons[pos]) && INTP((f)->toolbar_size[pos]) ? \ | |
564 (XINT ((f)->toolbar_size[pos])) : 0) | |
565 #define FRAME_RAW_THEORETICAL_TOOLBAR_BORDER_WIDTH(f, pos) \ | |
566 (!NILP ((f)->toolbar_buttons[pos]) && INTP((f)->toolbar_border_width[pos]) ? \ | |
567 (XINT ((f)->toolbar_border_width[pos])) : 0) | |
568 #else | |
569 #define FRAME_RAW_THEORETICAL_TOOLBAR_VISIBLE(f, pos) 0 | |
570 #define FRAME_RAW_THEORETICAL_TOOLBAR_SIZE(f, pos) 0 | |
571 #define FRAME_RAW_THEORETICAL_TOOLBAR_BORDER_WIDTH(f, pos) 0 | |
572 #endif | |
573 | |
574 #define FRAME_THEORETICAL_TOOLBAR_SIZE(f, pos) \ | |
575 (FRAME_RAW_THEORETICAL_TOOLBAR_VISIBLE (f, pos) \ | |
576 ? FRAME_RAW_THEORETICAL_TOOLBAR_SIZE (f, pos) \ | |
577 : 0) | |
578 | |
579 #define FRAME_THEORETICAL_TOP_TOOLBAR_HEIGHT(f) \ | |
5077
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
580 FRAME_THEORETICAL_TOOLBAR_SIZE (f, TOP_EDGE) |
872 | 581 #define FRAME_THEORETICAL_BOTTOM_TOOLBAR_HEIGHT(f) \ |
5077
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
582 FRAME_THEORETICAL_TOOLBAR_SIZE (f, BOTTOM_EDGE) |
872 | 583 #define FRAME_THEORETICAL_LEFT_TOOLBAR_WIDTH(f) \ |
5077
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
584 FRAME_THEORETICAL_TOOLBAR_SIZE (f, LEFT_EDGE) |
872 | 585 #define FRAME_THEORETICAL_RIGHT_TOOLBAR_WIDTH(f) \ |
5077
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
586 FRAME_THEORETICAL_TOOLBAR_SIZE (f, RIGHT_EDGE) |
872 | 587 |
588 #define FRAME_THEORETICAL_TOOLBAR_BORDER_WIDTH(f, pos) \ | |
589 (FRAME_RAW_THEORETICAL_TOOLBAR_VISIBLE (f, pos) \ | |
590 ? FRAME_RAW_THEORETICAL_TOOLBAR_BORDER_WIDTH (f, pos) \ | |
591 : 0) | |
592 | |
593 #define FRAME_THEORETICAL_TOP_TOOLBAR_BORDER_WIDTH(f) \ | |
5077
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
594 FRAME_THEORETICAL_TOOLBAR_BORDER_WIDTH (f, TOP_EDGE) |
872 | 595 #define FRAME_THEORETICAL_BOTTOM_TOOLBAR_BORDER_WIDTH(f) \ |
5077
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
596 FRAME_THEORETICAL_TOOLBAR_BORDER_WIDTH (f, BOTTOM_EDGE) |
872 | 597 #define FRAME_THEORETICAL_LEFT_TOOLBAR_BORDER_WIDTH(f) \ |
5077
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
598 FRAME_THEORETICAL_TOOLBAR_BORDER_WIDTH (f, LEFT_EDGE) |
872 | 599 #define FRAME_THEORETICAL_RIGHT_TOOLBAR_BORDER_WIDTH(f) \ |
5077
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
600 FRAME_THEORETICAL_TOOLBAR_BORDER_WIDTH (f, RIGHT_EDGE) |
872 | 601 |
602 /* This returns the window-local value rather than the frame-local value; | |
603 that tells you about what's actually visible rather than what should | |
604 be used when computing the frame size. */ | |
605 | |
606 #ifdef HAVE_TOOLBARS | |
607 #define FRAME_RAW_REAL_TOOLBAR_VISIBLE(f, pos) \ | |
608 (HAS_FRAMEMETH_P (f, initialize_frame_toolbars) \ | |
609 && !NILP (XWINDOW (FRAME_LAST_NONMINIBUF_WINDOW (f))->toolbar_visible_p[pos])) | |
610 #define FRAME_RAW_REAL_TOOLBAR_BORDER_WIDTH(f, pos) \ | |
611 ((INTP (XWINDOW \ | |
612 (FRAME_LAST_NONMINIBUF_WINDOW (f))->toolbar_border_width[pos])) ? \ | |
613 (XINT (XWINDOW \ | |
614 (FRAME_LAST_NONMINIBUF_WINDOW (f))->toolbar_border_width[pos])) \ | |
615 : 0) | |
616 #define FRAME_RAW_REAL_TOOLBAR_SIZE(f, pos) \ | |
617 ((INTP (XWINDOW \ | |
618 (FRAME_LAST_NONMINIBUF_WINDOW (f))->toolbar_size[pos])) ? \ | |
619 (XINT (XWINDOW \ | |
620 (FRAME_LAST_NONMINIBUF_WINDOW (f))->toolbar_size[pos])) : 0) | |
621 #define FRAME_REAL_TOOLBAR(f, pos) \ | |
622 (XWINDOW (FRAME_LAST_NONMINIBUF_WINDOW (f))->toolbar[pos]) | |
623 #else | |
624 #define FRAME_RAW_REAL_TOOLBAR_VISIBLE(f, pos) 0 | |
625 #define FRAME_RAW_REAL_TOOLBAR_BORDER_WIDTH(f, pos) 0 | |
626 #define FRAME_RAW_REAL_TOOLBAR_SIZE(f, pos) 0 | |
627 #define FRAME_REAL_TOOLBAR(f, pos) Qnil | |
628 #endif | |
629 | |
630 /* Note to Chuck | |
631 Note to Chuck | |
632 Note to Chuck: | |
633 | |
634 The former definitions of FRAME_REAL_FOO_TOOLBAR_VISIBLE | |
635 looked at the toolbar data to see what was there. The | |
636 current ones look at the current values of the specifiers. | |
637 This is a semantic change; the former definition returned | |
638 what was *actually* there right at the moment, while the | |
639 current one returns what *ought* to be there once redisplay | |
640 has run to completion. I think this new definition is more | |
641 correct in almost all circumstances and is much less likely | |
642 to lead to strange race conditions. I'm not completely | |
643 sure that there aren't some places in the redisplay code | |
644 that use these macros and expect the former semantics, so | |
645 if you encounter some odd toolbar behavior, you might want | |
646 to look into this. --ben */ | |
647 | |
648 #define FRAME_REAL_TOOLBAR_VISIBLE(f, pos) \ | |
649 ((!NILP (FRAME_REAL_TOOLBAR (f, pos)) \ | |
650 && FRAME_RAW_REAL_TOOLBAR_SIZE (f, pos) > 0) \ | |
651 ? FRAME_RAW_REAL_TOOLBAR_VISIBLE (f, pos) \ | |
652 : 0) | |
653 #define FRAME_REAL_TOOLBAR_SIZE(f, pos) \ | |
654 ((!NILP (FRAME_REAL_TOOLBAR (f, pos)) \ | |
655 && FRAME_RAW_REAL_TOOLBAR_VISIBLE (f, pos)) \ | |
656 ? FRAME_RAW_REAL_TOOLBAR_SIZE (f, pos) \ | |
657 : 0) | |
658 #define FRAME_REAL_TOOLBAR_BORDER_WIDTH(f, pos) \ | |
659 ((!NILP (FRAME_REAL_TOOLBAR (f, pos)) \ | |
660 && FRAME_RAW_REAL_TOOLBAR_VISIBLE (f, pos)) \ | |
661 ? FRAME_RAW_REAL_TOOLBAR_BORDER_WIDTH (f, pos) \ | |
662 : 0) | |
663 | |
5045 | 664 #define FRAME_REAL_TOOLBAR_BOUNDS(f, pos) \ |
665 (FRAME_REAL_TOOLBAR_SIZE (f, pos) + \ | |
666 2 * FRAME_REAL_TOOLBAR_BORDER_WIDTH (f, pos)) | |
667 | |
872 | 668 #define FRAME_REAL_TOP_TOOLBAR_HEIGHT(f) \ |
5077
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
669 FRAME_REAL_TOOLBAR_SIZE (f, TOP_EDGE) |
872 | 670 #define FRAME_REAL_BOTTOM_TOOLBAR_HEIGHT(f) \ |
5077
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
671 FRAME_REAL_TOOLBAR_SIZE (f, BOTTOM_EDGE) |
872 | 672 #define FRAME_REAL_LEFT_TOOLBAR_WIDTH(f) \ |
5077
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
673 FRAME_REAL_TOOLBAR_SIZE (f, LEFT_EDGE) |
872 | 674 #define FRAME_REAL_RIGHT_TOOLBAR_WIDTH(f) \ |
5077
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
675 FRAME_REAL_TOOLBAR_SIZE (f, RIGHT_EDGE) |
872 | 676 |
677 #define FRAME_REAL_TOP_TOOLBAR_BORDER_WIDTH(f) \ | |
5077
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
678 FRAME_REAL_TOOLBAR_BORDER_WIDTH (f, TOP_EDGE) |
872 | 679 #define FRAME_REAL_BOTTOM_TOOLBAR_BORDER_WIDTH(f) \ |
5077
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
680 FRAME_REAL_TOOLBAR_BORDER_WIDTH (f, BOTTOM_EDGE) |
872 | 681 #define FRAME_REAL_LEFT_TOOLBAR_BORDER_WIDTH(f) \ |
5077
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
682 FRAME_REAL_TOOLBAR_BORDER_WIDTH (f, LEFT_EDGE) |
872 | 683 #define FRAME_REAL_RIGHT_TOOLBAR_BORDER_WIDTH(f) \ |
5077
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
684 FRAME_REAL_TOOLBAR_BORDER_WIDTH (f, RIGHT_EDGE) |
872 | 685 |
686 #define FRAME_REAL_TOP_TOOLBAR_VISIBLE(f) \ | |
5077
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
687 FRAME_REAL_TOOLBAR_VISIBLE (f, TOP_EDGE) |
872 | 688 #define FRAME_REAL_BOTTOM_TOOLBAR_VISIBLE(f) \ |
5077
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
689 FRAME_REAL_TOOLBAR_VISIBLE (f, BOTTOM_EDGE) |
872 | 690 #define FRAME_REAL_LEFT_TOOLBAR_VISIBLE(f) \ |
5077
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
691 FRAME_REAL_TOOLBAR_VISIBLE (f, LEFT_EDGE) |
872 | 692 #define FRAME_REAL_RIGHT_TOOLBAR_VISIBLE(f) \ |
5077
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
693 FRAME_REAL_TOOLBAR_VISIBLE (f, RIGHT_EDGE) |
872 | 694 |
5045 | 695 #define FRAME_REAL_TOP_TOOLBAR_BOUNDS(f) \ |
5077
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
696 FRAME_REAL_TOOLBAR_BOUNDS (f, TOP_EDGE) |
5045 | 697 #define FRAME_REAL_BOTTOM_TOOLBAR_BOUNDS(f) \ |
5077
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
698 FRAME_REAL_TOOLBAR_BOUNDS (f, BOTTOM_EDGE) |
5045 | 699 #define FRAME_REAL_LEFT_TOOLBAR_BOUNDS(f) \ |
5077
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
700 FRAME_REAL_TOOLBAR_BOUNDS (f, LEFT_EDGE) |
5045 | 701 #define FRAME_REAL_RIGHT_TOOLBAR_BOUNDS(f) \ |
5077
d372b17f63ce
clean up toolbar/gutter edge geometry
Ben Wing <ben@xemacs.org>
parents:
5045
diff
changeset
|
702 FRAME_REAL_TOOLBAR_BOUNDS (f, RIGHT_EDGE) |
5045 | 703 |
704 /************************************************************************/ | |
705 /* frame dimensions defined using toolbars and gutters */ | |
706 /************************************************************************/ | |
707 | |
5078
a04cf0fea770
fix for clipped minibuffer window
Ben Wing <ben@xemacs.org>
parents:
5077
diff
changeset
|
708 /* Bounds of the area framed by the toolbars is the client area -- |
a04cf0fea770
fix for clipped minibuffer window
Ben Wing <ben@xemacs.org>
parents:
5077
diff
changeset
|
709 (0, 0) - (FRAME_PIXWIDTH, FRAME_PIXHEIGHT). */ |
a04cf0fea770
fix for clipped minibuffer window
Ben Wing <ben@xemacs.org>
parents:
5077
diff
changeset
|
710 |
5090 | 711 /* Bounds of the area framed by the internal border width -- inside of the |
712 toolbars, outside of everything else. */ | |
713 | |
714 #define FRAME_TOP_INTERNAL_BORDER_START(f) \ | |
715 FRAME_REAL_TOP_TOOLBAR_BOUNDS (f) | |
716 #define FRAME_TOP_INTERNAL_BORDER_END(f) \ | |
717 (FRAME_TOP_INTERNAL_BORDER_START (f) + FRAME_INTERNAL_BORDER_HEIGHT (f)) | |
5078
a04cf0fea770
fix for clipped minibuffer window
Ben Wing <ben@xemacs.org>
parents:
5077
diff
changeset
|
718 |
5090 | 719 #define FRAME_BOTTOM_INTERNAL_BORDER_START(f) \ |
720 (FRAME_BOTTOM_INTERNAL_BORDER_END (f) - FRAME_INTERNAL_BORDER_HEIGHT (f)) | |
721 #define FRAME_BOTTOM_INTERNAL_BORDER_END(f) \ | |
722 (FRAME_PIXHEIGHT (f) - FRAME_REAL_BOTTOM_TOOLBAR_BOUNDS (f)) | |
723 | |
724 #define FRAME_LEFT_INTERNAL_BORDER_START(f) \ | |
725 FRAME_REAL_LEFT_TOOLBAR_BOUNDS (f) | |
726 #define FRAME_LEFT_INTERNAL_BORDER_END(f) \ | |
727 (FRAME_LEFT_INTERNAL_BORDER_START (f) + FRAME_INTERNAL_BORDER_WIDTH (f)) | |
728 | |
729 #define FRAME_RIGHT_INTERNAL_BORDER_START(f) \ | |
730 (FRAME_RIGHT_INTERNAL_BORDER_END (f) - FRAME_INTERNAL_BORDER_WIDTH (f)) | |
731 #define FRAME_RIGHT_INTERNAL_BORDER_END(f) \ | |
732 (FRAME_PIXWIDTH (f) - FRAME_REAL_RIGHT_TOOLBAR_BOUNDS (f)) | |
5078
a04cf0fea770
fix for clipped minibuffer window
Ben Wing <ben@xemacs.org>
parents:
5077
diff
changeset
|
733 |
5090 | 734 /* Bounds of the area framed by the gutter -- inside of the |
735 toolbars and internal border width. */ | |
736 | |
737 #define FRAME_TOP_GUTTER_START(f) \ | |
738 FRAME_TOP_INTERNAL_BORDER_END (f) | |
739 #define FRAME_TOP_GUTTER_END(f) \ | |
740 (FRAME_TOP_GUTTER_START (f) + FRAME_TOP_GUTTER_BOUNDS (f)) | |
5078
a04cf0fea770
fix for clipped minibuffer window
Ben Wing <ben@xemacs.org>
parents:
5077
diff
changeset
|
741 |
5090 | 742 #ifdef BOTTOM_GUTTER_IS_OUTSIDE_MINIBUFFER |
743 #define FRAME_BOTTOM_GUTTER_START(f) \ | |
744 (FRAME_BOTTOM_GUTTER_END (f) - FRAME_BOTTOM_GUTTER_BOUNDS (f)) | |
745 #define FRAME_BOTTOM_GUTTER_END(f) \ | |
746 FRAME_BOTTOM_INTERNAL_BORDER_START (f) | |
747 #endif /* BOTTOM_GUTTER_IS_OUTSIDE_MINIBUFFER */ | |
748 | |
749 #define FRAME_LEFT_GUTTER_START(f) \ | |
750 FRAME_LEFT_INTERNAL_BORDER_END (f) | |
751 #define FRAME_LEFT_GUTTER_END(f) \ | |
752 (FRAME_LEFT_GUTTER_START (f) + FRAME_LEFT_GUTTER_BOUNDS (f)) | |
753 | |
754 #define FRAME_RIGHT_GUTTER_START(f) \ | |
755 (FRAME_RIGHT_GUTTER_END (f) - FRAME_RIGHT_GUTTER_BOUNDS (f)) | |
756 #define FRAME_RIGHT_GUTTER_END(f) \ | |
757 FRAME_RIGHT_INTERNAL_BORDER_START (f) | |
5078
a04cf0fea770
fix for clipped minibuffer window
Ben Wing <ben@xemacs.org>
parents:
5077
diff
changeset
|
758 |
a04cf0fea770
fix for clipped minibuffer window
Ben Wing <ben@xemacs.org>
parents:
5077
diff
changeset
|
759 /* These are the bounds of the paned area -- inside of the toolbars, |
a04cf0fea770
fix for clipped minibuffer window
Ben Wing <ben@xemacs.org>
parents:
5077
diff
changeset
|
760 gutters, and internal border width. The paned area is the same as the |
a04cf0fea770
fix for clipped minibuffer window
Ben Wing <ben@xemacs.org>
parents:
5077
diff
changeset
|
761 area occupied by windows, including the minibuffer. See long comment in |
a04cf0fea770
fix for clipped minibuffer window
Ben Wing <ben@xemacs.org>
parents:
5077
diff
changeset
|
762 frame.c. */ |
a04cf0fea770
fix for clipped minibuffer window
Ben Wing <ben@xemacs.org>
parents:
5077
diff
changeset
|
763 |
5090 | 764 #define FRAME_PANED_TOP_EDGE(f) FRAME_TOP_GUTTER_END (f) |
765 #ifdef BOTTOM_GUTTER_IS_OUTSIDE_MINIBUFFER | |
766 #define FRAME_PANED_BOTTOM_EDGE(f) FRAME_BOTTOM_GUTTER_START (f) | |
767 #endif /* BOTTOM_GUTTER_IS_OUTSIDE_MINIBUFFER */ | |
768 #define FRAME_PANED_LEFT_EDGE(f) FRAME_LEFT_GUTTER_END (f) | |
769 #define FRAME_PANED_RIGHT_EDGE(f) FRAME_RIGHT_GUTTER_START (f) | |
5078
a04cf0fea770
fix for clipped minibuffer window
Ben Wing <ben@xemacs.org>
parents:
5077
diff
changeset
|
770 |
a04cf0fea770
fix for clipped minibuffer window
Ben Wing <ben@xemacs.org>
parents:
5077
diff
changeset
|
771 /* Thickness of non-paned area at edge of frame; |
a04cf0fea770
fix for clipped minibuffer window
Ben Wing <ben@xemacs.org>
parents:
5077
diff
changeset
|
772 |
a04cf0fea770
fix for clipped minibuffer window
Ben Wing <ben@xemacs.org>
parents:
5077
diff
changeset
|
773 FRAME_PANED_TOP_EDGE (f) == FRAME_NONPANED_SIZE (f, TOP_EDGE) |
a04cf0fea770
fix for clipped minibuffer window
Ben Wing <ben@xemacs.org>
parents:
5077
diff
changeset
|
774 FRAME_PANED_LEFT_EDGE (f) == FRAME_NONPANED_SIZE (f, LEFT_EDGE) |
a04cf0fea770
fix for clipped minibuffer window
Ben Wing <ben@xemacs.org>
parents:
5077
diff
changeset
|
775 FRAME_PANED_BOTTOM_EDGE (f) == |
a04cf0fea770
fix for clipped minibuffer window
Ben Wing <ben@xemacs.org>
parents:
5077
diff
changeset
|
776 FRAME_PIXHEIGHT (f) - FRAME_NONPANED_SIZE (f, BOTTOM_EDGE) |
a04cf0fea770
fix for clipped minibuffer window
Ben Wing <ben@xemacs.org>
parents:
5077
diff
changeset
|
777 FRAME_PANED_RIGHT_EDGE (f) == |
a04cf0fea770
fix for clipped minibuffer window
Ben Wing <ben@xemacs.org>
parents:
5077
diff
changeset
|
778 FRAME_PIXWIDTH (f) - FRAME_NONPANED_SIZE (f, RIGHT_EDGE) |
a04cf0fea770
fix for clipped minibuffer window
Ben Wing <ben@xemacs.org>
parents:
5077
diff
changeset
|
779 |
a04cf0fea770
fix for clipped minibuffer window
Ben Wing <ben@xemacs.org>
parents:
5077
diff
changeset
|
780 */ |
a04cf0fea770
fix for clipped minibuffer window
Ben Wing <ben@xemacs.org>
parents:
5077
diff
changeset
|
781 #define FRAME_NONPANED_SIZE(f, pos) \ |
5090 | 782 (FRAME_REAL_TOOLBAR_BOUNDS (f, pos) + FRAME_INTERNAL_BORDER_SIZE (f, pos) + \ |
783 FRAME_GUTTER_BOUNDS (f, pos)) | |
5078
a04cf0fea770
fix for clipped minibuffer window
Ben Wing <ben@xemacs.org>
parents:
5077
diff
changeset
|
784 |
a04cf0fea770
fix for clipped minibuffer window
Ben Wing <ben@xemacs.org>
parents:
5077
diff
changeset
|
785 |
a04cf0fea770
fix for clipped minibuffer window
Ben Wing <ben@xemacs.org>
parents:
5077
diff
changeset
|
786 |
872 | 787 #endif /* INCLUDED_frame_impl_h_ */ |