summaryrefslogtreecommitdiffstats
path: root/src/widgets
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>2012-05-25 14:55:44 +0200
committerQt by Nokia <qt-info@nokia.com>2012-05-29 20:12:32 +0200
commit65a264c4a16fc995ec2b495dd8839d9965ceb605 (patch)
treeb6756023c17674779138d766aee7c72add3e91e7 /src/widgets
parent97659d87be87550bd6a1ba6a72ff29ea3f98cf8f (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.cpp13
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;
}