Merge branch 'crash-on-csd-size-1'

Closes #857
This commit is contained in:
Daniel Eklöf 2021-12-23 11:54:50 +01:00
commit a20e424dc0
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
4 changed files with 20 additions and 6 deletions

View file

@ -64,6 +64,8 @@
(https://codeberg.org/dnkl/foot/issues/844).
* Crash when setting a key- or mouse binding to the empty string
(https://codeberg.org/dnkl/foot/issues/851).
* Crash when maximizing the window and `[csd].size=1`
(https://codeberg.org/dnkl/foot/issues/857).
### Security

View file

@ -32,6 +32,8 @@
static const uint32_t default_foreground = 0xdcdccc;
static const uint32_t default_background = 0x111111;
static const size_t min_csd_border_width = 5;
#define cube6(r, g) \
r|g|0x00, r|g|0x5f, r|g|0x87, r|g|0xaf, r|g|0xd7, r|g|0xff
@ -2802,6 +2804,7 @@ config_load(struct config *conf, const char *conf_path,
.font = {0},
.title_height = 26,
.border_width = 5,
.border_width_visible = 0,
.button_width = 26,
},
@ -3009,6 +3012,9 @@ config_override_apply(struct config *conf, config_override_t *overrides,
}
}
conf->csd.border_width = max(
min_csd_border_width, conf->csd.border_width_visible);
return true;
}

4
main.c
View file

@ -429,7 +429,9 @@ main(int argc, char *const *argv)
}
struct config conf = {NULL};
bool conf_successful = config_load(&conf, conf_path, &user_notifications, &overrides, check_config);
bool conf_successful = config_load(
&conf, conf_path, &user_notifications, &overrides, check_config);
tll_free(overrides);
if (!conf_successful) {
config_free(conf);

View file

@ -1528,8 +1528,7 @@ get_csd_data(const struct terminal *term, enum csd_surface surf_idx)
/* Only title bar is rendered in maximized mode */
const int border_width = !term->window->is_maximized
? max(term->conf->csd.border_width,
term->conf->csd.border_width_visible) * term->scale : 0;
? term->conf->csd.border_width * term->scale : 0;
const int title_height = term->window->is_fullscreen
? 0
@ -1756,10 +1755,11 @@ render_csd_border(struct terminal *term, enum csd_surface surf_idx,
* The visible border.
*/
int bwidth = max(term->conf->csd.border_width,
term->conf->csd.border_width_visible); /* Full border size */
int bwidth = term->conf->csd.border_width;
int vwidth = term->conf->csd.border_width_visible; /* Visibls size */
xassert(bwidth >= vwidth);
if (vwidth > 0) {
const struct config *conf = term->conf;
@ -1887,11 +1887,15 @@ render_csd_button_maximize_maximized(
const int max_width = buf->width / 3;
int width = min(max_height, max_width);
int thick = 1 * term->scale;
int thick = min(width / 2, 1 * term->scale);
const int x_margin = (buf->width - width) / 2;
const int y_margin = (buf->height - width) / 2;
xassert(x_margin + width - thick >= 0);
xassert(width - 2 * thick >= 0);
xassert(y_margin + width - thick >= 0);
pixman_image_fill_rectangles(
PIXMAN_OP_SRC, buf->pix[0], &color, 4,
(pixman_rectangle16_t[]){