mirror of
https://github.com/storytold/effectcraft.git
synced 2026-11-10 18:31:30 -06:00
Shortcuts: panel and context scopes, one chord per scope
A shortcut belongs to the application, a panel or a context (editing text, a paint or camera tool active, a mask selected). The narrowest active scope runs a chord: an active context, the focused panel, the panel sharing its shortcuts (Timeline and Composition), the application. A context's shortcuts never run outside it. - shortcuts.rs: scope table for engine commands and menu entries, scope_rank, scope_label; UiCommand can state its scope. - Conflicts: the same chord in two scopes is an override (both keep working), reported with overrides: true; shortcuts.conflicts lists same-scope pairs only. - Scoped now, keys unchanged: Remember / Apply Interpretation and Delete Without Confirmation (Project), Duplicate Render Item (Render Queue). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
44f95f766c
commit
189f31d6d1
@@ -597,8 +597,8 @@ fn shortcut_presets_duplicate_rename_delete_export_import() {
|
||||
fn frontend_commands_are_bindable_with_panel_scope() {
|
||||
let mut s = Session::default();
|
||||
s.set_ui_commands(vec![
|
||||
crate::shortcuts::UiCommand { id: "timeline.zoomIn".into(), label: "Zoom In Time".into(), shortcut: Some("=".into()) },
|
||||
crate::shortcuts::UiCommand { id: "tool.hand".into(), label: "Hand Tool".into(), shortcut: Some("H".into()) },
|
||||
crate::shortcuts::UiCommand { id: "timeline.zoomIn".into(), label: "Zoom In Time".into(), shortcut: Some("=".into()), scope: None },
|
||||
crate::shortcuts::UiCommand { id: "tool.hand".into(), label: "Hand Tool".into(), shortcut: Some("H".into()), scope: None },
|
||||
]);
|
||||
let b = s.shortcuts().find("timeline.zoomIn").unwrap().clone();
|
||||
assert_eq!(b.scope, "Timeline");
|
||||
|
||||
Reference in New Issue
Block a user