summaryrefslogtreecommitdiffstats
path: root/src/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets')
-rw-r--r--src/widgets/accessible/qaccessiblewidgets.cpp28
-rw-r--r--src/widgets/kernel/qwidget.cpp4
-rw-r--r--src/widgets/widgets/qsplashscreen.cpp5
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();
}