render: delay TIOCSWINSZ while doing an interactive resize

Instead of disabling content centering, delay the TIOCSWINSZ (a.k.a
delay sending the new dimensions to the client) by a small amount
while doing an interactive resize.

Non-interactive resizes are still immediate.

For now, force a resize when the user stops the interactive
resize. This ensures the client application receives the new
dimensions immediately.

It still works without the last, forced, resize, but there typically
be a small delay until the client application receives the final
dimensions.

Closes #301
Closes #283
This commit is contained in:
Daniel Eklöf 2021-01-17 16:12:54 +01:00
parent 6876ab6bc2
commit 9a1df7bb03
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
5 changed files with 126 additions and 12 deletions

View file

@ -1745,6 +1745,19 @@ parse_section_tweak(
conf->tweak.box_drawing_base_thickness);
}
else if (strcmp(key, "resize-delay-ms") == 0) {
unsigned long ms;
if (!str_to_ulong(value, 10, &ms)) {
LOG_AND_NOTIFY_ERR(
"%s:%d: [tweak]: resize-delay-ms: expected an integer, got '%s'",
path, lineno, value);
return false;
}
conf->tweak.resize_delay_ms = ms;
LOG_WARN("tweak: resize-delay-ms=%hu", conf->tweak.resize_delay_ms);
}
else {
LOG_AND_NOTIFY_ERR("%s:%u: [tweak]: %s: invalid key", path, lineno, key);
return false;
@ -2166,6 +2179,7 @@ config_load(struct config *conf, const char *conf_path,
.render_timer_log = false,
.damage_whole_window = false,
.box_drawing_base_thickness = 0.04,
.resize_delay_ms = 100,
},
.notifications = tll_init(),