summaryrefslogtreecommitdiffstats
path: root/src/widgets/widgets
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2019-01-21 13:03:09 +0100
committerQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2019-01-21 13:03:09 +0100
commitf94ca82e0ff6345648b499911411f2dcc1849267 (patch)
treebc5acac8bfecaf5bccc612f5b009bf249bc69ef1 /src/widgets/widgets
parentfe29a6a6ebbf28505df7cdf1de24fa540fd3745e (diff)
parentb1092a7d4240d419cc2b5f3f5c326a1cb680bbdd (diff)
Merge remote-tracking branch 'origin/5.12' into dev
Conflicts: .qmake.conf Change-Id: Ibfcb30053f3aacb8ec2ec480e146538c9bf440ea
Diffstat (limited to 'src/widgets/widgets')
-rw-r--r--src/widgets/widgets/qabstractbutton.cpp2
-rw-r--r--src/widgets/widgets/qabstractspinbox.cpp2
-rw-r--r--src/widgets/widgets/qmenu.cpp2
-rw-r--r--src/widgets/widgets/qmenubar.cpp2
-rw-r--r--src/widgets/widgets/qsplashscreen.cpp57
5 files changed, 51 insertions, 14 deletions
diff --git a/src/widgets/widgets/qabstractbutton.cpp b/src/widgets/widgets/qabstractbutton.cpp
index 5854472ff0..f30a3bc7b8 100644
--- a/src/widgets/widgets/qabstractbutton.cpp
+++ b/src/widgets/widgets/qabstractbutton.cpp
@@ -805,7 +805,7 @@ bool QAbstractButton::autoExclusive() const
Returns the group that this button belongs to.
If the button is not a member of any QButtonGroup, this function
- returns 0.
+ returns \nullptr.
\sa QButtonGroup
*/
diff --git a/src/widgets/widgets/qabstractspinbox.cpp b/src/widgets/widgets/qabstractspinbox.cpp
index 4e1aa51b4b..00ac5034e9 100644
--- a/src/widgets/widgets/qabstractspinbox.cpp
+++ b/src/widgets/widgets/qabstractspinbox.cpp
@@ -692,7 +692,7 @@ QLineEdit *QAbstractSpinBox::lineEdit() const
QAbstractSpinBox takes ownership of the new lineEdit
- If QLineEdit::validator() for the \a lineEdit returns 0, the internal
+ If QLineEdit::validator() for the \a lineEdit returns \nullptr, the internal
validator of the spinbox will be set on the line edit.
*/
diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp
index 5927331305..9b30ec4619 100644
--- a/src/widgets/widgets/qmenu.cpp
+++ b/src/widgets/widgets/qmenu.cpp
@@ -2255,7 +2255,7 @@ int QMenu::columnCount() const
}
/*!
- Returns the item at \a pt; returns 0 if there is no item there.
+ Returns the item at \a pt; returns \nullptr if there is no item there.
*/
QAction *QMenu::actionAt(const QPoint &pt) const
{
diff --git a/src/widgets/widgets/qmenubar.cpp b/src/widgets/widgets/qmenubar.cpp
index ce74a4c2ff..e7984078de 100644
--- a/src/widgets/widgets/qmenubar.cpp
+++ b/src/widgets/widgets/qmenubar.cpp
@@ -1581,7 +1581,7 @@ bool QMenuBar::eventFilter(QObject *object, QEvent *event)
}
/*!
- Returns the QAction at \a pt. Returns 0 if there is no action at \a pt or if
+ Returns the QAction at \a pt. Returns \nullptr if there is no action at \a pt or if
the location has a separator.
\sa addAction(), addSeparator()
diff --git a/src/widgets/widgets/qsplashscreen.cpp b/src/widgets/widgets/qsplashscreen.cpp
index 277d2fd99f..4af4f90119 100644
--- a/src/widgets/widgets/qsplashscreen.cpp
+++ b/src/widgets/widgets/qsplashscreen.cpp
@@ -46,6 +46,7 @@
#include "qpixmap.h"
#include "qtextdocument.h"
#include "qtextcursor.h"
+#include <QtGui/qscreen.h>
#include <QtGui/qwindow.h>
#include <QtCore/qdebug.h>
#include <QtCore/qelapsedtimer.h>
@@ -69,6 +70,10 @@ public:
int currAlign;
inline QSplashScreenPrivate();
+
+ void setPixmap(const QPixmap &p, const QScreen *screen = nullptr);
+
+ static const QScreen *screenFor(const QWidget *w);
};
/*!
@@ -143,8 +148,9 @@ QSplashScreen::QSplashScreen(const QPixmap &pixmap, Qt::WindowFlags f)
QSplashScreen::QSplashScreen(QWidget *parent, const QPixmap &pixmap, Qt::WindowFlags f)
: QWidget(*new QSplashScreenPrivate, parent, Qt::SplashScreen | Qt::FramelessWindowHint | f)
{
- d_func()->pixmap = pixmap;
- setPixmap(d_func()->pixmap); // Does an implicit repaint
+ // Does an implicit repaint. Explicitly pass parent as QObject::parent()
+ // is still 0 here due to QWidget's special handling.
+ d_func()->setPixmap(pixmap, QSplashScreenPrivate::screenFor(parent));
}
/*!
@@ -276,16 +282,47 @@ void QSplashScreen::finish(QWidget *mainWin)
*/
void QSplashScreen::setPixmap(const QPixmap &pixmap)
{
- Q_D(QSplashScreen);
+ d_func()->setPixmap(pixmap, QSplashScreenPrivate::screenFor(this));
+}
+
+// In setPixmap(), resize and try to position on a screen according to:
+// 1) If a QDesktopScreenWidget is found in the parent hierarchy, use that (see docs on
+// QSplashScreen(QWidget *, QPixmap).
+// 2) If a widget with associated QWindow is found, use that
+// 3) When nothing can be found, do not position the widget, allowing for
+// QPlatformWindow::initialGeometry() to center it over the cursor
+
+static inline int screenNumberOf(const QDesktopScreenWidget *dsw)
+{
+ auto desktopWidgetPrivate =
+ static_cast<QDesktopWidgetPrivate *>(qt_widget_private(QApplication::desktop()));
+ return desktopWidgetPrivate->screens.indexOf(const_cast<QDesktopScreenWidget *>(dsw));
+}
+
+const QScreen *QSplashScreenPrivate::screenFor(const QWidget *w)
+{
+ for (const QWidget *p = w; p !=nullptr ; p = p->parentWidget()) {
+ if (auto dsw = qobject_cast<const QDesktopScreenWidget *>(p))
+ return QGuiApplication::screens().value(screenNumberOf(dsw));
+ if (QWindow *window = p->windowHandle())
+ return window->screen();
+ }
+ return nullptr;
+}
+
+void QSplashScreenPrivate::setPixmap(const QPixmap &p, const QScreen *screen)
+{
+ Q_Q(QSplashScreen);
- d->pixmap = pixmap;
- setAttribute(Qt::WA_TranslucentBackground, pixmap.hasAlpha());
+ pixmap = p;
+ q->setAttribute(Qt::WA_TranslucentBackground, pixmap.hasAlpha());
- QRect r(QPoint(), d->pixmap.size() / d->pixmap.devicePixelRatio());
- resize(r.size());
- move(QDesktopWidgetPrivate::screenGeometry().center() - r.center());
- if (isVisible())
- repaint();
+ QRect r(QPoint(), pixmap.size() / pixmap.devicePixelRatio());
+ q->resize(r.size());
+ if (screen)
+ q->move(screen->geometry().center() - r.center());
+ if (q->isVisible())
+ q->repaint();
}
/*!