From dc5362535935d443729a49e92de0469c8e60ee5d Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 9 Dec 2024 09:22:38 +0100 Subject: [PATCH] Debugger: Fix "{En,Dis}able All Breakpoints" context menu action The actual set of breakpoints to which the option was applied could have been different than the one used at the time of the creation of the context menu due to background activity. Found by crash reporter. Change-Id: I43a75c8659fe8a11988fa081022965db4ce9233c Reviewed-by: Eike Ziller --- src/plugins/debugger/breakhandler.cpp | 46 ++++++++++++--------------- 1 file changed, 21 insertions(+), 25 deletions(-) diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp index 5d0b25a3729..2636e99b256 100644 --- a/src/plugins/debugger/breakhandler.cpp +++ b/src/plugins/debugger/breakhandler.cpp @@ -1668,35 +1668,31 @@ bool BreakHandler::contextMenuEvent(const ItemViewEvent &ev) } ); - QList enabledBreakpoints; - QList disabledBreakpoints; - forItemsAtLevel<1>([&enabledBreakpoints, &disabledBreakpoints](Breakpoint bp) { - if (bp) { - if (bp->isEnabled()) - enabledBreakpoints.append(bp); - else - disabledBreakpoints.append(bp); - } + bool canDisableAll = false; + bool canEnableAll = false; + forItemsAtLevel<1>([&canDisableAll, &canEnableAll](Breakpoint bp) { + if (bp) + (bp->isEnabled() ? canDisableAll : canEnableAll) = true; }); - addAction(this, menu, Tr::tr("Disable All Breakpoints"), - !enabledBreakpoints.isEmpty(), - [this, enabledBreakpoints] { - for (Breakpoint bp : enabledBreakpoints) { - if (GlobalBreakpoint gbp = bp->globalBreakpoint()) - gbp->setEnabled(false, false); - requestBreakpointEnabling(bp, false); - } + addAction(this, menu, Tr::tr("Disable All Breakpoints"), canDisableAll, [this] { + forItemsAtLevel<1>([this](Breakpoint bp) { + if (bp && bp->isEnabled()) { + if (GlobalBreakpoint gbp = bp->globalBreakpoint()) + gbp->setEnabled(false, false); + requestBreakpointEnabling(bp, false); + } + }); }); - addAction(this, menu, Tr::tr("Enable All Breakpoints"), - !disabledBreakpoints.isEmpty(), - [this, disabledBreakpoints] { - for (Breakpoint bp : disabledBreakpoints) { - if (GlobalBreakpoint gbp = bp->globalBreakpoint()) - gbp->setEnabled(true, false); - requestBreakpointEnabling(bp, true); - } + addAction(this, menu, Tr::tr("Enable All Breakpoints"), canEnableAll, [this] { + forItemsAtLevel<1>([this](Breakpoint bp) { + if (bp && !bp->isEnabled()) { + if (GlobalBreakpoint gbp = bp->globalBreakpoint()) + gbp->setEnabled(true, false); + requestBreakpointEnabling(bp, true); + } + }); }); addAction(this, menu,