diff options
author | Michael Drake <tlsa@netsurf-browser.org> | 2015-11-22 20:18:08 +0000 |
---|---|---|
committer | Michael Drake <tlsa@netsurf-browser.org> | 2016-11-19 14:30:07 +0000 |
commit | da2c006495db400134c3e788e398cbcba1dba1d0 (patch) | |
tree | 2623cb58dc94bac1e0f37070a383bdb113eaa3c5 /src/select/select.c | |
parent | d91bf786c42bd86a9d9159a6cd8e14e04ee29f39 (diff) | |
download | libcss-da2c006495db400134c3e788e398cbcba1dba1d0.tar.gz libcss-da2c006495db400134c3e788e398cbcba1dba1d0.tar.bz2 |
Make node data contain list of partial node styles.
Diffstat (limited to 'src/select/select.c')
-rw-r--r-- | src/select/select.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/src/select/select.c b/src/select/select.c index 5fef4e4..ec01d32 100644 --- a/src/select/select.c +++ b/src/select/select.c @@ -170,12 +170,21 @@ static css_error css__create_node_data(struct css_node_data **node_data) static void css__destroy_node_data(struct css_node_data *node_data) { + int i; + assert(node_data != NULL); if (node_data->bloom != NULL) { free(node_data->bloom); } + for (i = 0; i < CSS_PSEUDO_ELEMENT_COUNT; i++) { + if (node_data->partial.styles[i] != NULL) { + css_computed_style_destroy( + node_data->partial.styles[i]); + } + } + free(node_data); } @@ -651,18 +660,31 @@ cleanup: static css_error css__set_node_data(void *node, css_select_state *state, css_select_handler *handler, void *pw) { + int i; css_error error; css_bloom *bloom; + css_select_results *results; + + struct css_node_data *node_data = state->node_data; /* Set node bloom filter */ error = css__create_node_bloom(&bloom, state); if (error != CSS_OK) { return error; } - state->node_data->bloom = bloom; + node_data->bloom = bloom; - error = handler->set_libcss_node_data(pw, node, state->node_data); + /* Set selection results */ + results = state->results; + for (i = 0; i < CSS_PSEUDO_ELEMENT_COUNT; i++) { + node_data->partial.styles[i] = + css__computed_style_ref(results->styles[i]); + } + + error = handler->set_libcss_node_data(pw, node, node_data); if (error != CSS_OK) { + css__destroy_node_data(node_data); + state->node_data = NULL; return error; } |