diff options
author | Friedemann Kleint <Friedemann.Kleint@nokia.com> | 2012-05-25 14:55:44 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-05-29 20:12:32 +0200 |
commit | 65a264c4a16fc995ec2b495dd8839d9965ceb605 (patch) | |
tree | b6756023c17674779138d766aee7c72add3e91e7 /src/widgets | |
parent | 97659d87be87550bd6a1ba6a72ff29ea3f98cf8f (diff) |
QWidget::grab(): Do not call adjustSize() unconditionally.
This breaks the combo dropdown animation on Windows as it
uses special layout tricks and potentially other (unlaid-out)
widgets.
If the size is unknown, call prepareToRender instead.
Reverts d6f971c8547d7f0619b63f7e07f1c292e811b45f.
Change-Id: If44e2a7e7fb134c228674cf228bbee0d5520e04f
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
Diffstat (limited to 'src/widgets')
-rw-r--r-- | src/widgets/kernel/qwidget.cpp | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 467b1fc311..3d0ffd9269 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -4776,17 +4776,15 @@ static void sendResizeEvents(QWidget *target) /* INVOKABLE since used by QPixmap::grabWidget(). */ QPixmap QWidget::grab(const QRect &rectangle) { - Q_D(const QWidget); + Q_D(QWidget); if (testAttribute(Qt::WA_PendingResizeEvent) || !testAttribute(Qt::WA_WState_Created)) sendResizeEvents(this); - adjustSize(); + const QWidget::RenderFlags renderFlags = QWidget::DrawWindowBackground | QWidget::DrawChildren | QWidget::IgnoreMask; QRect r(rectangle); - if (r.width() < 0) - r.setWidth(width() - rectangle.x()); - if (r.height() < 0) - r.setHeight(height() - rectangle.y()); + if (r.width() < 0 || r.height() < 0) + r = d->prepareToRender(QRegion(), renderFlags).boundingRect(); if (!r.intersects(rect())) return QPixmap(); @@ -4794,8 +4792,7 @@ QPixmap QWidget::grab(const QRect &rectangle) QPixmap res(r.size()); if (!d->isOpaque) res.fill(Qt::transparent); - render(&res, QPoint(), QRegion(r), QWidget::DrawWindowBackground - | QWidget::DrawChildren | QWidget::IgnoreMask); + render(&res, QPoint(), QRegion(r), renderFlags); return res; } |