From 7e080857aa037ead9c1bc61111a02253efc4266e Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 2 Aug 2021 10:05:42 +0100 Subject: [PATCH] Fix an infinite recursion crash when opening the event browser * If a capture was opened it would recurse between initialising the event browser and the marker breadcrumbs. --- qrenderdoc/Widgets/MarkerBreadcrumbs.cpp | 12 +++++------- qrenderdoc/Widgets/MarkerBreadcrumbs.h | 3 ++- qrenderdoc/Windows/EventBrowser.cpp | 2 +- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/qrenderdoc/Widgets/MarkerBreadcrumbs.cpp b/qrenderdoc/Widgets/MarkerBreadcrumbs.cpp index a4880c07b..364e2aa4c 100644 --- a/qrenderdoc/Widgets/MarkerBreadcrumbs.cpp +++ b/qrenderdoc/Widgets/MarkerBreadcrumbs.cpp @@ -206,8 +206,8 @@ QLayoutItem *BreadcrumbsLayout::takeAt(int index) return NULL; } -MarkerBreadcrumbs::MarkerBreadcrumbs(ICaptureContext &ctx, QWidget *parent) - : QFrame(parent), m_Ctx(ctx) +MarkerBreadcrumbs::MarkerBreadcrumbs(ICaptureContext &ctx, IEventBrowser *browser, QWidget *parent) + : QFrame(parent), m_Ctx(ctx), m_Browser(browser) { setFont(Formatter::PreferredFont()); @@ -232,7 +232,7 @@ MarkerBreadcrumbs::~MarkerBreadcrumbs() void MarkerBreadcrumbs::OnEventChanged(uint32_t eventId) { - const ActionDescription *parent = m_Ctx.GetEventBrowser()->GetActionForEID(m_Ctx.CurEvent()); + const ActionDescription *parent = m_Browser->GetActionForEID(m_Ctx.CurEvent()); if(parent != NULL && !(parent->flags & ActionFlags::PushMarker)) parent = parent->parent; @@ -276,8 +276,7 @@ void MarkerBreadcrumbs::ConfigurePathMenu(QMenu *menu, const ActionDescription * menu->clear(); for(const ActionDescription &child : actions) { - if((child.flags & ActionFlags::PushMarker) && - m_Ctx.GetEventBrowser()->IsAPIEventVisible(child.eventId)) + if((child.flags & ActionFlags::PushMarker) && m_Browser->IsAPIEventVisible(child.eventId)) { QAction *menuAction = new QAction(child.customName, menu); @@ -331,8 +330,7 @@ void MarkerBreadcrumbs::AddPathButton(const ActionDescription *action) for(const ActionDescription &child : action ? action->children : m_Ctx.CurRootActions()) { - if((child.flags & ActionFlags::PushMarker) && - m_Ctx.GetEventBrowser()->IsAPIEventVisible(child.eventId)) + if((child.flags & ActionFlags::PushMarker) && m_Browser->IsAPIEventVisible(child.eventId)) { hasChildMarkers = true; break; diff --git a/qrenderdoc/Widgets/MarkerBreadcrumbs.h b/qrenderdoc/Widgets/MarkerBreadcrumbs.h index 0420f1fd0..fcaf0ac63 100644 --- a/qrenderdoc/Widgets/MarkerBreadcrumbs.h +++ b/qrenderdoc/Widgets/MarkerBreadcrumbs.h @@ -63,7 +63,7 @@ class MarkerBreadcrumbs : public QFrame Q_OBJECT public: - explicit MarkerBreadcrumbs(ICaptureContext &ctx, QWidget *parent = 0); + explicit MarkerBreadcrumbs(ICaptureContext &ctx, IEventBrowser *browser, QWidget *parent = 0); ~MarkerBreadcrumbs(); // when a new event is selected @@ -80,6 +80,7 @@ private: void ConfigurePathMenu(QMenu *, const ActionDescription *); ICaptureContext &m_Ctx; + IEventBrowser *m_Browser; QVector m_Path; diff --git a/qrenderdoc/Windows/EventBrowser.cpp b/qrenderdoc/Windows/EventBrowser.cpp index 39753e2ff..1ee680883 100644 --- a/qrenderdoc/Windows/EventBrowser.cpp +++ b/qrenderdoc/Windows/EventBrowser.cpp @@ -3388,7 +3388,7 @@ EventBrowser::EventBrowser(ICaptureContext &ctx, QWidget *parent) box->setContentsMargins(QMargins(0, 0, 0, 0)); box->setMargin(0); box->setSpacing(0); - m_Breadcrumbs = new MarkerBreadcrumbs(m_Ctx, this); + m_Breadcrumbs = new MarkerBreadcrumbs(m_Ctx, this, this); box->addWidget(m_Breadcrumbs); ui->breadcrumbStrip->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum);