Index: Source/core/dom/Document.cpp |
diff --git a/Source/core/dom/Document.cpp b/Source/core/dom/Document.cpp |
index 22c3ffb5c9ebb5af0b4a6986b81d6b3ef0dbcc82..30687207b4c4beb57bae8b01403e1cd1678204e4 100644 |
--- a/Source/core/dom/Document.cpp |
+++ b/Source/core/dom/Document.cpp |
@@ -5088,11 +5088,16 @@ void Document::updateHoverActiveState(const HitTestRequest& request, Element* in |
for (size_t i = 0; i < removeCount; ++i) |
nodesToRemoveFromChain[i]->setHovered(false); |
+ bool sawCommonAncestor = false; |
size_t addCount = nodesToAddToChain.size(); |
for (size_t i = 0; i < addCount; ++i) { |
+ // Elements past the common ancestor do not change hover state, but might change active state. |
+ if (ancestor && nodesToAddToChain[i] == ancestor->node()) |
+ sawCommonAncestor = true; |
if (allowActiveChanges) |
nodesToAddToChain[i]->setActive(true); |
- nodesToAddToChain[i]->setHovered(true); |
+ if (!sawCommonAncestor) |
+ nodesToAddToChain[i]->setHovered(true); |
} |
updateStyleIfNeeded(); |