tree 1e6ccfdf05fa7b2c5835bf141c9861ae7bb99695
parent 76bec615d403bfa96419d995eea4161013da7a3e
author mario@webkit.org <mario@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc> 1302555743 +0000
committer mario@webkit.org <mario@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc> 1302555743 +0000

2011-04-11  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [Gtk] Implement support for Embedded Objects
        https://bugs.webkit.org/show_bug.cgi?id=52148

        Expose special OBJECT character for replaced elements, implementing
        AtkText and AtkHyperlink when required.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::textIteratorBehaviorForTextRange): New helper function,
        to return the right behavior, depending on the platform, so it
        ensures that object replacement characters get emitted for GTK.
        (WebCore::AccessibilityRenderObject::textUnderElement): Use the
        new helper function textIteratorBehaviorForTextRange.
        (WebCore::AccessibilityRenderObject::stringValue): Ditto.
        (WebCore::AccessibilityRenderObject::indexForVisiblePosition):
        Consider replaced elements when calculating range length in GTK.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (textForRenderer): Ouput the 'object replacement character' for
        replaced objects.
        (getSelectionOffsetsForObject): Consider replaced elements when
        calculating range length in GTK.
        (webkitAccessibleHypertextGetLink): Remove wrong extra check that
        were causing only links to be considered.
        (webkitAccessibleHypertextGetNLinks): Replace wrong 'isLink()'
        check with the right one, by checking that the right ATK interface
        is being implemented by the AtkObject.
        (getInterfaceMaskFromObject): Implement the Hyperlink interface
        both for links and replaced objects.
        (objectAndOffsetUnignored): Consider replaced elements when
        calculating range length in GTK.

        * accessibility/gtk/WebKitAccessibleHyperlink.cpp:
        (getRangeLengthForObject): Ensure spaces are used for replaced
        elements when calling to TextIterator::rangeLength().

        * editing/TextIterator.h: New value in the TextIteratorBehavior
        enumeration (TextIteratorEmitsObjectReplacementCharacters) and new
        private variable to consider that new option internally.
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator): Initialize the new private
        attribute m_emitsObjectReplacementCharacters in constructors.
        (WebCore::TextIterator::handleReplacedElement): Emit the 'object
        replacement character' when m_emitsObjectReplacementCharacters.
2011-04-11  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [Gtk] Implement support for Embedded Objects
        https://bugs.webkit.org/show_bug.cgi?id=52148

        New accessibility unit test for embedded objects.

        * tests/testatk.c:
        (testWebkitAtkEmbeddedObjects): New unit test.
        (main): Added the new unit test.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@83493 268f45cc-cd09-0410-ab3c-d52691b4dbfc
