+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.
#import "FrameMac.h"
#import "HTMLAreaElement.h"
#import "HTMLCollection.h"
+#import "htmlediting.h"
#import "HTMLFrameElement.h"
#import "HTMLInputElement.h"
#import "HTMLMapElement.h"
{
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];
}