summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@nokia.com>2012-07-02 17:08:43 +0200
committerQt by Nokia <qt-info@nokia.com>2012-07-03 13:32:01 +0200
commit97b8915bb122c6f4160cb1ed05c35a1ad95f783f (patch)
tree62c9c6c9376911bc67c44a732a0de0f29224d024
parent3037525530fa47c35cdcb492bf3e42d36e85e6c3 (diff)
fix QWidget::grab(QRect(x, y, -1, -1))
Grabbing a widget with a position != (0,0) and an invalid size returned a pixmap of the widget's size. As we're grabbing just a part of the widget, the pixmap must be smaller by the amount of x, respective y. Autotest: tst_QWidget::grab() Change-Id: I3d5103e6e7c042cc6112038ace236e3f69060bda Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com> Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
-rw-r--r--src/widgets/kernel/qwidget.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp
index 0da28416a3..2fcf3e457c 100644
--- a/src/widgets/kernel/qwidget.cpp
+++ b/src/widgets/kernel/qwidget.cpp
@@ -4763,8 +4763,12 @@ QPixmap QWidget::grab(const QRect &rectangle)
const QWidget::RenderFlags renderFlags = QWidget::DrawWindowBackground | QWidget::DrawChildren | QWidget::IgnoreMask;
QRect r(rectangle);
- if (r.width() < 0 || r.height() < 0)
+ if (r.width() < 0 || r.height() < 0) {
+ // For grabbing widgets that haven't been shown yet,
+ // we trigger the layouting mechanism to determine the widget's size.
r = d->prepareToRender(QRegion(), renderFlags).boundingRect();
+ r.setTopLeft(rectangle.topLeft());
+ }
if (!r.intersects(rect()))
return QPixmap();