@@ -23,23 +23,27 @@
23#include <QtGui/QImage>
23#include <QtGui/QImage>
24#include <QtGui/QGuiApplication>
24#include <QtGui/QGuiApplication>
25#include <QtQuick/QQuickWindow>
25#include <QtQuick/QQuickWindow>
26−#include <QtConcurrent/QtConcurrentRun>
28#include <QDebug>
27#include <QDebug>
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)
32− if (!screenshot.save(filename, format.toLatin1().data(), quality)) {
31+ if (screenshot.save(filename, format.toLatin1().data(), quality)) {
33 qWarning() << "ScreenGrabber: failed to save snapshot!";
34 qWarning() << "ScreenGrabber: failed to save snapshot!";
37− return true;
36+ return QString();
40ScreenGrabber::ScreenGrabber(QObject *parent)
39ScreenGrabber::ScreenGrabber(QObject *parent)
41 : QObject(parent)
40 : QObject(parent)
42+ QObject::connect(&m_watcher,
43+ &QFutureWatcher<QString>::finished,
45+ &ScreenGrabber::onScreenshotSaved);
43 QDir screenshotsDir;
47 QDir screenshotsDir;
44 if (qEnvironmentVariableIsSet("UNITY_TESTING")) {
48 if (qEnvironmentVariableIsSet("UNITY_TESTING")) {
45 qDebug() << "Using test environment";
49 qDebug() << "Using test environment";
@@ -85,8 +89,14 @@ void ScreenGrabber::captureAndSave(int angle)
85 const QImage screenshot = main_window->grabWindow().transformed(QTransform().rotate(angle));
89 const QImage screenshot = main_window->grabWindow().transformed(QTransform().rotate(angle));
86 const QString filename = makeFileName();
90 const QString filename = makeFileName();
87 qDebug() << "Saving screenshot to" << filename;
91 qDebug() << "Saving screenshot to" << filename;
88− auto saveOp = QtConcurrent::run(saveScreenshot, screenshot, filename, getFormat(), screenshotQuality);
92+ QFuture<QString> saveFuture(QtConcurrent::run(saveScreenshot, screenshot, filename, getFormat(), screenshotQuality));
89− if (saveOp.result()) {
93+ m_watcher.setFuture(saveFuture);
96+void ScreenGrabber::onScreenshotSaved()
98+ const QString filename = m_watcher.future().result();
99+ if (!filename.isEmpty()) {
90 Q_EMIT screenshotSaved(filename);
100 Q_EMIT screenshotSaved(filename);