Changeset 53072 in webkit


Ignore:
Timestamp:
Jan 11, 2010 4:03:36 AM (14 years ago)
Author:
eric@webkit.org
Message:

2010-01-11 Joanmarie Diggs <joanmarie.diggs@gmail.com>

Reviewed by Xan Lopez.

https://bugs.webkit.org/show_bug.cgi?id=30883
[Gtk] Implement AtkText for HTML elements which contain text

  • accessibility/gtk/AccessibilityObjectWrapperAtk.h
  • accessibility/gtk/AccessibilityObjectWrapperAtk.cpp: (objectAndOffsetUnignored): (webkit_accessible_text_get_caret_offset):
  • editing/gtk/SelectionControllerGtk.cpp: (SelectionController::notifyAccessibilityForSelectionChange)

Adjust the caret offset and object with focus to reflect the
unignored parent of the static text object which contains the
caret. This is necessary because the static text objects are
no longer being exposed to ATs.

Location:
trunk/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r53069 r53072  
     12010-01-11  Joanmarie Diggs  <joanmarie.diggs@gmail.com>
     2
     3        Reviewed by Xan Lopez.
     4
     5        https://bugs.webkit.org/show_bug.cgi?id=30883
     6        [Gtk] Implement AtkText for HTML elements which contain text
     7
     8        * accessibility/gtk/AccessibilityObjectWrapperAtk.h
     9        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
     10        (objectAndOffsetUnignored):
     11        (webkit_accessible_text_get_caret_offset):
     12        * editing/gtk/SelectionControllerGtk.cpp:
     13        (SelectionController::notifyAccessibilityForSelectionChange)
     14
     15        Adjust the caret offset and object with focus to reflect the
     16        unignored parent of the static text object which contains the
     17        caret. This is necessary because the static text objects are
     18        no longer being exposed to ATs.
     19
    1202010-01-11  Kim Grönholm  <kim.gronholm@nomovok.com>
    221
  • trunk/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp

    r52890 r53072  
    981981static gint webkit_accessible_text_get_caret_offset(AtkText* text)
    982982{
     983    // coreObject is the unignored object whose offset the caller is requesting.
     984    // focusedObject is the object with the caret. It is likely ignored -- unless it's a link.
     985    AccessibilityObject* coreObject = core(text);
     986    RenderObject* focusedNode = coreObject->selection().end().node()->renderer();
     987    AccessibilityObject* focusedObject = coreObject->document()->axObjectCache()->getOrCreate(focusedNode);
     988
     989    int offset;
     990    // Don't ignore links if the offset is being requested for a link.
     991    AccessibilityObject* object = objectAndOffsetUnignored(focusedObject, offset, !coreObject->isLink());
     992
    983993    // TODO: Verify this for RTL text.
    984     return core(text)->selection().end().offsetInContainerNode();
     994    return offset;
    985995}
    986996
     
    17341744}
    17351745
     1746AccessibilityObject* objectAndOffsetUnignored(AccessibilityObject* coreObject, int& offset, bool ignoreLinks)
     1747{
     1748    Node* endNode = static_cast<AccessibilityRenderObject*>(coreObject)->renderer()->node();
     1749    int endOffset = coreObject->selection().end().offsetInContainerNode();
     1750
     1751    AccessibilityObject* realObject = coreObject;
     1752    if (realObject->accessibilityIsIgnored())
     1753        realObject = realObject->parentObjectUnignored();
     1754
     1755    if (ignoreLinks && realObject->isLink())
     1756        realObject = realObject->parentObjectUnignored();
     1757
     1758    RefPtr<Range> range = rangeOfContents(static_cast<AccessibilityRenderObject*>(realObject)->renderer()->node());
     1759    ExceptionCode ec = 0;
     1760    range->setEndBefore(endNode, ec);
     1761    offset = range->text().length() + endOffset;
     1762
     1763    return realObject;
     1764}
     1765
    17361766#endif // HAVE(ACCESSIBILITY)
  • trunk/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.h

    r46952 r53072  
    6161AtkObject* webkit_accessible_get_focused_element(WebKitAccessible* accessible);
    6262
     63WebCore::AccessibilityObject* objectAndOffsetUnignored(WebCore::AccessibilityObject* coreObject, int& offset, bool ignoreLinks);
     64
    6365G_END_DECLS
    6466
  • trunk/WebCore/editing/gtk/SelectionControllerGtk.cpp

    r52451 r53072  
    2121#include "SelectionController.h"
    2222
     23#include "AccessibilityObjectWrapperAtk.h"
    2324#include "AXObjectCache.h"
    2425#include "Frame.h"
     
    3334        RenderObject* focusedNode = m_selection.end().node()->renderer();
    3435        AccessibilityObject* accessibilityObject = m_frame->document()->axObjectCache()->getOrCreate(focusedNode);
    35         AtkObject* wrapper = accessibilityObject->wrapper();
     36        int offset;
     37        // Always report the events w.r.t. the non-linked unignored parent. (i.e. ignoreLinks == true)
     38        AccessibilityObject* object = objectAndOffsetUnignored(accessibilityObject, offset, true);
     39        AtkObject* wrapper = object->wrapper();
    3640        if (ATK_IS_TEXT(wrapper)) {
    37             g_signal_emit_by_name(wrapper, "text-caret-moved", m_selection.end().computeOffsetInContainerNode());
    38 
     41            g_signal_emit_by_name(wrapper, "text-caret-moved", offset);
    3942            if (m_selection.isRange())
    4043                g_signal_emit_by_name(wrapper, "text-selection-changed");
Note: See TracChangeset for help on using the changeset viewer.