Don't crash when Image.source change
authorGunnar Sletta <gunnar.sletta@nokia.com>
Tue, 27 Sep 2011 15:04:03 +0000 (17:04 +0200)
committerQt by Nokia <qt-info@nokia.com>
Wed, 28 Sep 2011 08:33:18 +0000 (10:33 +0200)
QDeclarativePixmap::clear() may result in the texture being
scheduled for deletion, so we need to make sure that our texture
provider is updated properly whenever the source changes.

Change-Id: Ie21c6fcba4b0cd438250dc4c263b513060cc026e
Reviewed-on: http://codereview.qt-project.org/5673
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Aaron Kennedy <aaron.kennedy@nokia.com>
src/declarative/items/qsgimage.cpp
src/declarative/items/qsgimagebase.cpp

index 8cf8599..92b454b 100644 (file)
@@ -704,6 +704,10 @@ void QSGImage::pixmapChange()
         QSGImageBase::pixmapChange();
     updatePaintedGeometry();
     d->pixmapChanged = true;
+
+    // Make sure we update the texture provider when the image has changed.
+    if (d->provider)
+        update();
 }
 
 QSGImage::VAlignment QSGImage::verticalAlignment() const
index 5c6334d..0c08010 100644 (file)
@@ -208,6 +208,7 @@ void QSGImageBase::load()
         if (d->cache)
             options |= QDeclarativePixmap::Cache;
         d->pix.clear(this);
+        pixmapChange();
         d->pix.load(qmlEngine(this), d->url, d->explicitSourceSize ? sourceSize() : QSize(), options);
 
         if (d->pix.isLoading()) {