From 65a264c4a16fc995ec2b495dd8839d9965ceb605 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 25 May 2012 14:55:44 +0200 Subject: [PATCH] QWidget::grab(): Do not call adjustSize() unconditionally. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 --- src/widgets/kernel/qwidget.cpp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 467b1fc..3d0ffd9 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; } -- 2.7.4