Mercurial > emacs
diff src/window.c @ 83228:2a3f27a45698
Merged in changes from CVS trunk.
Patches applied:
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-694
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-695
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-696
Merge from gnus--rel--5.10
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-697
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-698
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-699
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-700
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-701
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-702
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-703
Merge from gnus--rel--5.10
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-704
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-705
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-706
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-707
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-708
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-709
Update from CVS: src/indent.c (Fvertical_motion): Fix last change.
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-710
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-711
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-712
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-713
Update from CVS
* miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-72
Update from CVS
* miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-73
Merge from emacs--cvs-trunk--0
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-268
author | Karoly Lorentey <lorentey@elte.hu> |
---|---|
date | Mon, 22 Nov 2004 11:06:39 +0000 |
parents | 3ec251523b3e 491080266027 |
children | 549734260e34 |
line wrap: on
line diff
--- a/src/window.c Sat Nov 13 18:34:40 2004 +0000 +++ b/src/window.c Mon Nov 22 11:06:39 2004 +0000 @@ -243,7 +243,8 @@ register struct window *p; p = allocate_window (); - XSETFASTINT (p->sequence_number, ++sequence_number); + ++sequence_number; + XSETFASTINT (p->sequence_number, sequence_number); XSETFASTINT (p->left_col, 0); XSETFASTINT (p->top_line, 0); XSETFASTINT (p->total_lines, 0); @@ -2659,6 +2660,9 @@ --shrinkable; total_removed += smallest; + /* We don't know what the smallest is now. */ + smallest = total; + /* Out of for, just remove one window at the time and check again if we have enough space. */ break; @@ -2683,6 +2687,16 @@ that are left and still can be shrunk. */ while (total_shrink > total_removed) { + int nonzero_sizes = 0; + int nonzero_idx = -1; + + for (i = 0; i < nchildren; ++i) + if (new_sizes[i] > 0) + { + ++nonzero_sizes; + nonzero_idx = i; + } + for (i = 0; i < nchildren; ++i) if (new_sizes[i] > min_size) { @@ -2693,6 +2707,25 @@ check again if we have enough space. */ break; } + + + /* Special case, only one window left. */ + if (nonzero_sizes == 1) + break; + } + + /* Any surplus due to rounding, we add to windows that are left. */ + while (total_shrink < total_removed) + { + for (i = 0; i < nchildren; ++i) + { + if (new_sizes[i] != 0 && total_shrink < total_removed) + { + ++new_sizes[i]; + --total_removed; + break; + } + } } return new_sizes; @@ -3119,7 +3152,8 @@ w = XWINDOW (window); w->frozen_window_start_p = 0; - XSETFASTINT (w->use_time, ++window_select_count); + ++window_select_count; + XSETFASTINT (w->use_time, window_select_count); if (EQ (window, selected_window)) return window; @@ -3610,7 +3644,8 @@ = ((struct Lisp_Vector *)o)->contents[i]; XSETWINDOW (new, p); - XSETFASTINT (p->sequence_number, ++sequence_number); + ++sequence_number; + XSETFASTINT (p->sequence_number, sequence_number); /* Put new into window structure in place of window */ replace_window (window, new); @@ -5852,7 +5887,7 @@ p = SAVED_WINDOW_N (vector, i); w = XWINDOW (window); - XSETFASTINT (w->temslot, i++); + XSETFASTINT (w->temslot, i); i++; p->window = window; p->buffer = w->buffer; p->left_col = w->left_col;