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:
parent
eb513ac5f8
commit
039f703d7f
1 changed files with 25 additions and 0 deletions
|
|
@ -65,6 +65,16 @@ impl OpenCADStudio {
|
||||||
// the first space are left untouched. A non-alias passes through as-is.
|
// the first space are left untouched. A non-alias passes through as-is.
|
||||||
let resolved = self.resolve_alias(cmd);
|
let resolved = self.resolve_alias(cmd);
|
||||||
let cmd = resolved.as_deref().unwrap_or(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
|
// 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.
|
// combo left open) so it does not stay stuck behind the new tool.
|
||||||
self.ribbon.close_dropdown();
|
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,
|
/// Whether `cmd` makes sense on the Start (welcome) tab — document lifecycle,
|
||||||
/// links, and app-wide configuration; nothing that reads the scene. Single
|
/// links, and app-wide configuration; nothing that reads the scene. Single
|
||||||
/// source of truth: the dispatch gate refuses everything else, and the ribbon
|
/// source of truth: the dispatch gate refuses everything else, and the ribbon
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue