summaryrefslogtreecommitdiff
path: root/render
diff options
context:
space:
mode:
Diffstat (limited to 'render')
-rw-r--r--render/box.c11
-rw-r--r--render/box.h2
2 files changed, 11 insertions, 2 deletions
diff --git a/render/box.c b/render/box.c
index 613b8c355..d49ae56fa 100644
--- a/render/box.c
+++ b/render/box.c
@@ -85,8 +85,14 @@ void *box_style_alloc(void *ptr, size_t len, void *pw)
static int
free_box_style(struct box *b)
{
- if (b->style != NULL) {
+ if (b->style_owned && b->style != NULL) {
css_computed_style_destroy(b->style);
+ b->style = NULL;
+ }
+
+ if (b->styles != NULL) {
+ css_select_results_destroy(b->styles);
+ b->styles = NULL;
}
return 0;
@@ -121,12 +127,13 @@ struct box * box_create(css_select_results *styles, css_computed_style *style,
return 0;
}
- if (style_owned == true)
+ if (style_owned == true || styles != NULL)
talloc_set_destructor(box, free_box_style);
box->type = BOX_INLINE;
box->styles = styles;
box->style = style;
+ box->style_owned = style_owned;
box->x = box->y = 0;
box->width = UNKNOWN_WIDTH;
box->height = 0;
diff --git a/render/box.h b/render/box.h
index f8c85627b..5ca366497 100644
--- a/render/box.h
+++ b/render/box.h
@@ -141,6 +141,8 @@ struct box {
* a box's 'styles' select results, except for implied boxes, where it
* is a pointer to an owned computed style. */
css_computed_style *style;
+ /** Whether the style is owned by this box. */
+ bool style_owned;
/** Coordinate of left padding edge relative to parent box, or relative
* to ancestor that contains this box in float_children for FLOAT_. */