diff options
Diffstat (limited to 'WebCore/accessibility/gtk')
-rw-r--r-- | WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp b/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp index 3575afe..aa88217 100644 --- a/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp +++ b/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp @@ -1032,12 +1032,22 @@ static gint webkit_accessible_text_get_caret_offset(AtkText* text) int offset; // Don't ignore links if the offset is being requested for a link. - objectAndOffsetUnignored(focusedObject, offset, !coreObject->isLink()); + if (!objectAndOffsetUnignored(focusedObject, offset, !coreObject->isLink())) + return 0; // TODO: Verify this for RTL text. return offset; } +static int baselinePositionForAccessibilityRenderObject(RenderObject* renderObject) +{ + // FIXME: This implementation of baselinePosition originates from RenderObject.cpp and was + // removed in r70072. The implementation looks incorrect though, because this is not the + // baseline of the underlying RenderObject, but of the AccessibilityRenderObject. + const Font& f = renderObject->firstLineStyle()->font(); + return f.ascent() + (renderObject->firstLineStyle()->computedLineHeight() - f.height()) / 2; +} + static AtkAttributeSet* getAttributeSetForAccessibilityObject(const AccessibilityObject* object) { if (!object->isAccessibilityRenderObject()) @@ -1068,10 +1078,10 @@ static AtkAttributeSet* getAttributeSetForAccessibilityObject(const Accessibilit bool includeRise = true; switch (style->verticalAlign()) { case SUB: - baselinePosition = -1 * renderer->baselinePosition(true); + baselinePosition = -1 * baselinePositionForAccessibilityRenderObject(renderer); break; case SUPER: - baselinePosition = renderer->baselinePosition(true); + baselinePosition = baselinePositionForAccessibilityRenderObject(renderer); break; case BASELINE: baselinePosition = 0; @@ -2179,9 +2189,13 @@ AccessibilityObject* objectAndOffsetUnignored(AccessibilityObject* coreObject, i AccessibilityObject* realObject = coreObject; if (realObject->accessibilityIsIgnored()) realObject = realObject->parentObjectUnignored(); + if (!realObject) + return 0; if (ignoreLinks && realObject->isLink()) realObject = realObject->parentObjectUnignored(); + if (!realObject) + return 0; Node* node = static_cast<AccessibilityRenderObject*>(realObject)->renderer()->node(); if (node) { |