summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRobin Burchell <robin.burchell@crimson.no>2017-03-15 17:51:03 +0100
committerRobin Burchell <robin.burchell@crimson.no>2017-04-14 09:10:27 +0000
commit01a4d09ef6e1fae0d9b9ab924e7f3fed001ad8c8 (patch)
tree1dda5f3b2cb08aaec9f3be059ee698d7f42eed01 /src
parent401d9b527823ffc8691e8a624ee3d40495622359 (diff)
QMovie: Make sure to pass on QImageReader errors when they occur
If a file cannot be opened for some reason (like running out of FDs), emit the error signal. Change-Id: I9586dda34b2f2cef73593c6dcb855b29d63c2dbc Reviewed-by: Gunnar Sletta <gunnar@crimson.no>
Diffstat (limited to 'src')
-rw-r--r--src/gui/image/qmovie.cpp21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/gui/image/qmovie.cpp b/src/gui/image/qmovie.cpp
index 55ddd839b7..2f02a33b09 100644
--- a/src/gui/image/qmovie.cpp
+++ b/src/gui/image/qmovie.cpp
@@ -330,6 +330,8 @@ int QMoviePrivate::speedAdjustedDelay(int delay) const
*/
QFrameInfo QMoviePrivate::infoForFrame(int frameNumber)
{
+ Q_Q(QMovie);
+
if (frameNumber < 0)
return QFrameInfo(); // Invalid
@@ -358,7 +360,8 @@ QFrameInfo QMoviePrivate::infoForFrame(int frameNumber)
reader = new QImageReader(device, format);
else
reader = new QImageReader(absoluteFilePath, format);
- (void)reader->canRead(); // Provoke a device->open() call
+ if (!reader->canRead()) // Provoke a device->open() call
+ emit q->error(reader->error());
reader->device()->seek(initialDevicePos);
reader->setBackgroundColor(bgColor);
reader->setScaledSize(scaledSize);
@@ -525,8 +528,20 @@ void QMoviePrivate::_q_loadNextFrame(bool starting)
*/
bool QMoviePrivate::isValid() const
{
- return (greatestFrameNumber >= 0) // have we seen valid data
- || reader->canRead(); // or does the reader see valid data
+ Q_Q(const QMovie);
+
+ if (greatestFrameNumber >= 0)
+ return true; // have we seen valid data
+ bool canRead = reader->canRead();
+ if (!canRead) {
+ // let the consumer know it's broken
+ //
+ // ### the const_cast here is ugly, but 'const' of this method is
+ // technically wrong right now, since it may cause the underlying device
+ // to open.
+ emit const_cast<QMovie*>(q)->error(reader->error());
+ }
+ return canRead;
}
/*!