summaryrefslogtreecommitdiffstats
path: root/src/widgets/accessible/qaccessiblewidgets.cpp
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@theqtcompany.com>2015-02-24 17:19:40 +0100
committerFrederik Gladhorn <frederik.gladhorn@theqtcompany.com>2015-02-24 21:02:08 +0100
commit34b14a8472f44f8517577756e033b92ebd4c5912 (patch)
tree66a0575156d0a17a835430137e218e2b3f04cc65 /src/widgets/accessible/qaccessiblewidgets.cpp
parentd34353a065c443aac20376cbd88323480d769183 (diff)
parentedd555425a08f9e074f0a4d9333862636ccaae8d (diff)
Merge remote-tracking branch 'origin/5.4' into 5.5
Conflicts: examples/xml/htmlinfo/simpleexample.html examples/xml/rsslisting/rsslisting.cpp qmake/generators/win32/msbuild_objectmodel.cpp src/3rdparty/harfbuzz-ng/src/hb-private.hh src/corelib/global/qlogging.cpp src/corelib/io/qstorageinfo_unix.cpp src/corelib/thread/qwaitcondition_unix.cpp src/gui/kernel/qguiapplication.cpp src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp src/testlib/doc/src/qt-webpages.qdoc tests/auto/other/qaccessibility/tst_qaccessibility.cpp Change-Id: Ib272ff0bc30a1a5d51275eb3cd2f201dc82c11ff
Diffstat (limited to 'src/widgets/accessible/qaccessiblewidgets.cpp')
-rw-r--r--src/widgets/accessible/qaccessiblewidgets.cpp28
1 files changed, 20 insertions, 8 deletions
diff --git a/src/widgets/accessible/qaccessiblewidgets.cpp b/src/widgets/accessible/qaccessiblewidgets.cpp
index 3f12ae6f0d..7080dd6f8d 100644
--- a/src/widgets/accessible/qaccessiblewidgets.cpp
+++ b/src/widgets/accessible/qaccessiblewidgets.cpp
@@ -727,19 +727,31 @@ QString QAccessibleTextWidget::attributes(int offset, int *startOffset, int *end
int blockEnd = blockStart + block.length();
QTextBlock::iterator iter = block.begin();
- while (!iter.fragment().contains(offset))
+ int lastFragmentIndex = blockStart;
+ while (!iter.atEnd()) {
+ QTextFragment f = iter.fragment();
+ if (f.contains(offset))
+ break;
+ lastFragmentIndex = f.position() + f.length();
++iter;
+ }
- QTextFragment fragment = iter.fragment();
- int pos = fragment.position();
-
- // text block and fragment may overlap, use the smallest common range
- *startOffset = qMax(pos, blockStart);
+ QTextCharFormat charFormat;
+ if (!iter.atEnd()) {
+ QTextFragment fragment = iter.fragment();
+ charFormat = fragment.charFormat();
+ int pos = fragment.position();
+ // text block and fragment may overlap, use the smallest common range
+ *startOffset = qMax(pos, blockStart);
+ *endOffset = qMin(pos + fragment.length(), blockEnd);
+ } else {
+ charFormat = block.charFormat();
+ *startOffset = lastFragmentIndex;
+ *endOffset = blockEnd;
+ }
Q_ASSERT(*startOffset <= offset);
- *endOffset = qMin(pos + fragment.length(), blockEnd);
Q_ASSERT(*endOffset >= offset);
- QTextCharFormat charFormat = fragment.charFormat();
QTextBlockFormat blockFormat = cursor.blockFormat();
QMap<QByteArray, QString> attrs;