summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm b/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm
index 8a6c27605b..1cb51a37bc 100644
--- a/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm
+++ b/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm
@@ -402,8 +402,17 @@ static void convertLineOffset(QAccessibleTextInterface *text, int &line, int &of
if ([attribute isEqualToString: NSAccessibilityBoundsForRangeParameterizedAttribute]) {
NSRange range = [parameter rangeValue];
QRect firstRect = iface->textInterface()->characterRect(range.location);
- QRect lastRect = iface->textInterface()->characterRect(range.location + range.length);
- QRect rect = firstRect.united(lastRect); // This is off quite often, but at least a rough approximation
+ QRect rect;
+ if (range.length > 0) {
+ NSUInteger position = range.location + range.length - 1;
+ if (position > range.location && iface->textInterface()->text(position, position + 1) == QStringLiteral("\n"))
+ --position;
+ QRect lastRect = iface->textInterface()->characterRect(position);
+ rect = firstRect.united(lastRect);
+ } else {
+ rect = firstRect;
+ rect.setWidth(1);
+ }
return [NSValue valueWithRect: NSMakeRect((CGFloat) rect.x(),(CGFloat) qt_mac_flipYCoordinate(rect.y() + rect.height()), rect.width(), rect.height())];
}
if ([attribute isEqualToString: NSAccessibilityAttributedStringForRangeParameterizedAttribute]) {