diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/frame.c | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/src/frame.c b/src/frame.c index d5b080d688a..a86f05191a8 100644 --- a/src/frame.c +++ b/src/frame.c | |||
| @@ -341,7 +341,9 @@ DEFUN ("frame-windows-min-size", Fframe_windows_min_size, | |||
| 341 | * of `window-min-height' (`window-min-width' if HORIZONTAL is non-nil). | 341 | * of `window-min-height' (`window-min-width' if HORIZONTAL is non-nil). |
| 342 | * With IGNORE non-nil the values of these variables are ignored. | 342 | * With IGNORE non-nil the values of these variables are ignored. |
| 343 | * | 343 | * |
| 344 | * In either case, never return a value less than 1. | 344 | * In either case, never return a value less than 1. For TTY frames, |
| 345 | * additionally limit the minimum frame height to a value large enough | ||
| 346 | * to support the menu bar, the mode line, and the echo area. | ||
| 345 | */ | 347 | */ |
| 346 | static int | 348 | static int |
| 347 | frame_windows_min_size (Lisp_Object frame, Lisp_Object horizontal, | 349 | frame_windows_min_size (Lisp_Object frame, Lisp_Object horizontal, |
| @@ -349,6 +351,7 @@ frame_windows_min_size (Lisp_Object frame, Lisp_Object horizontal, | |||
| 349 | { | 351 | { |
| 350 | struct frame *f = XFRAME (frame); | 352 | struct frame *f = XFRAME (frame); |
| 351 | Lisp_Object par_size; | 353 | Lisp_Object par_size; |
| 354 | int retval; | ||
| 352 | 355 | ||
| 353 | if ((!NILP (horizontal) | 356 | if ((!NILP (horizontal) |
| 354 | && NUMBERP (par_size = get_frame_param (f, Qmin_width))) | 357 | && NUMBERP (par_size = get_frame_param (f, Qmin_width))) |
| @@ -361,15 +364,27 @@ frame_windows_min_size (Lisp_Object frame, Lisp_Object horizontal, | |||
| 361 | if (min_size < 1) | 364 | if (min_size < 1) |
| 362 | min_size = 1; | 365 | min_size = 1; |
| 363 | 366 | ||
| 364 | return (NILP (pixelwise) | 367 | retval = (NILP (pixelwise) |
| 365 | ? min_size | 368 | ? min_size |
| 366 | : min_size * (NILP (horizontal) | 369 | : min_size * (NILP (horizontal) |
| 367 | ? FRAME_LINE_HEIGHT (f) | 370 | ? FRAME_LINE_HEIGHT (f) |
| 368 | : FRAME_COLUMN_WIDTH (f))); | 371 | : FRAME_COLUMN_WIDTH (f))); |
| 369 | } | 372 | } |
| 370 | else | 373 | else |
| 371 | return XINT (call4 (Qframe_windows_min_size, frame, horizontal, | 374 | retval = XINT (call4 (Qframe_windows_min_size, frame, horizontal, |
| 372 | ignore, pixelwise)); | 375 | ignore, pixelwise)); |
| 376 | /* Don't allow too small height of text-mode frames, or else cm.c | ||
| 377 | might abort in cmcheckmagic. */ | ||
| 378 | if ((FRAME_TERMCAP_P (f) || FRAME_MSDOS_P (f)) && NILP (horizontal)) | ||
| 379 | { | ||
| 380 | int min_height = (FRAME_MENU_BAR_LINES (f) | ||
| 381 | + FRAME_WANTS_MODELINE_P (f) | ||
| 382 | + 2); /* one text line and one echo-area line */ | ||
| 383 | if (retval < min_height) | ||
| 384 | retval = min_height; | ||
| 385 | } | ||
| 386 | |||
| 387 | return retval; | ||
| 373 | } | 388 | } |
| 374 | 389 | ||
| 375 | 390 | ||