• Martin Rudalics's avatar
    Run window change functions during redisplay · e567ac14
    Martin Rudalics authored
    * doc/lispref/windows.texi (Window Sizes): Move (and rename)
    descriptions of 'window-pixel-height-before-size-change' and
    'window-pixel-width-before-size-change' to Window Hooks
    section.
    (Window Configurations): Remove warning against use of
    'save-window-excursion' in 'window-size-change-functions'.
    (Window Hooks): Rewrite section according to redesign of
    window change functions.
    * lisp/erc/erc-track.el (erc-window-configuration-change)
    (erc-modified-channels-update): Call latter directly from
    'window-configuration-change-hook' instead via
    'post-command-hook'.
    * lisp/frame.el (frame-size-changed-p): Change nomenclature
    in let bindings.
    * lisp/net/rcirc.el (rcirc-window-configuration-change)
    (rcirc-window-configuration-change-1): Call latter directly
    from 'window-configuration-change-hook' instead via
    'post-command-hook'.
    * lisp/window.el (window-pixel-width-before-size-change)
    (window-pixel-height-before-size-change): Defalias.
    (window--resize-mini-window, window-resize)
    (adjust-window-trailing-edge, delete-window)
    (delete-other-windows, balance-windows): Don't run
    'window-configuration-change-hook' any more from here.
    (split-window): Don't run 'window-configuration-change-hook'
    from here.  'run-window-scroll-functions' from here.
    (window--adjust-process-windows): Run from
    'window-configuration-change-hook' only.
    * src/frame.c (old_selected_frame): New Lisp variable.
    (make_frame): Initialize frame's change_stamp slot.
    (Fold_selected_frame): New function.
    * src/frame.h (struct frame): New slots old_selected_window,
    window_change, change_stamp and number_of_windows.
    (fset_old_selected_window): New inlined function.
    (FRAME_WINDOW_CHANGE, FRAME_OLD_SELECTED_WINDOW): New macros.
    * src/window.c (old_selected_window): New Lisp variable.
    (wset_old_buffer): New inlined function.
    (Fframe_old_selected_window, Fold_selected_window)
    (Fwindow_old_buffer): New functions.
    (Fwindow_old_pixel_width, Fwindow_old_pixel_height): Rename
    from Fwindow_pixel_width_before_size_change and
    Fwindow_pixel_height_before_size_change.  Update doc-strings.
    (Fwindow_old_body_pixel_width, Fwindow_old_body_pixel_height):
    New functions.
    (Fdelete_other_windows_internal): Set frame's window_change
    slot instead of running 'window-configuration-change-hook'.
    (Frun_window_configuration_change_hook): In doc-string tell
    that this function is no more needed.
    (Frun_window_scroll_functions): Amend doc-string.  Run with
    window's buffer current.
    (window_sub_list, window_change_record_windows)
    (window_change_record_frame, window_change_record)
    (run_window_change_functions_1, run_window_change_functions):
    New functions.
    (set_window_buffer): Set frame's window_change slot instead of
    running 'window-configuration-change-hook'.
    (make_window): Don't initialize pixel_width_before_size_change
    and pixel_height_before_size_change slots.
    (window_resize_apply, Fdelete_window_internal): Set frame's
    window_change slot.
    (Fsplit_window_internal): Set frame's window_change slot.
    Don't run 'window-scroll-functions' from here.
    * src/window.h (struct window): New slots old_buffer,
    change_stamp, old_pixel_width (renamed from
    pixel_width_before_size_change), old_pixel_height (renamed
    from pixel_height_before_size_change), old_body_pixel_width
    and old_body_pixel_height.
    * src/xdisp.c (init_iterator): Set frame's window_change slot
    when the body height or width changes.
    (prepare_menu_bars): Don't run_window_size_change_functions.
    (redisplay_internal): Don't run_window_size_change_functions,
    run_window_change_functions instead.
    e567ac14
window.el 385 KB