Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(919)

Side by Side Diff: Source/core/dom/ContainerNode.cpp

Issue 16599003: :hover style not applied on hover if its display property is different from original style's (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Patch Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 713 matching lines...) Expand 10 before | Expand all | Expand 10 after
724 { 724 {
725 // We recalculate size() each time through the loop because a callback 725 // We recalculate size() each time through the loop because a callback
726 // can add more callbacks to the end of the queue. 726 // can add more callbacks to the end of the queue.
727 for (size_t i = 0; i < s_postAttachCallbackQueue->size(); ++i) { 727 for (size_t i = 0; i < s_postAttachCallbackQueue->size(); ++i) {
728 const CallbackInfo& info = (*s_postAttachCallbackQueue)[i]; 728 const CallbackInfo& info = (*s_postAttachCallbackQueue)[i];
729 info.first(info.second.get()); 729 info.first(info.second.get());
730 } 730 }
731 s_postAttachCallbackQueue->clear(); 731 s_postAttachCallbackQueue->clear();
732 } 732 }
733 733
734 void ContainerNode::attach() 734 void ContainerNode::attach(const AttachContext& context)
735 { 735 {
736 attachChildren(); 736 attachChildren();
737 Node::attach(); 737 Node::attach(context);
738 } 738 }
739 739
740 void ContainerNode::detach() 740 void ContainerNode::detach(const AttachContext& context)
741 { 741 {
742 detachChildren(); 742 detachChildren();
743 clearChildNeedsStyleRecalc(); 743 clearChildNeedsStyleRecalc();
744 Node::detach(); 744 Node::detach(context);
745 } 745 }
746 746
747 void ContainerNode::childrenChanged(bool changedByParser, Node*, Node*, int chil dCountDelta) 747 void ContainerNode::childrenChanged(bool changedByParser, Node*, Node*, int chil dCountDelta)
748 { 748 {
749 document()->incDOMTreeVersion(); 749 document()->incDOMTreeVersion();
750 if (!changedByParser && childCountDelta) 750 if (!changedByParser && childCountDelta)
751 document()->updateRangesAfterChildrenChanged(this); 751 document()->updateRangesAfterChildrenChanged(this);
752 invalidateNodeListCachesInAncestors(); 752 invalidateNodeListCachesInAncestors();
753 } 753 }
754 754
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
786 renderer()->theme()->stateChanged(renderer(), PressedState); 786 renderer()->theme()->stateChanged(renderer(), PressedState);
787 } 787 }
788 } 788 }
789 789
790 void ContainerNode::setHovered(bool over) 790 void ContainerNode::setHovered(bool over)
791 { 791 {
792 if (over == hovered()) return; 792 if (over == hovered()) return;
793 793
794 Node::setHovered(over); 794 Node::setHovered(over);
795 795
796 if (!renderer()) {
797 // When setting hover to false, the style needs to be recalc'd even when
798 // there's no renderer (imagine setting display:none in the :hover class ,
799 // if a nil renderer would prevent this element from recalculating its
800 // style, it would never go back to its normal style and remain
801 // stuck in its hovered style).
802 if (!over)
803 setNeedsStyleRecalc();
804
805 return;
806 }
807
796 // note that we need to recalc the style 808 // note that we need to recalc the style
797 // FIXME: Move to Element 809 // FIXME: Move to Element
798 if (renderer()) { 810 if (renderer()) {
799 if (renderStyle()->affectedByHover() || (isElementNode() && toElement(th is)->childrenAffectedByHover())) 811 if (renderStyle()->affectedByHover() || (isElementNode() && toElement(th is)->childrenAffectedByHover()))
800 setNeedsStyleRecalc(); 812 setNeedsStyleRecalc();
801 if (renderer() && renderer()->style()->hasAppearance()) 813 if (renderer() && renderer()->style()->hasAppearance())
802 renderer()->theme()->stateChanged(renderer(), HoverState); 814 renderer()->theme()->stateChanged(renderer(), HoverState);
803 } 815 }
804 } 816 }
805 817
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
951 return true; 963 return true;
952 964
953 if (node->isElementNode() && toElement(node)->shadow()) 965 if (node->isElementNode() && toElement(node)->shadow())
954 return true; 966 return true;
955 967
956 return false; 968 return false;
957 } 969 }
958 #endif 970 #endif
959 971
960 } // namespace WebCore 972 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698