1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-07-16 10:37:38 -05:00

Fold ancillary window changes into main redraw.

This fixes a long-standing inconsistency in updates to the terminal
window: redrawing of actual text was deferred for 1/50 second, but all
the other kinds of change the terminal can make to the window
(position, size, z-order, title, mouse pointer shape, scrollbar...)
were enacted immediately. In particular, this could mean that two
updates requested by the terminal output stream happened in reverse
order.

Now they're all done as part of term_update, which should mean that
things requested in the same chunk of terminal input happen at the
same time, or at the very least, not in reverse order compared to the
order the requests came in.

Also, the same timer-based UPDATE_DELAY mechanism that applies to the
text updates now applies to all the other window modifications, which
should prevent any of those from being the limiting factor to how fast
this terminal implementation can process input data (which is exactly
why I set up that system for the main text update).

This makes everything happen with a bit more latency, but I'm about to
reverse that in a follow-up commit.
This commit is contained in:
Simon Tatham
2021-02-07 19:59:21 +00:00
parent 99dfc66457
commit d74308e90e
2 changed files with 190 additions and 62 deletions

View File

@ -363,6 +363,30 @@ struct terminal_tag {
rgb palette[OSC4_NCOLOURS];
unsigned winpos_x, winpos_y, winpixsize_x, winpixsize_y;
/*
* Assorted 'pending' flags for ancillary window changes performed
* in term_update. Generally, to trigger one of these operations,
* you set the pending flag and/or the parameters here, then call
* term_schedule_update.
*/
bool win_move_pending;
int win_move_pending_x, win_move_pending_y;
bool win_resize_pending;
int win_resize_pending_w, win_resize_pending_h;
bool win_zorder_pending;
bool win_zorder_top;
bool win_minimise_pending;
bool win_minimise_enable;
bool win_maximise_pending;
bool win_maximise_enable;
bool win_title_pending, win_icon_title_pending;
bool win_pointer_shape_pending;
bool win_pointer_shape_raw;
bool win_refresh_pending;
bool win_scrollbar_update_pending;
bool win_palette_pending;
unsigned win_palette_pending_min, win_palette_pending_limit;
};
static inline bool in_utf(Terminal *term)