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 <eike.ziller@qt.io>
This commit is contained in:
hjk
2024-12-09 09:22:38 +01:00
parent a29c17e2c3
commit dc53625359

View File

@@ -1668,35 +1668,31 @@ bool BreakHandler::contextMenuEvent(const ItemViewEvent &ev)
}
);
QList<Breakpoint> enabledBreakpoints;
QList<Breakpoint> 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,