@@ -23,23 +23,27 @@
2323#include <QtGui/QImage>
2424#include <QtGui/QGuiApplication>
2525#include <QtQuick/QQuickWindow>
26−#include <QtConcurrent/QtConcurrentRun>
2726
2827#include <QDebug>
2928
30−bool saveScreenshot(const QImage &screenshot, const QString &filename, const QString &format, int quality)
29+QString saveScreenshot(const QImage &screenshot, const QString &filename, const QString &format, int quality)
3130{
32− if (!screenshot.save(filename, format.toLatin1().data(), quality)) {
31+ if (screenshot.save(filename, format.toLatin1().data(), quality)) {
32+ return filename;
33+ } else {
3334 qWarning() << "ScreenGrabber: failed to save snapshot!";
34− return false;
3535 }
36−
37− return true;
36+ return QString();
3837}
3938
4039ScreenGrabber::ScreenGrabber(QObject *parent)
4140 : QObject(parent)
4241{
42+ QObject::connect(&m_watcher,
43+ &QFutureWatcher<QString>::finished,
44+ this,
45+ &ScreenGrabber::onScreenshotSaved);
46+
4347 QDir screenshotsDir;
4448 if (qEnvironmentVariableIsSet("UNITY_TESTING")) {
4549 qDebug() << "Using test environment";
@@ -85,8 +89,14 @@ void ScreenGrabber::captureAndSave(int angle)
8589 const QImage screenshot = main_window->grabWindow().transformed(QTransform().rotate(angle));
8690 const QString filename = makeFileName();
8791 qDebug() << "Saving screenshot to" << filename;
88− auto saveOp = QtConcurrent::run(saveScreenshot, screenshot, filename, getFormat(), screenshotQuality);
89− if (saveOp.result()) {
92+ QFuture<QString> saveFuture(QtConcurrent::run(saveScreenshot, screenshot, filename, getFormat(), screenshotQuality));
93+ m_watcher.setFuture(saveFuture);
94+}
95+
96+void ScreenGrabber::onScreenshotSaved()
97+{
98+ const QString filename = m_watcher.future().result();
99+ if (!filename.isEmpty()) {
90100 Q_EMIT screenshotSaved(filename);
91101 }
92102}