(x_produce_image_glyph, x_append_stretch_glyph): Accomodate to
changes in struct glyph starting 1999-12-27. Some bit-fields of
struct glyph were not set, which made glyphs unequal when compared
with GLYPH_EQUAL_P. Redisplay outputs such glyphs, and flickering
effects were the result. This also depended on the contents of
memory returned by xmalloc. If flickering happens again, activate
the code in clear_glyph_row that's in #if 0. If the flickering is
gone with that, chances are that it is caused by something
similar.
(window_list): Order list so that, for each frame, windows are
in canonical order, and so that frames appear in the list in
the order given by Vframe_list.
(next_window): Reverse the handling of NEXT_P.
(make_window, delete_window): Set Vwindow_list to nil.
(check_window_containing): New function.
(window_from_coordinates): Rewritten.
(add_window_to_list, window_list, candidate_window_p)
(decode_next_window_args, next_window): New functions.
(Fnext_window, Fprevious_window): Rewritten in terms of
next_window.
(Fwindow_list): New function.
(Fother_window): Cleaned up.
(foreach_window): Add a longer "variable argument list". Let
callback function return 0 to indicate that cycling over windows
should stop.
(foreach_window_1): Likewise.
(freeze_window_start): Return int.
(init_window): New function.
(syms_of_window): Staticpro Vwindow_list and defsubr Swindow_list.
case MINIBUF is a window. Doing so excludes frames using MINIBUF
unless their focus is redirected, which contradicts the
specification of next-frame, and leads to infinite loops in
certain situations when cycling through windows with next-window.
(row_entry_pool, row_entry_pool_size, row_entry_idx, row_table)
(row_table_size, old_lines, new_lines, old_lines_size)
(new_lines_size, run_pool, runs_size, runs): New variables.
(add_row_entry): New function.
(scrolling_window): Use data structures allocated with xmalloc and
held in global variables, instead of allocing them with alloca and
holding them in local variables. Use a larger hash table whose
size depends on glyph matrix sizes. Don't use bzero to clear the
hash table; instead, clear used slots only.