diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-01-21 13:03:09 +0100 |
---|---|---|
committer | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-01-21 13:03:09 +0100 |
commit | f94ca82e0ff6345648b499911411f2dcc1849267 (patch) | |
tree | bc5acac8bfecaf5bccc612f5b009bf249bc69ef1 /src/widgets/widgets | |
parent | fe29a6a6ebbf28505df7cdf1de24fa540fd3745e (diff) | |
parent | b1092a7d4240d419cc2b5f3f5c326a1cb680bbdd (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.cpp | 2 | ||||
-rw-r--r-- | src/widgets/widgets/qabstractspinbox.cpp | 2 | ||||
-rw-r--r-- | src/widgets/widgets/qmenu.cpp | 2 | ||||
-rw-r--r-- | src/widgets/widgets/qmenubar.cpp | 2 | ||||
-rw-r--r-- | src/widgets/widgets/qsplashscreen.cpp | 57 |
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(); } /*! |