summaryrefslogtreecommitdiff
path: root/src/select/select.c
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2015-11-22 20:18:08 +0000
committerMichael Drake <tlsa@netsurf-browser.org>2016-11-19 14:30:07 +0000
commitda2c006495db400134c3e788e398cbcba1dba1d0 (patch)
tree2623cb58dc94bac1e0f37070a383bdb113eaa3c5 /src/select/select.c
parentd91bf786c42bd86a9d9159a6cd8e14e04ee29f39 (diff)
downloadlibcss-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.c26
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;
}