From 1ebed74cd8be22ff805bffb10f6d1e55f2a9866f Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Wed, 15 Jul 2009 02:31:28 +0000 Subject: Fix selection from selectors within @media blocks. svn path=/trunk/libcss/; revision=8549 --- src/select/select.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/select/select.c b/src/select/select.c index 983d77e..ed529ec 100644 --- a/src/select/select.c +++ b/src/select/select.c @@ -634,21 +634,24 @@ css_error match_selectors_in_sheet(css_select_ctx *ctx, /* Process any matching selectors */ while (*selectors != NULL) { - css_rule *rule; + css_rule *rule, *parent; bool process = true; /* Ignore any selectors contained in rules which are a child * of an @media block that doesn't match the current media * requirements. */ - for (rule = (*selectors)->rule; - rule->ptype != CSS_RULE_PARENT_STYLESHEET; - rule = rule->parent) { + for (rule = (*selectors)->rule; rule != NULL; rule = parent) { if (rule->type == CSS_RULE_MEDIA && (((css_rule_media *) rule)->media & state->media) == 0) { process = false; break; } + + if (rule->ptype != CSS_RULE_PARENT_STYLESHEET) + parent = rule->parent; + else + parent = NULL; } if (process) { @@ -671,21 +674,24 @@ css_error match_selectors_in_sheet(css_select_ctx *ctx, /* Process any matching selectors */ while (*selectors != NULL) { - css_rule *rule; + css_rule *rule, *parent; bool process = true; /* Ignore any selectors contained in rules which are a child * of an @media block that doesn't match the current media * requirements. */ - for (rule = (*selectors)->rule; - rule->ptype != CSS_RULE_PARENT_STYLESHEET; - rule = rule->parent) { + for (rule = (*selectors)->rule; rule != NULL; rule = parent) { if (rule->type == CSS_RULE_MEDIA && (((css_rule_media *) rule)->media & state->media) == 0) { process = false; break; } + + if (rule->ptype != CSS_RULE_PARENT_STYLESHEET) + parent = rule->parent; + else + parent = NULL; } if (process) { -- cgit v1.2.3