From a72067cca5d7feb22fb509b384585644a47de25a Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Thu, 29 Jan 2026 10:28:43 +1300 Subject: [PATCH] AsyncInvoke operations related to embedded dependencies --- qrenderdoc/Code/CaptureContext.cpp | 34 ++++++++++++++++++++++++++++-- qrenderdoc/Windows/MainWindow.cpp | 17 ++++++++------- 2 files changed, 41 insertions(+), 10 deletions(-) diff --git a/qrenderdoc/Code/CaptureContext.cpp b/qrenderdoc/Code/CaptureContext.cpp index 563a4608f..46213b496 100644 --- a/qrenderdoc/Code/CaptureContext.cpp +++ b/qrenderdoc/Code/CaptureContext.cpp @@ -2893,7 +2893,22 @@ void CaptureContext::EmbedDependentFiles() return; // Always operate on the capture access (local or remote) - m_Replay.GetCaptureAccess()->EmbedDependenciesIntoCapture(); + QString tag = lit("replayEmbedDependenciesIntoCapture"); + bool done = false; + + Replay().AsyncInvoke(tag, [this, &done](IReplayController *) { + m_Replay.GetCaptureAccess()->EmbedDependenciesIntoCapture(); + done = true; + }); + + // wait a short while before displaying the progress dialog + for(int i = 0; !done && (i < 100 || m_Replay.GetCurrentProcessingTag().isEmpty() || + m_Replay.GetCurrentProcessingTag() == tag); + i++) + QThread::msleep(5); + + ShowProgressDialog(m_MainWindow->Widget(), tr("Please wait, working..."), + [&done]() { return done; }); // Local replay if(m_Replay.GetCaptureFile()) @@ -2923,7 +2938,22 @@ void CaptureContext::RemoveDependentFiles() return; // Always operate on the capture access (local or remote) - m_Replay.GetCaptureAccess()->RemoveDependenciesFromCapture(); + QString tag = lit("replayRemoveDependenciesFromCapture"); + bool done = false; + + Replay().AsyncInvoke(tag, [this, &done](IReplayController *) { + m_Replay.GetCaptureAccess()->RemoveDependenciesFromCapture(); + done = true; + }); + + // wait a short while before displaying the progress dialog + for(int i = 0; !done && (i < 100 || m_Replay.GetCurrentProcessingTag().isEmpty() || + m_Replay.GetCurrentProcessingTag() == tag); + i++) + QThread::msleep(5); + + ShowProgressDialog(m_MainWindow->Widget(), tr("Please wait, working..."), + [&done]() { return done; }); // Local replay if(m_Replay.GetCaptureFile()) diff --git a/qrenderdoc/Windows/MainWindow.cpp b/qrenderdoc/Windows/MainWindow.cpp index b888d1137..cb5a37e06 100644 --- a/qrenderdoc/Windows/MainWindow.cpp +++ b/qrenderdoc/Windows/MainWindow.cpp @@ -3066,17 +3066,18 @@ void MainWindow::loadLayout_triggered() void MainWindow::updateToolsMenuOptions() { - bool hasEmbeddedDependencies = false; - bool hasPendingDependencies = false; - if(m_Ctx.Replay().GetCaptureAccess()) { - hasEmbeddedDependencies = m_Ctx.Replay().GetCaptureAccess()->HasEmbeddedDependencies(); - hasPendingDependencies = m_Ctx.Replay().GetCaptureAccess()->HasPendingDependencies(); - } + m_Ctx.Replay().AsyncInvoke([this](IReplayController *) { + bool hasEmbeddedDependencies = m_Ctx.Replay().GetCaptureAccess()->HasEmbeddedDependencies(); + bool hasPendingDependencies = m_Ctx.Replay().GetCaptureAccess()->HasPendingDependencies(); - ui->action_EmbedExternalFiles->setEnabled(!hasEmbeddedDependencies && hasPendingDependencies); - ui->action_RemoveExternalFiles->setEnabled(hasEmbeddedDependencies); + GUIInvoke::call(this, [this, hasEmbeddedDependencies, hasPendingDependencies]() { + ui->action_EmbedExternalFiles->setEnabled(!hasEmbeddedDependencies && hasPendingDependencies); + ui->action_RemoveExternalFiles->setEnabled(hasEmbeddedDependencies); + }); + }); + } } void MainWindow::closeEvent(QCloseEvent *event)