mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-19 06:31:34 -08:00
* window.c (shrink_windows): Handle special case of one window left
when trying to shrink the final reminder. Grow windows if total_removed is less than total_shrink.
This commit is contained in:
parent
234abfce95
commit
ef614e04c3
2 changed files with 36 additions and 0 deletions
|
|
@ -1,5 +1,9 @@
|
|||
2004-11-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
|
||||
|
||||
* window.c (shrink_windows): Handle special case of one window left
|
||||
when trying to shrink the final reminder. Grow windows if
|
||||
total_removed is less than total_shrink.
|
||||
|
||||
* xmenu.c (pop_down_menu): Remove global variable current_menu,
|
||||
extract pointer from arg with XSAVE_VALUE.
|
||||
(create_and_show_popup_menu, create_and_show_dialog,
|
||||
|
|
|
|||
32
src/window.c
32
src/window.c
|
|
@ -2657,6 +2657,9 @@ shrink_windows (total, size, nchildren, shrinkable,
|
|||
--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;
|
||||
|
|
@ -2681,6 +2684,16 @@ shrink_windows (total, size, nchildren, shrinkable,
|
|||
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)
|
||||
{
|
||||
|
|
@ -2691,6 +2704,25 @@ shrink_windows (total, size, nchildren, shrinkable,
|
|||
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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue