[SCM] WebKit Debian packaging branch, webkit-1.2, updated. upstream/1.1.90-6072-g9a69373

eric at webkit.org eric at webkit.org
Thu Apr 8 00:59:47 UTC 2010


The following commit has been merged in the webkit-1.2 branch:
commit 2fade49993da0111f76aee32a6ca3fc898ab2679
Author: eric at webkit.org <eric at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Mon Jan 11 12:03:36 2010 +0000

    2010-01-11  Joanmarie Diggs  <joanmarie.diggs at 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.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@53072 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 1a10811..d5560d0 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,22 @@
+2010-01-11  Joanmarie Diggs  <joanmarie.diggs at 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.
+
 2010-01-11  Kim Grönholm  <kim.gronholm at nomovok.com>
 
         Reviewed by Antti Koivisto.
diff --git a/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp b/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp
index dc96f4a..4cf353a 100644
--- a/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp
+++ b/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp
@@ -980,8 +980,18 @@ static gunichar webkit_accessible_text_get_character_at_offset(AtkText* text, gi
 
 static gint webkit_accessible_text_get_caret_offset(AtkText* text)
 {
+    // coreObject is the unignored object whose offset the caller is requesting.
+    // focusedObject is the object with the caret. It is likely ignored -- unless it's a link.
+    AccessibilityObject* coreObject = core(text);
+    RenderObject* focusedNode = coreObject->selection().end().node()->renderer();
+    AccessibilityObject* focusedObject = coreObject->document()->axObjectCache()->getOrCreate(focusedNode);
+
+    int offset;
+    // Don't ignore links if the offset is being requested for a link.
+    AccessibilityObject* object = objectAndOffsetUnignored(focusedObject, offset, !coreObject->isLink());
+
     // TODO: Verify this for RTL text.
-    return core(text)->selection().end().offsetInContainerNode();
+    return offset;
 }
 
 static AtkAttributeSet* webkit_accessible_text_get_run_attributes(AtkText* text, gint offset, gint* start_offset, gint* end_offset)
@@ -1733,4 +1743,24 @@ AtkObject* webkit_accessible_get_focused_element(WebKitAccessible* accessible)
     return focusedObj->wrapper();
 }
 
+AccessibilityObject* objectAndOffsetUnignored(AccessibilityObject* coreObject, int& offset, bool ignoreLinks)
+{
+    Node* endNode = static_cast<AccessibilityRenderObject*>(coreObject)->renderer()->node();
+    int endOffset = coreObject->selection().end().offsetInContainerNode();
+
+    AccessibilityObject* realObject = coreObject;
+    if (realObject->accessibilityIsIgnored())
+        realObject = realObject->parentObjectUnignored();
+
+    if (ignoreLinks && realObject->isLink())
+        realObject = realObject->parentObjectUnignored();
+
+    RefPtr<Range> range = rangeOfContents(static_cast<AccessibilityRenderObject*>(realObject)->renderer()->node());
+    ExceptionCode ec = 0;
+    range->setEndBefore(endNode, ec);
+    offset = range->text().length() + endOffset;
+
+    return realObject;
+}
+
 #endif // HAVE(ACCESSIBILITY)
diff --git a/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.h b/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.h
index 0b31b82..e8cec08 100644
--- a/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.h
+++ b/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.h
@@ -60,6 +60,8 @@ void webkit_accessible_detach (WebKitAccessible* accessible);
 
 AtkObject* webkit_accessible_get_focused_element(WebKitAccessible* accessible);
 
+WebCore::AccessibilityObject* objectAndOffsetUnignored(WebCore::AccessibilityObject* coreObject, int& offset, bool ignoreLinks);
+
 G_END_DECLS
 
 #endif // AccessibilityObjectWrapperAtk_h
diff --git a/WebCore/editing/gtk/SelectionControllerGtk.cpp b/WebCore/editing/gtk/SelectionControllerGtk.cpp
index 168c297..6a3258a 100644
--- a/WebCore/editing/gtk/SelectionControllerGtk.cpp
+++ b/WebCore/editing/gtk/SelectionControllerGtk.cpp
@@ -20,6 +20,7 @@
 #include "config.h"
 #include "SelectionController.h"
 
+#include "AccessibilityObjectWrapperAtk.h"
 #include "AXObjectCache.h"
 #include "Frame.h"
 
@@ -32,10 +33,12 @@ void SelectionController::notifyAccessibilityForSelectionChange()
     if (AXObjectCache::accessibilityEnabled() && m_selection.start().isNotNull() && m_selection.end().isNotNull()) {
         RenderObject* focusedNode = m_selection.end().node()->renderer();
         AccessibilityObject* accessibilityObject = m_frame->document()->axObjectCache()->getOrCreate(focusedNode);
-        AtkObject* wrapper = accessibilityObject->wrapper();
+        int offset;
+        // Always report the events w.r.t. the non-linked unignored parent. (i.e. ignoreLinks == true)
+        AccessibilityObject* object = objectAndOffsetUnignored(accessibilityObject, offset, true);
+        AtkObject* wrapper = object->wrapper();
         if (ATK_IS_TEXT(wrapper)) {
-            g_signal_emit_by_name(wrapper, "text-caret-moved", m_selection.end().computeOffsetInContainerNode());
-
+            g_signal_emit_by_name(wrapper, "text-caret-moved", offset);
             if (m_selection.isRange())
                 g_signal_emit_by_name(wrapper, "text-selection-changed");
         }

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list