Reviewed by Maciej.
authorharrison <harrison@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 22 Aug 2006 12:47:26 +0000 (12:47 +0000)
committerharrison <harrison@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 22 Aug 2006 12:47:26 +0000 (12:47 +0000)
        <rdar://problem/4407336> Some non-text elements return AXTextMarkerRangeForUIElement with equal start and end marker

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject textMarkerRange]):
        Use 0 and maxDeepOffset(), instead of caretMinOffset() and caretMaxRenderedOffset().
        Check for VisiblePositions being equal.  If so, adjust end one to its next().
        That happens with, e.g., buttons.

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

WebCore/ChangeLog
WebCore/bridge/mac/WebCoreAXObject.mm

index 2232796bda9322d6883633c52df35b0e27f92c99..e3eb25ea04248867f589c10006879fd4c82a4a16 100644 (file)
@@ -1,3 +1,15 @@
+2006-08-22  David Harrison  <harrison@apple.com>
+
+        Reviewed by Maciej.
+
+        <rdar://problem/4407336> Some non-text elements return AXTextMarkerRangeForUIElement with equal start and end marker
+
+        * bridge/mac/WebCoreAXObject.mm:
+        (-[WebCoreAXObject textMarkerRange]):
+        Use 0 and maxDeepOffset(), instead of caretMinOffset() and caretMaxRenderedOffset().
+        Check for VisiblePositions being equal.  If so, adjust end one to its next().
+        That happens with, e.g., buttons.
+
 2006-08-22  Rob Buis  <buis@kde.org>
 
         Reviewed by Eric.
index f3c9942dfeae840559066524921b9418a0857984..ad0b40e8f3aa6209ba33150f027bd76bf1261ce8 100644 (file)
@@ -33,6 +33,7 @@
 #import "FrameMac.h"
 #import "HTMLAreaElement.h"
 #import "HTMLCollection.h"
+#import "htmlediting.h"
 #import "HTMLFrameElement.h"
 #import "HTMLInputElement.h"
 #import "HTMLMapElement.h"
@@ -786,9 +787,21 @@ static IntRect boundingBoxRect(RenderObject* obj)
 {
     if (!m_renderer)
         return nil;
-        
-    WebCoreTextMarker* startTextMarker = [self textMarkerForVisiblePosition: VisiblePosition(m_renderer->element(), m_renderer->caretMinOffset(), VP_DEFAULT_AFFINITY)];
-    WebCoreTextMarker* endTextMarker   = [self textMarkerForVisiblePosition: VisiblePosition(m_renderer->element(), m_renderer->caretMaxRenderedOffset(), VP_DEFAULT_AFFINITY)];
+    
+    // construct VisiblePositions for start and end
+    Node* node = m_renderer->element();
+    VisiblePosition visiblePos1 = VisiblePosition(node, 0, VP_DEFAULT_AFFINITY);
+    VisiblePosition visiblePos2 = VisiblePosition(node, maxDeepOffset(node), VP_DEFAULT_AFFINITY);
+    
+    // the VisiblePositions are equal for nodes like buttons, so adjust for that
+    if (visiblePos1 == visiblePos2) {
+        visiblePos2 = visiblePos2.next();
+        if (visiblePos2.isNull())
+            visiblePos2 = visiblePos1;
+    }
+    
+    WebCoreTextMarker* startTextMarker = [self textMarkerForVisiblePosition: visiblePos1];
+    WebCoreTextMarker* endTextMarker   = [self textMarkerForVisiblePosition: visiblePos2];
     return [self textMarkerRangeFromMarkers: startTextMarker andEndMarker:endTextMarker];
 }