diff options
author | Bjørn Erik Nilsen <bjorn.nilsen@nokia.com> | 2010-02-03 18:39:17 (GMT) |
---|---|---|
committer | Bjørn Erik Nilsen <bjorn.nilsen@nokia.com> | 2010-02-03 19:00:36 (GMT) |
commit | dda8a57c085216db609f822837c50bae38006b4e (patch) | |
tree | 94b030b5b8530a70ffd8ca1313ada2599f6de227 /src/gui/graphicsview | |
parent | 1b8c6049af9f20ac3df5469dd18d231da6aebfcd (diff) | |
download | Qt-dda8a57c085216db609f822837c50bae38006b4e.zip Qt-dda8a57c085216db609f822837c50bae38006b4e.tar.gz Qt-dda8a57c085216db609f822837c50bae38006b4e.tar.bz2 |
QGraphicsWidget is painted twice on the first show.
We want to discard all update requests when we there's a full update
pending. The problem was that 'updateAll' was reset too early causing
update requests to fall through. To prevent this from happening we
reset 'updateAll' right before the items are actually painted.
Auto-test included.
Task-number: QTBUG-6956
Diffstat (limited to 'src/gui/graphicsview')
-rw-r--r-- | src/gui/graphicsview/qgraphicsscene.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp index 4bfe9ad..66707fc 100644 --- a/src/gui/graphicsview/qgraphicsscene.cpp +++ b/src/gui/graphicsview/qgraphicsscene.cpp @@ -373,7 +373,10 @@ void QGraphicsScenePrivate::_q_emitUpdated() } } } else { - updateAll = false; + if (views.isEmpty()) { + updateAll = false; + return; + } for (int i = 0; i < views.size(); ++i) views.at(i)->d_func()->processPendingUpdates(); // It's important that we update all views before we dispatch, hence two for-loops. @@ -4604,6 +4607,7 @@ void QGraphicsScenePrivate::drawItems(QPainter *painter, const QTransform *const if (!unpolishedItems.isEmpty()) _q_polishItems(); + updateAll = false; QRectF exposedSceneRect; if (exposedRegion && indexMethod != QGraphicsScene::NoIndex) { exposedSceneRect = exposedRegion->boundingRect().adjusted(-1, -1, 1, 1); @@ -5166,6 +5170,7 @@ void QGraphicsScene::drawItems(QPainter *painter, if (!d->unpolishedItems.isEmpty()) d->_q_polishItems(); + d->updateAll = false; QTransform viewTransform = painter->worldTransform(); Q_UNUSED(options); |