diff --git a/src/kiri/init.js b/src/kiri/init.js index 350aeb18..b22b4d44 100644 --- a/src/kiri/init.js +++ b/src/kiri/init.js @@ -2239,7 +2239,7 @@ // block standard browser context menu DOC.oncontextmenu = (event) => { let et = event.target; - if (et.tagName === 'CANVAS' || et.id === 'context-menu') { + if (et.tagName === 'CANVAS' || et.id === 'context-menu' || et.classList.contains('draggable')) { event.preventDefault(); event.stopPropagation(); return false; diff --git a/src/mode/cam/client.js b/src/mode/cam/client.js index eb654ea0..766e741d 100644 --- a/src/mode/cam/client.js +++ b/src/mode/cam/client.js @@ -290,6 +290,9 @@ func.opDel(rec); }; let el = $(id); + if (rec.disabled) { + el.classList.add("disabled"); + } bounds.push(el); let timer = null; let inside = true; @@ -331,6 +334,17 @@ if (!clist.contains("draggable")) { return; } + if (ev.ctrlKey || ev.metaKey) { + rec.disabled = !rec.disabled; + ev.preventDefault(); + ev.stopPropagation(); + if (rec.disabled) { + clist.add("disabled"); + } else { + clist.remove("disabled"); + } + return true; + } clist.add("drag"); ev.stopPropagation(); ev.preventDefault(); diff --git a/src/mode/cam/slice.js b/src/mode/cam/slice.js index 79ef6939..e3b1d2ec 100644 --- a/src/mode/cam/slice.js +++ b/src/mode/cam/slice.js @@ -131,7 +131,7 @@ let opSum = 0; let opTot = opList.map(op => op.weight()).reduce((a,v) => a + v); - for (let op of proc.ops) { + for (let op of proc.ops.filter(op => !op.disabled)) { let opfn = OPS[op.type]; if (opfn) { let opin = new opfn(state, op); diff --git a/web/kiri/index.css b/web/kiri/index.css index b5a3e23d..c6bde899 100644 --- a/web/kiri/index.css +++ b/web/kiri/index.css @@ -637,6 +637,9 @@ th, tr, td, label { #oplist .drag { background-color: var(--highlight) !important; } +#oplist .disabled { + background-color: rgba(220,150,150,0.5) !important; +} #oplist div .label { pointer-events: none; }