fix(dynmode): one toggle keeps DYNMODE's sign in step

F12, the drafting dialog and restored settings each re-derived DYNMODE and
lost the mode on the way: F12 off set 0, so on came back as 3 even after
DYNMODE 1. set_dyn_input now makes off negative (temporarily off) and on
restore the stored mode, and the bare query prints the stored value.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Hakan SevenandClaude Opus 5.5 committed 2026-10-03 15:01:45 +03:00
1 parent 92c00ecbe2
commit ba8aed4fad
4 files changed
+20 -25

No files matched your search

+13 -6
View File
@@ -44,6 +44,18 @@ impl DraftingSettingsState {
}
impl OpenCADStudio {
/// Turn Dynamic Input on or off with DYNMODE in step: off keeps the mode
/// negative (temporarily off), on restores it, or 3 when there was none.
pub(in crate::app) fn set_dyn_input(&mut self, on: bool) {
self.dyn_input = on;
let mode = self.dyn_mode.abs();
self.dyn_mode = match (on, mode) {
(true, 0) => 3,
(true, mode) => mode,
(false, mode) => -mode,
};
}
pub(super) fn drafting_settings_dirty(&self) -> bool {
match (&self.drafting_settings_state, &self.drafting_settings_saved) {
(Some(curr), Some(saved)) => curr.is_dirty(saved),
@@ -100,12 +112,7 @@ impl OpenCADStudio {
self.snapper.enabled = state.snap_modes.clone();
self.snapper.snap3d_enabled = state.osnap3d_on;
self.snapper.enabled3d = state.snap3d_modes.clone();
self.dyn_input = state.dyn_input_on;
if self.dyn_input && self.dyn_mode <= 0 {
self.dyn_mode = 3;
} else if !self.dyn_input && self.dyn_mode > 0 {
self.dyn_mode = 0;
}
self.set_dyn_input(state.dyn_input_on);
self.quick_properties = state.quick_props_on;
self.selection_cycling = state.selection_cycling_on;
self.sync_vport_display(self.active_tab);