OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2001 Dirk Mueller (mueller@kde.org) | 4 * (C) 2001 Dirk Mueller (mueller@kde.org) |
5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv
ed. | 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv
ed. |
6 * | 6 * |
7 * This library is free software; you can redistribute it and/or | 7 * This library is free software; you can redistribute it and/or |
8 * modify it under the terms of the GNU Library General Public | 8 * modify it under the terms of the GNU Library General Public |
9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
10 * version 2 of the License, or (at your option) any later version. | 10 * version 2 of the License, or (at your option) any later version. |
(...skipping 871 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
882 void ContainerNode::focusStateChanged() | 882 void ContainerNode::focusStateChanged() |
883 { | 883 { |
884 // If we're just changing the window's active state and the focused node has
no | 884 // If we're just changing the window's active state and the focused node has
no |
885 // renderer we can just ignore the state change. | 885 // renderer we can just ignore the state change. |
886 if (!renderer()) | 886 if (!renderer()) |
887 return; | 887 return; |
888 | 888 |
889 if (styleChangeType() < SubtreeStyleChange) { | 889 if (styleChangeType() < SubtreeStyleChange) { |
890 if (renderStyle()->affectedByFocus() && renderStyle()->hasPseudoStyle(FI
RST_LETTER)) | 890 if (renderStyle()->affectedByFocus() && renderStyle()->hasPseudoStyle(FI
RST_LETTER)) |
891 setNeedsStyleRecalc(SubtreeStyleChange); | 891 setNeedsStyleRecalc(SubtreeStyleChange); |
892 else if (isElementNode() && toElement(this)->childrenAffectedByFocus()) | 892 else if (isElementNode() && toElement(this)->childrenOrSiblingsAffectedB
yFocus()) |
893 document().ensureStyleResolver().ensureUpdatedRuleFeatureSet().sched
uleStyleInvalidationForPseudoChange(CSSSelector::PseudoFocus, *toElement(this)); | 893 document().ensureStyleResolver().ensureUpdatedRuleFeatureSet().sched
uleStyleInvalidationForPseudoChange(CSSSelector::PseudoFocus, *toElement(this)); |
894 else if (renderStyle()->affectedByFocus()) | 894 else if (renderStyle()->affectedByFocus()) |
895 setNeedsStyleRecalc(LocalStyleChange); | 895 setNeedsStyleRecalc(LocalStyleChange); |
896 } | 896 } |
897 | 897 |
898 if (renderer() && renderer()->style()->hasAppearance()) | 898 if (renderer() && renderer()->style()->hasAppearance()) |
899 RenderTheme::theme().stateChanged(renderer(), FocusControlState); | 899 RenderTheme::theme().stateChanged(renderer(), FocusControlState); |
900 } | 900 } |
901 | 901 |
902 void ContainerNode::setFocus(bool received) | 902 void ContainerNode::setFocus(bool received) |
903 { | 903 { |
904 if (focused() == received) | 904 if (focused() == received) |
905 return; | 905 return; |
906 | 906 |
907 Node::setFocus(received); | 907 Node::setFocus(received); |
908 | 908 |
909 focusStateChanged(); | 909 focusStateChanged(); |
910 | 910 |
911 if (renderer() || received) | 911 if (renderer() || received) |
912 return; | 912 return; |
913 | 913 |
914 // If :focus sets display: none, we lose focus but still need to recalc our
style. | 914 // If :focus sets display: none, we lose focus but still need to recalc our
style. |
915 if (isElementNode() && toElement(this)->childrenAffectedByFocus() && styleCh
angeType() < SubtreeStyleChange) | 915 if (isElementNode() && toElement(this)->childrenOrSiblingsAffectedByFocus()
&& styleChangeType() < SubtreeStyleChange) |
916 document().ensureStyleResolver().ensureUpdatedRuleFeatureSet().scheduleS
tyleInvalidationForPseudoChange(CSSSelector::PseudoFocus, *toElement(this)); | 916 document().ensureStyleResolver().ensureUpdatedRuleFeatureSet().scheduleS
tyleInvalidationForPseudoChange(CSSSelector::PseudoFocus, *toElement(this)); |
917 else | 917 else |
918 setNeedsStyleRecalc(LocalStyleChange); | 918 setNeedsStyleRecalc(LocalStyleChange); |
919 } | 919 } |
920 | 920 |
921 void ContainerNode::setActive(bool down) | 921 void ContainerNode::setActive(bool down) |
922 { | 922 { |
923 if (down == active()) | 923 if (down == active()) |
924 return; | 924 return; |
925 | 925 |
926 Node::setActive(down); | 926 Node::setActive(down); |
927 | 927 |
928 // FIXME: Why does this not need to handle the display: none transition like
:hover does? | 928 // FIXME: Why does this not need to handle the display: none transition like
:hover does? |
929 if (renderer()) { | 929 if (renderer()) { |
930 if (styleChangeType() < SubtreeStyleChange) { | 930 if (styleChangeType() < SubtreeStyleChange) { |
931 if (renderStyle()->affectedByActive() && renderStyle()->hasPseudoSty
le(FIRST_LETTER)) | 931 if (renderStyle()->affectedByActive() && renderStyle()->hasPseudoSty
le(FIRST_LETTER)) |
932 setNeedsStyleRecalc(SubtreeStyleChange); | 932 setNeedsStyleRecalc(SubtreeStyleChange); |
933 else if (isElementNode() && toElement(this)->childrenAffectedByActiv
e()) | 933 else if (isElementNode() && toElement(this)->childrenOrSiblingsAffec
tedByActive()) |
934 document().ensureStyleResolver().ensureUpdatedRuleFeatureSet().s
cheduleStyleInvalidationForPseudoChange(CSSSelector::PseudoActive, *toElement(th
is)); | 934 document().ensureStyleResolver().ensureUpdatedRuleFeatureSet().s
cheduleStyleInvalidationForPseudoChange(CSSSelector::PseudoActive, *toElement(th
is)); |
935 else if (renderStyle()->affectedByActive()) | 935 else if (renderStyle()->affectedByActive()) |
936 setNeedsStyleRecalc(LocalStyleChange); | 936 setNeedsStyleRecalc(LocalStyleChange); |
937 } | 937 } |
938 | 938 |
939 if (renderStyle()->hasAppearance()) | 939 if (renderStyle()->hasAppearance()) |
940 RenderTheme::theme().stateChanged(renderer(), PressedControlState); | 940 RenderTheme::theme().stateChanged(renderer(), PressedControlState); |
941 } | 941 } |
942 } | 942 } |
943 | 943 |
944 void ContainerNode::setHovered(bool over) | 944 void ContainerNode::setHovered(bool over) |
945 { | 945 { |
946 if (over == hovered()) | 946 if (over == hovered()) |
947 return; | 947 return; |
948 | 948 |
949 Node::setHovered(over); | 949 Node::setHovered(over); |
950 | 950 |
951 // If :hover sets display: none we lose our hover but still need to recalc o
ur style. | 951 // If :hover sets display: none we lose our hover but still need to recalc o
ur style. |
952 if (!renderer()) { | 952 if (!renderer()) { |
953 if (over) | 953 if (over) |
954 return; | 954 return; |
955 if (isElementNode() && toElement(this)->childrenAffectedByHover() && sty
leChangeType() < SubtreeStyleChange) | 955 if (isElementNode() && toElement(this)->childrenOrSiblingsAffectedByHove
r() && styleChangeType() < SubtreeStyleChange) |
956 document().ensureStyleResolver().ensureUpdatedRuleFeatureSet().sched
uleStyleInvalidationForPseudoChange(CSSSelector::PseudoHover, *toElement(this)); | 956 document().ensureStyleResolver().ensureUpdatedRuleFeatureSet().sched
uleStyleInvalidationForPseudoChange(CSSSelector::PseudoHover, *toElement(this)); |
957 else | 957 else |
958 setNeedsStyleRecalc(LocalStyleChange); | 958 setNeedsStyleRecalc(LocalStyleChange); |
959 return; | 959 return; |
960 } | 960 } |
961 | 961 |
962 if (styleChangeType() < SubtreeStyleChange) { | 962 if (styleChangeType() < SubtreeStyleChange) { |
963 if (renderStyle()->affectedByHover() && renderStyle()->hasPseudoStyle(FI
RST_LETTER)) | 963 if (renderStyle()->affectedByHover() && renderStyle()->hasPseudoStyle(FI
RST_LETTER)) |
964 setNeedsStyleRecalc(SubtreeStyleChange); | 964 setNeedsStyleRecalc(SubtreeStyleChange); |
965 else if (isElementNode() && toElement(this)->childrenAffectedByHover()) | 965 else if (isElementNode() && toElement(this)->childrenOrSiblingsAffectedB
yHover()) |
966 document().ensureStyleResolver().ensureUpdatedRuleFeatureSet().sched
uleStyleInvalidationForPseudoChange(CSSSelector::PseudoHover, *toElement(this)); | 966 document().ensureStyleResolver().ensureUpdatedRuleFeatureSet().sched
uleStyleInvalidationForPseudoChange(CSSSelector::PseudoHover, *toElement(this)); |
967 else if (renderStyle()->affectedByHover()) | 967 else if (renderStyle()->affectedByHover()) |
968 setNeedsStyleRecalc(LocalStyleChange); | 968 setNeedsStyleRecalc(LocalStyleChange); |
969 } | 969 } |
970 | 970 |
971 if (renderer()->style()->hasAppearance()) | 971 if (renderer()->style()->hasAppearance()) |
972 RenderTheme::theme().stateChanged(renderer(), HoverControlState); | 972 RenderTheme::theme().stateChanged(renderer(), HoverControlState); |
973 } | 973 } |
974 | 974 |
975 PassRefPtrWillBeRawPtr<HTMLCollection> ContainerNode::children() | 975 PassRefPtrWillBeRawPtr<HTMLCollection> ContainerNode::children() |
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1275 return true; | 1275 return true; |
1276 | 1276 |
1277 if (node->isElementNode() && toElement(node)->shadow()) | 1277 if (node->isElementNode() && toElement(node)->shadow()) |
1278 return true; | 1278 return true; |
1279 | 1279 |
1280 return false; | 1280 return false; |
1281 } | 1281 } |
1282 #endif | 1282 #endif |
1283 | 1283 |
1284 } // namespace WebCore | 1284 } // namespace WebCore |
OLD | NEW |