diff options
Diffstat (limited to 'src/lib/corelib/language/loader.cpp')
-rw-r--r-- | src/lib/corelib/language/loader.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/lib/corelib/language/loader.cpp b/src/lib/corelib/language/loader.cpp index baf30c474..62c1aadde 100644 --- a/src/lib/corelib/language/loader.cpp +++ b/src/lib/corelib/language/loader.cpp @@ -40,6 +40,7 @@ #include <tools/setupprojectparameters.h> #include <QDir> +#include <QTimer> namespace qbs { namespace Internal { @@ -105,6 +106,8 @@ TopLevelProjectPtr Loader::loadProject(const SetupProjectParameters ¶meters) .toMap())); m_engine->clearExceptions(); + QTimer cancelationTimer; + // At this point, we cannot set a sensible total effort, because we know nothing about // the project yet. That's why we use a placeholder here, so the user at least // sees that an operation is starting. The real total effort will be set later when @@ -112,6 +115,9 @@ TopLevelProjectPtr Loader::loadProject(const SetupProjectParameters ¶meters) if (m_progressObserver) { m_progressObserver->initialize(Tr::tr("Resolving project for configuration %1") .arg(TopLevelProject::deriveId(parameters.buildConfigurationTree())), 1); + cancelationTimer.setSingleShot(false); + QObject::connect(&cancelationTimer, SIGNAL(timeout()), SLOT(checkForCancelation())); + cancelationTimer.start(1000); } ModuleLoaderResult loadResult @@ -128,5 +134,12 @@ TopLevelProjectPtr Loader::loadProject(const SetupProjectParameters ¶meters) return project; } +void Loader::checkForCancelation() +{ + QBS_ASSERT(m_progressObserver, return); + if (m_progressObserver->canceled()) + m_engine->cancel(); +} + } // namespace Internal } // namespace qbs |