/* Updating of data structures for redisplay.
Copyright (C) 1985, 1986, 1987, 1988, 1993, 1994, 1995,
1997, 1998, 1999, 2000, 2001, 2002, 2003,
- 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+ 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
This file is part of GNU Emacs.
GNU Emacs is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
+the Free Software Foundation; either version 3, or (at your option)
any later version.
GNU Emacs is distributed in the hope that it will be useful,
static struct glyph_matrix *save_current_matrix P_ ((struct frame *));
static void restore_current_matrix P_ ((struct frame *, struct glyph_matrix *));
+static int showing_window_margins_p P_ ((struct window *));
static void fake_current_matrices P_ ((Lisp_Object));
static void redraw_overlapping_rows P_ ((struct window *, int));
static void redraw_overlapped_rows P_ ((struct window *, int));
if (FRAME_WINDOW_P (f))
{
int ch_height = FRAME_SMALLEST_FONT_HEIGHT (f);
- int window_pixel_height = window_box_height (w) + abs (w->vscroll);
+ int window_pixel_height = window_box_height (w) + eabs (w->vscroll);
return (((window_pixel_height + ch_height - 1)
/ ch_height) * w->nrows_scale_factor
/* One partially visible line at the top and
f->glyphs_initialized_p = 1;
}
+/* Return 1 if any window in the tree has nonzero window margins. See
+ the hack at the end of adjust_frame_glyphs_for_frame_redisplay. */
+static int
+showing_window_margins_p (w)
+ struct window *w;
+{
+ while (w)
+ {
+ if (!NILP (w->hchild))
+ {
+ if (showing_window_margins_p (XWINDOW (w->hchild)))
+ return 1;
+ }
+ else if (!NILP (w->vchild))
+ {
+ if (showing_window_margins_p (XWINDOW (w->vchild)))
+ return 1;
+ }
+ else if (!NILP (w->left_margin_cols)
+ || !NILP (w->right_margin_cols))
+ return 1;
+
+ w = NILP (w->next) ? 0 : XWINDOW (w->next);
+ }
+ return 0;
+}
+
/* In the window tree with root W, build current matrices of leaf
windows from the frame's current matrix. */
if (display_completed
&& !FRAME_GARBAGED_P (f)
&& matrix_dim.width == f->current_matrix->matrix_w
- && matrix_dim.height == f->current_matrix->matrix_h)
+ && matrix_dim.height == f->current_matrix->matrix_h
+ /* For some reason, the frame glyph matrix gets corrupted if
+ any of the windows contain margins. I haven't been able
+ to hunt down the reason, but for the moment this prevents
+ the problem from manifesting. -- cyd */
+ && !showing_window_margins_p (XWINDOW (FRAME_ROOT_WINDOW (f))))
{
struct glyph_matrix *copy = save_current_matrix (f);
adjust_glyph_matrix (NULL, f->desired_matrix, 0, 0, matrix_dim);
exit (1);
}
+#ifdef WINDOWSNT
+ terminal_type = "w32console";
+#else
/* Look at the TERM variable. */
terminal_type = (char *) getenv ("TERM");
+#endif
if (!terminal_type)
{
#ifdef VMS
(*initial_terminal->delete_terminal_hook) (initial_terminal);
/* Update frame parameters to reflect the new type. */
- Fmodify_frame_parameters (selected_frame, Fcons (Fcons (Qwindow_system, Qnil), Qnil));
Fmodify_frame_parameters
(selected_frame, Fcons (Fcons (Qtty_type,
Ftty_type (selected_frame)), Qnil));
The value is a symbol--for instance, `x' for X windows.
The value is nil if Emacs is using a text-only terminal. */);
+ DEFVAR_KBOARD ("window-system", Vwindow_system,
+ doc: /* Name of window system through which the selected frame is displayed.
+The value is a symbol--for instance, `x' for X windows.
+The value is nil if the selected frame is on a text-only-terminal. */);
+
DEFVAR_LISP ("window-system-version", &Vwindow_system_version,
doc: /* The version number of the window system in use.
-For X windows, this is 10 or 11. */);
+For X windows, this is 11. */);
DEFVAR_BOOL ("cursor-in-echo-area", &cursor_in_echo_area,
doc: /* Non-nil means put cursor in minibuffer, at end of any message there. */);