summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/rendering/HitTestResult.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/rendering/HitTestResult.cpp')
-rw-r--r--Source/WebCore/rendering/HitTestResult.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/Source/WebCore/rendering/HitTestResult.cpp b/Source/WebCore/rendering/HitTestResult.cpp
index e5638c9..77ccc4b 100644
--- a/Source/WebCore/rendering/HitTestResult.cpp
+++ b/Source/WebCore/rendering/HitTestResult.cpp
@@ -32,6 +32,7 @@
#include "HTMLNames.h"
#include "HTMLParserIdioms.h"
#include "RenderImage.h"
+#include "RenderInline.h"
#include "Scrollbar.h"
#include "SelectionController.h"
@@ -544,6 +545,20 @@ bool HitTestResult::addNodeToRectBasedTestResult(Node* node, int x, int y, const
node = node->shadowAncestorNode();
mutableRectBasedTestResult().add(node);
+ if (node->renderer()->isInline()) {
+ for (RenderObject* curr = node->renderer()->parent(); curr; curr = curr->parent()) {
+ if (!curr->isRenderInline())
+ break;
+
+ // We need to make sure the nodes for culled inlines get included.
+ RenderInline* currInline = toRenderInline(curr);
+ if (currInline->alwaysCreateLineBoxes())
+ break;
+
+ if (currInline->visibleToHitTesting() && currInline->node())
+ mutableRectBasedTestResult().add(currInline->node()->shadowAncestorNode());
+ }
+ }
return !rect.contains(rectForPoint(x, y));
}
@@ -561,6 +576,20 @@ bool HitTestResult::addNodeToRectBasedTestResult(Node* node, int x, int y, const
node = node->shadowAncestorNode();
mutableRectBasedTestResult().add(node);
+ if (node->renderer()->isInline()) {
+ for (RenderObject* curr = node->renderer()->parent(); curr; curr = curr->parent()) {
+ if (!curr->isRenderInline())
+ break;
+
+ // We need to make sure the nodes for culled inlines get included.
+ RenderInline* currInline = toRenderInline(curr);
+ if (currInline->alwaysCreateLineBoxes())
+ break;
+
+ if (currInline->visibleToHitTesting() && currInline->node())
+ mutableRectBasedTestResult().add(currInline->node()->shadowAncestorNode());
+ }
+ }
return !rect.contains(rectForPoint(x, y));
}