forked from 1b-agent/opencadstudio-upstream
fix(input): stop drafting-aid keys from cancelling the command
F8 reached ORTHO as an ordinary command, and dispatching a command tears down whatever is running first: the active command dropped, its preview cleared, its base point forgotten. So pressing F8 partway through a LINE abandoned the line, and during a MOVE it took the dragged ghost with it. A function key gets pressed mid-command — that is what it is for. Toggles that only flip a flag now skip the teardown: ORTHO, GRID, SNAP, POLAR, and the drafting-settings popup. None of them starts a command, opens a document or reads geometry, so there is nothing for the teardown to protect. F7, F9 and F10 came through the same path and were broken the same way; they are fixed with F8. F3, F11 and F12 already had messages of their own and were never affected. Closes #677 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
eb513ac5f8
commit
039f703d7f
1 file changed
+25
@@ -65,6 +65,16 @@ impl OpenCADStudio {
|
||||
// the first space are left untouched. A non-alias passes through as-is.
|
||||
let resolved = self.resolve_alias(cmd);
|
||||
let cmd = resolved.as_deref().unwrap_or(cmd);
|
||||
// A drafting aid only flips a flag, so it must not disturb whatever is
|
||||
// already running: pressing F8 partway through a LINE means "constrain
|
||||
// the rest of this line", not "abandon it". Everything below tears the
|
||||
// running command down, so a transparent one skips straight past it.
|
||||
// (#677)
|
||||
if is_transparent(cmd) {
|
||||
return self
|
||||
.dispatch_families(cmd, i)
|
||||
.unwrap_or_else(Task::none);
|
||||
}
|
||||
// Starting a command closes any open ribbon dropdown (e.g. a style
|
||||
// combo left open) so it does not stay stuck behind the new tool.
|
||||
self.ribbon.close_dropdown();
|
||||
@@ -232,6 +242,21 @@ impl OpenCADStudio {
|
||||
}
|
||||
}
|
||||
|
||||
/// Commands that toggle a drafting aid and nothing else.
|
||||
///
|
||||
/// They are reachable from a function key, and a function key gets pressed
|
||||
/// mid-command — that is the point of it. Running them through the ordinary
|
||||
/// path cancelled the active command, cleared its preview and dropped its base
|
||||
/// point, so F8 during a MOVE both ended the move and made the dragged ghost
|
||||
/// vanish. Nothing here starts a command, opens a document or reads geometry,
|
||||
/// so there is nothing for the teardown to protect. (#677)
|
||||
pub fn is_transparent(cmd: &str) -> bool {
|
||||
matches!(
|
||||
cmd,
|
||||
"ORTHO" | "GRID" | "SNAP" | "POLAR" | "OSNAP" | "DSETTINGS"
|
||||
)
|
||||
}
|
||||
|
||||
/// Whether `cmd` makes sense on the Start (welcome) tab — document lifecycle,
|
||||
/// links, and app-wide configuration; nothing that reads the scene. Single
|
||||
/// source of truth: the dispatch gate refuses everything else, and the ribbon
|
||||
|
||||
Reference in new issue
Block a user