diff options
Diffstat (limited to 'WebCore/page/AccessibilityTableCell.cpp')
-rw-r--r-- | WebCore/page/AccessibilityTableCell.cpp | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/WebCore/page/AccessibilityTableCell.cpp b/WebCore/page/AccessibilityTableCell.cpp index 2062a88..ff82811 100644 --- a/WebCore/page/AccessibilityTableCell.cpp +++ b/WebCore/page/AccessibilityTableCell.cpp @@ -30,6 +30,7 @@ #include "AccessibilityTableCell.h" #include "AXObjectCache.h" +#include "HTMLNames.h" #include "RenderObject.h" #include "RenderTableCell.h" @@ -37,6 +38,8 @@ using namespace std; namespace WebCore { +using namespace HTMLNames; + AccessibilityTableCell::AccessibilityTableCell(RenderObject* renderer) : AccessibilityRenderObject(renderer) { @@ -84,7 +87,7 @@ void AccessibilityTableCell::rowIndexRange(pair<int, int>& rowRange) if (!m_renderer) return; - RenderTableCell *renderCell = static_cast<RenderTableCell*>(m_renderer); + RenderTableCell* renderCell = static_cast<RenderTableCell*>(m_renderer); rowRange.first = renderCell->row(); rowRange.second = renderCell->rowSpan(); @@ -114,9 +117,41 @@ void AccessibilityTableCell::columnIndexRange(pair<int, int>& columnRange) if (!m_renderer) return; - RenderTableCell *renderCell = static_cast<RenderTableCell*>(m_renderer); + RenderTableCell* renderCell = static_cast<RenderTableCell*>(m_renderer); columnRange.first = renderCell->col(); columnRange.second = renderCell->colSpan(); } +AccessibilityObject* AccessibilityTableCell::titleUIElement() const +{ + // Try to find if the first cell in this row is a <th>. If it is, + // then it can act as the title ui element. (This is only in the + // case when the table is not appearing as an AXTable.) + if (!m_renderer || isTableCell()) + return 0; + + RenderTableCell* renderCell = static_cast<RenderTableCell*>(m_renderer); + + // If this cell is in the first column, there is no need to continue. + int col = renderCell->col(); + if (!col) + return 0; + + int row = renderCell->row(); + + RenderTableSection* section = renderCell->section(); + if (!section) + return 0; + + RenderTableCell* headerCell = section->cellAt(row, 0).cell; + if (!headerCell || headerCell == renderCell) + return 0; + + Node* cellElement = headerCell->element(); + if (!cellElement || !cellElement->hasTagName(thTag)) + return 0; + + return axObjectCache()->get(headerCell); +} + } // namespace WebCore |