summaryrefslogtreecommitdiff
path: root/src/select/select.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/select/select.c')
-rw-r--r--src/select/select.c50
1 files changed, 44 insertions, 6 deletions
diff --git a/src/select/select.c b/src/select/select.c
index 453289c..e6e9116 100644
--- a/src/select/select.c
+++ b/src/select/select.c
@@ -569,9 +569,28 @@ css_error match_selectors_in_sheet(css_select_ctx *ctx,
/* Process any matching selectors */
while (*selectors != NULL) {
- error = match_selector_chain(ctx, *selectors, state);
- if (error != CSS_OK)
- goto cleanup;
+ css_rule *rule;
+ 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) {
+ if (rule->type == CSS_RULE_MEDIA &&
+ (((css_rule_media *) rule)->media &
+ state->media) == 0) {
+ process = false;
+ break;
+ }
+ }
+
+ if (process) {
+ error = match_selector_chain(ctx, *selectors, state);
+ if (error != CSS_OK)
+ goto cleanup;
+ }
error = css_selector_hash_iterate(sheet->selectors, selectors,
&selectors);
@@ -587,9 +606,28 @@ css_error match_selectors_in_sheet(css_select_ctx *ctx,
/* Process any matching selectors */
while (*selectors != NULL) {
- error = match_selector_chain(ctx, *selectors, state);
- if (error != CSS_OK)
- goto cleanup;
+ css_rule *rule;
+ 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) {
+ if (rule->type == CSS_RULE_MEDIA &&
+ (((css_rule_media *) rule)->media &
+ state->media) == 0) {
+ process = false;
+ break;
+ }
+ }
+
+ if (process) {
+ error = match_selector_chain(ctx, *selectors, state);
+ if (error != CSS_OK)
+ goto cleanup;
+ }
error = css_selector_hash_iterate(sheet->selectors, selectors,
&selectors);