diff options
Diffstat (limited to 'src/widgets')
-rw-r--r-- | src/widgets/accessible/qaccessiblewidgets.cpp | 28 | ||||
-rw-r--r-- | src/widgets/kernel/qwidget.cpp | 4 | ||||
-rw-r--r-- | src/widgets/widgets/qsplashscreen.cpp | 5 |
3 files changed, 26 insertions, 11 deletions
diff --git a/src/widgets/accessible/qaccessiblewidgets.cpp b/src/widgets/accessible/qaccessiblewidgets.cpp index f459affd07..6e1e3df89a 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; diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 68715413d1..cb2e9e0bec 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -12272,7 +12272,7 @@ QPoint QWidget::mapToGlobal(const QPoint &pos) const { #ifndef QT_NO_GRAPHICSVIEW Q_D(const QWidget); - if (d->extra && d->extra->proxyWidget) { + if (d->extra && d->extra->proxyWidget && d->extra->proxyWidget->scene()) { const QList <QGraphicsView *> views = d->extra->proxyWidget->scene()->views(); if (!views.isEmpty()) { const QPointF scenePos = d->extra->proxyWidget->mapToScene(pos); @@ -12307,7 +12307,7 @@ QPoint QWidget::mapFromGlobal(const QPoint &pos) const { #ifndef QT_NO_GRAPHICSVIEW Q_D(const QWidget); - if (d->extra && d->extra->proxyWidget) { + if (d->extra && d->extra->proxyWidget && d->extra->proxyWidget->scene()) { const QList <QGraphicsView *> views = d->extra->proxyWidget->scene()->views(); if (!views.isEmpty()) { const QPoint viewPortPos = views.first()->viewport()->mapFromGlobal(pos); diff --git a/src/widgets/widgets/qsplashscreen.cpp b/src/widgets/widgets/qsplashscreen.cpp index d6b94803d7..30d6baa899 100644 --- a/src/widgets/widgets/qsplashscreen.cpp +++ b/src/widgets/widgets/qsplashscreen.cpp @@ -262,8 +262,11 @@ inline static bool waitForWindowExposed(QWindow *window, int timeout = 1000) void QSplashScreen::finish(QWidget *mainWin) { - if (mainWin && mainWin->windowHandle()) + if (mainWin) { + if (!mainWin->windowHandle()) + mainWin->createWinId(); waitForWindowExposed(mainWin->windowHandle()); + } close(); } |