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 690 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
701 { | 701 { |
702 // We recalculate size() each time through the loop because a callback | 702 // We recalculate size() each time through the loop because a callback |
703 // can add more callbacks to the end of the queue. | 703 // can add more callbacks to the end of the queue. |
704 for (size_t i = 0; i < s_postAttachCallbackQueue->size(); ++i) { | 704 for (size_t i = 0; i < s_postAttachCallbackQueue->size(); ++i) { |
705 const CallbackInfo& info = (*s_postAttachCallbackQueue)[i]; | 705 const CallbackInfo& info = (*s_postAttachCallbackQueue)[i]; |
706 info.first(info.second.get()); | 706 info.first(info.second.get()); |
707 } | 707 } |
708 s_postAttachCallbackQueue->clear(); | 708 s_postAttachCallbackQueue->clear(); |
709 } | 709 } |
710 | 710 |
711 void ContainerNode::attach() | 711 void ContainerNode::attach(const AttachContext& context) |
712 { | 712 { |
713 attachChildren(); | 713 attachChildren(); |
714 Node::attach(); | 714 Node::attach(context); |
715 } | 715 } |
716 | 716 |
717 void ContainerNode::detach() | 717 void ContainerNode::detach(const AttachContext& context) |
718 { | 718 { |
719 detachChildren(); | 719 detachChildren(); |
720 clearChildNeedsStyleRecalc(); | 720 clearChildNeedsStyleRecalc(); |
721 Node::detach(); | 721 Node::detach(context); |
722 } | 722 } |
723 | 723 |
724 void ContainerNode::childrenChanged(bool changedByParser, Node*, Node*, int chil
dCountDelta) | 724 void ContainerNode::childrenChanged(bool changedByParser, Node*, Node*, int chil
dCountDelta) |
725 { | 725 { |
726 document()->incDOMTreeVersion(); | 726 document()->incDOMTreeVersion(); |
727 if (!changedByParser && childCountDelta) | 727 if (!changedByParser && childCountDelta) |
728 document()->updateRangesAfterChildrenChanged(this); | 728 document()->updateRangesAfterChildrenChanged(this); |
729 invalidateNodeListCachesInAncestors(); | 729 invalidateNodeListCachesInAncestors(); |
730 } | 730 } |
731 | 731 |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
895 renderer()->theme()->stateChanged(renderer(), PressedState); | 895 renderer()->theme()->stateChanged(renderer(), PressedState); |
896 } | 896 } |
897 } | 897 } |
898 | 898 |
899 void ContainerNode::setHovered(bool over) | 899 void ContainerNode::setHovered(bool over) |
900 { | 900 { |
901 if (over == hovered()) return; | 901 if (over == hovered()) return; |
902 | 902 |
903 Node::setHovered(over); | 903 Node::setHovered(over); |
904 | 904 |
| 905 if (!renderer()) { |
| 906 // When setting hover to false, the style needs to be recalc'd even when |
| 907 // there's no renderer (imagine setting display:none in the :hover class
, |
| 908 // if a nil renderer would prevent this element from recalculating its |
| 909 // style, it would never go back to its normal style and remain |
| 910 // stuck in its hovered style). |
| 911 if (!over) |
| 912 setNeedsStyleRecalc(); |
| 913 |
| 914 return; |
| 915 } |
| 916 |
905 // note that we need to recalc the style | 917 // note that we need to recalc the style |
906 // FIXME: Move to Element | 918 // FIXME: Move to Element |
907 if (renderer()) { | 919 if (renderer()) { |
908 if (renderStyle()->affectedByHover() || (isElementNode() && toElement(th
is)->childrenAffectedByHover())) | 920 if (renderStyle()->affectedByHover() || (isElementNode() && toElement(th
is)->childrenAffectedByHover())) |
909 setNeedsStyleRecalc(); | 921 setNeedsStyleRecalc(); |
910 if (renderer() && renderer()->style()->hasAppearance()) | 922 if (renderer() && renderer()->style()->hasAppearance()) |
911 renderer()->theme()->stateChanged(renderer(), HoverState); | 923 renderer()->theme()->stateChanged(renderer(), HoverState); |
912 } | 924 } |
913 } | 925 } |
914 | 926 |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1051 return true; | 1063 return true; |
1052 | 1064 |
1053 if (node->isElementNode() && toElement(node)->shadow()) | 1065 if (node->isElementNode() && toElement(node)->shadow()) |
1054 return true; | 1066 return true; |
1055 | 1067 |
1056 return false; | 1068 return false; |
1057 } | 1069 } |
1058 #endif | 1070 #endif |
1059 | 1071 |
1060 } // namespace WebCore | 1072 } // namespace WebCore |
OLD | NEW |