summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJan-Arve Saether <jan-arve.saether@nokia.com>2012-08-13 17:35:44 +0200
committerQt by Nokia <qt-info@nokia.com>2012-08-16 16:10:43 +0200
commit8c749cab4d457644a14698709d1c74dfa4d5ac6e (patch)
tree5ef0f063f50db9fa835b8f0de3b78ff6dfb99061 /src
parent4917daf500f0403042de35fcc17daa2d7d4f8475 (diff)
Implement QAccessibleLineEdit::characterRect()
It was probably not implemented because it needed to access private APIs. However, accessing those from this a11y plugin is unproblematic. Change-Id: Icadad45a83daa60e2fbc4cab17b91c84c3f36a7f Reviewed-by: Frederik Gladhorn <frederik.gladhorn@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/gui/widgets/qlineedit.h1
-rw-r--r--src/plugins/accessible/widgets/simplewidgets.cpp19
2 files changed, 17 insertions, 3 deletions
diff --git a/src/gui/widgets/qlineedit.h b/src/gui/widgets/qlineedit.h
index 48ff06b3fc..c14d1887fd 100644
--- a/src/gui/widgets/qlineedit.h
+++ b/src/gui/widgets/qlineedit.h
@@ -273,6 +273,7 @@ Q_SIGNALS:
private:
friend class QAbstractSpinBox;
+ friend class QAccessibleLineEdit;
#ifdef QT_KEYPAD_NAVIGATION
friend class QDateTimeEdit;
#endif
diff --git a/src/plugins/accessible/widgets/simplewidgets.cpp b/src/plugins/accessible/widgets/simplewidgets.cpp
index 46d76f0340..126045e543 100644
--- a/src/plugins/accessible/widgets/simplewidgets.cpp
+++ b/src/plugins/accessible/widgets/simplewidgets.cpp
@@ -51,6 +51,7 @@
#include <qgroupbox.h>
#include <qlcdnumber.h>
#include <qlineedit.h>
+#include <private/qlineedit_p.h>
#include <qstyle.h>
#include <qstyleoption.h>
@@ -876,10 +877,22 @@ int QAccessibleLineEdit::cursorPosition()
return lineEdit()->cursorPosition();
}
-QRect QAccessibleLineEdit::characterRect(int /*offset*/, CoordinateType /*coordType*/)
+QRect QAccessibleLineEdit::characterRect(int offset, CoordinateType coordType)
{
- // QLineEdit doesn't hand out character rects
- return QRect();
+ int left, top, right, bottom;
+ lineEdit()->getTextMargins(&left, &top, &right, &bottom);
+ int x = lineEdit()->d_func()->control->cursorToX(offset);
+ int y = top;
+ QFontMetrics fm(lineEdit()->font());
+ const QString ch = text(offset, offset + 1);
+ int w = fm.width(ch);
+ int h = fm.height();
+
+ QRect r(x, y, w, h);
+ if (coordType == QAccessible2::RelativeToScreen)
+ r.moveTo(lineEdit()->mapToGlobal(r.topLeft()));
+
+ return r;
}
int QAccessibleLineEdit::selectionCount()